磁盘存储达到时的sqlite3
sqlite3 when disk storage reached
我有一个 2M 字节的存储空间,用于在我们的嵌入式设备(linux 基础)中存储一些日志。由于大小非常有限,我们必须实施一些方法来处理达到最大大小的情况。一种选择是带有 mmap 的循环缓冲区以实现持久性。我们正在考虑的另一个选择是使用 sqlite3(当达到最大大小时,删除最旧的条目,插入新条目)。
但是,据我了解,sqlite3使用页面(限制4096K或可配置)。我的问题是:
sqlite3如何计算磁盘占用率?除了数据库文件大小,这里还需要统计什么?
达到2M会怎样?是否有任何特定信息或错误我可以检查以删除最旧的条目?
删除条目然后插入新条目是否是一种好方法(性能方面、数据分段方面)?
欢迎提出任何建议或反馈。
无法计算磁盘使用率;你必须监视文件。除了实际的数据库文件外,还有回滚日志,其大小对应于事务中更改的数据量。
当磁盘已满时,您会收到错误代码 SQLITE_FULL(或者可能是 SQLITE_IOERR_WRITE,具体取决于 OS)。
您可以使用 PRAGMA max_page_count 限制数据库大小。
删除的行会导致该特定数据库页面中有更多空闲 space。 (这不会改变文件大小,除非你 运行 VACUUM。)
当在 table 的另一端插入新行时,space 只有在整个页面被释放时才能被重用,因为它的所有行都被删除了。
因此,如果可能,您应该尝试大块删除行。
我有一个 2M 字节的存储空间,用于在我们的嵌入式设备(linux 基础)中存储一些日志。由于大小非常有限,我们必须实施一些方法来处理达到最大大小的情况。一种选择是带有 mmap 的循环缓冲区以实现持久性。我们正在考虑的另一个选择是使用 sqlite3(当达到最大大小时,删除最旧的条目,插入新条目)。
但是,据我了解,sqlite3使用页面(限制4096K或可配置)。我的问题是:
sqlite3如何计算磁盘占用率?除了数据库文件大小,这里还需要统计什么?
达到2M会怎样?是否有任何特定信息或错误我可以检查以删除最旧的条目?
删除条目然后插入新条目是否是一种好方法(性能方面、数据分段方面)?
欢迎提出任何建议或反馈。
无法计算磁盘使用率;你必须监视文件。除了实际的数据库文件外,还有回滚日志,其大小对应于事务中更改的数据量。
当磁盘已满时,您会收到错误代码 SQLITE_FULL(或者可能是 SQLITE_IOERR_WRITE,具体取决于 OS)。
您可以使用 PRAGMA max_page_count 限制数据库大小。
删除的行会导致该特定数据库页面中有更多空闲 space。 (这不会改变文件大小,除非你 运行 VACUUM。) 当在 table 的另一端插入新行时,space 只有在整个页面被释放时才能被重用,因为它的所有行都被删除了。 因此,如果可能,您应该尝试大块删除行。