我的RaspberryPi每5分钟读取一次温度/空气压力传感器,并将数据和时间戳写入CSV文件。让它每次大约是25个字节。
作为一种实验,我还将数据写入mySQL数据库(MariaDB,InnoDB),因为这允许简单的查询、来自不同进程的数据访问等等。为了更快地访问,时间戳是主键。
原则上,时间戳是4字节,每个值4字节浮动,因此总共大约12字节。当然,数据组织有更多的字节,但是使用iotop -Pa,我发现每5分钟,大约180 to被写入磁盘。即使在考虑日志记录时也是如此,而且时间戳可能是主键。
,有人知道DB在那里做什么吗?也许,有什么可以减少这种情况的地方吗?
我担心数据会被一次又一次地覆盖,尽管数据库驻留在USB闪存驱动器上,而不是内部SD卡上,但这将很快耗尽驱动器。(是的,我知道,在这种媒体上建立数据库不是个好主意,但我没想到会如此糟糕)
发布于 2018-03-27 16:35:58
对于事务的每一次提交,MySQL都会向InnoDB重做日志写入一条记录。写入大小至少为512字节,即使行大小较小。您可以通过将更改分组为事务来减少写操作(请参阅https://www.percona.com/blog/2012/10/08/measuring-the-amount-of-writes-in-innodb-redo-logs/)。
还可以将MySQL设置为在提交时推迟对重做日志文件的写入。如果您的设备在提交的事务到达磁盘之前崩溃,这将有丢失数据的风险。
如果启用了二进制日志,MySQL也可能会写入它的二进制日志(您可能不在这样的设备上,但您应该检查)。
当需要将已更改的页面从RAM刷新到磁盘时,首先MySQL会将页面写入“双写段”,然后将真正的页面写入各自的磁盘位置。这是为了防止在页写入期间崩溃,这可能损坏您的数据库。如果您更关心降低写I/O而不是风险,则可以禁用双写活动(但在数据库损坏后不要抱怨)。
binlog,如果有设置的话innodb_doublewrite=0innodb_flush_log_at_trx_commit=0另见http://www.tocker.ca/2013/11/04/reducing-mysql-durability-for-testing.html
https://stackoverflow.com/questions/49481327
复制相似问题