磁盘存储达到时的sqlite3

sqlite3 when disk storage reached

我有一个 2M 字节的存储空间,用于在我们的嵌入式设备(linux 基础)中存储一些日志。由于大小非常有限,我们必须实施一些方法来处理达到最大大小的情况。一种选择是带有 mmap 的循环缓冲区以实现持久性。我们正在考虑的另一个选择是使用 sqlite3(当达到最大大小时,删除最旧的条目,插入新条目)。

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

  1. sqlite3如何计算磁盘占用率?除了数据库文件大小,这里还需要统计什么?

  2. 达到2M会怎样?是否有任何特定信息或错误我可以检查以删除最旧的条目?

  3. 删除条目然后插入新条目是否是一种好方法(性能方面、数据分段方面)?

欢迎提出任何建议或反馈。

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

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

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

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