到达磁盘存储时的sqlite3

时间:2016-07-25 09:58:27

标签: database sqlite filesystems persistence

我有一个2M字节的存储空间来存储嵌入式设备(linux base)中的一些日志。由于尺寸非常有限,我们必须实施一些方法来处理达到最大尺寸的情况。一个选项是使用mmap进行持久化的循环缓冲区。我们想到的另一个选择是使用sqlite3(当达到最大大小时,删除最旧的条目,插入新的条目)。

但是,据我所知,sqlite3使用页面(限制4096K或可配置)。我的问题是:

  1. 如何从sqlite3计算磁盘使用量?除了数据库文件大小,还需要在这里算什么呢?

  2. 到达2M时会发生什么?是否有任何特定的信息或错误,我可以检查删除最旧的条目?

  3. 删除条目然后插入新条目是一种很好的方法(性能明智,数据分割明智)吗?

  4. 欢迎任何建议或反馈。

1 个答案:

答案 0 :(得分:1)

无法计算磁盘使用情况;你必须监控文件。除了实际的数据库文件外,还有回滚日志,其大小与事务中已更改数据的数量相对应。

当磁盘已满时,您会收到错误代码SQLITE_FULL(或者可能是SQLITE_IOERR_WRITE,具体取决于操作系统)。

您可以使用PRAGMA max_page_count限制数据库大小。

删除的行会在该特定数据库页面中产生更多可用空间。 (这从未改变文件大小,除非您运行VACUUM。) 在表的另一端插入新行时,只有在释放整个页面时才能重用该空间,因为它的所有行都被删除了。 因此,如果可能的话,您应该尝试删除大块的行。