是否有必要清理 SQLite3 数据库以防止数据丢失?

Is it necessary to vacuum a SQLite3 database to prevent data-loss?

在 PostgreSQL 中是 necessary to vacuum periodically to prevent data loss of very old data due to transaction ID wraparound。我担心数据丢失也可能是 SQLite3 数据库的一个问题,如果它们没有定期清理的话。

此外,SQLite3 数据库所承受的工作负载是否重要?我目前正在考虑在一些场景中使用 SQLite3,包括:

更新和删除的频率也很重要吗?

VACUUM

  • 消除了碎片,因此当您有大量删除和插入、 许多扫描整个表的 read-only 查询时,它会有所帮助,并且
  • 释放未使用的页面,因此当您删除大量数据并且之后插入的数据很少时,它会有所帮助。

但这些只是优化。 碎片通常只对旋转磁盘有影响,释放 space 是不必要的,除非你 运行 超出 space.

SQLite 使用不同的事务锁定机制(更简单、更快,但不可扩展)并且不需要维护。