Pan*_*nek 6 sqlite io raspberry-pi
我在 Raspberry Pi 上使用 sqlite 来存储传感器读数。表结构很简单:
CREATE TABLE IF NOT EXISTS sensors(id INTEGER PRIMARY KEY AUTOINCREMENT, codename TEXT, name TEXT)
CREATE TABLE IF NOT EXISTS sensorvalues(id INTEGER PRIMARY KEY AUTOINCREMENT, sensorid INTEGER, value DECIMAL(10,2), time DATETIME, FOREIGN KEY(sensorid) REFERENCES sensors(id))
Run Code Online (Sandbox Code Playgroud)
每次我将记录插入到“sensorvalues”表(大约 20 个字节的数据)时,iotop 都会显示大约 30Kb 被写入磁盘。为了保护 SD 卡免受损坏,我想尽量减少写入永久内存的数据。我知道完全写入 20 个字节是不可能的,因为 IO 操作使用页面结构和缓冲区,但是每次提交写入 30Kb 似乎太多了。有什么方法可以调整 sqlite 以将写入的数据量最小化到必要的最小值?
插入这些表需要更新表和索引,并且为了在崩溃时的可靠性,数据库首先将旧数据写入回滚日志,然后更新数据库文件本身,然后删除回滚日志。
您可以使用PRAGMA Journal_mode = memory和/或PRAGMA synchronous = off禁用安全功能,但是
如果设置 MEMORY 日志模式时使用 SQLite 的应用程序在事务中崩溃,则数据库文件很可能会损坏。
对于许多插入,WAL 模式可能更高效。
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |