生产中 SQLite 的陷阱

主要观点:SQLite 近来受关注,适合生产级 Web 应用,但有一些问题需注意。
关键信息

  • 理论上 SQLite 数据库极限为 281 太字节,随数据库增长会遇与其他数据库类似问题。
  • 需注意配置(如多线程访问等)、不能通过网络连接、网络和临时文件系统问题、并发限制、事务特性(默认 Serializable 较严格)、备份及迁移等方面。
    重要细节
  • 配置多线程访问需运行特定 PRAGMAs,Rails 默认配置,Django 需手动设置。
  • 单文件设计使从其他机器连接数据库更困难,可考虑 LiteFS 等重新实现的项目,但更复杂。
  • 网络文件系统可能导致数据库损坏,Ephemeral 文件系统在容器重新部署或重启时数据会丢失,Fly.io 可解决此问题。
  • SQLite 写操作一次仅限一个线程,可通过拆分表或使用 WAL2 模式改善,事务默认 Serializable 较严格,可通过特定模式改善。
  • 备份不能简单复制粘贴文件,需使用VACUUM INTO命令或第三方工具,有实现 raft 共识的项目可提供更高耐久性保证。
  • SQLite 对 ALTER TABLE 语句支持有限,可使用 sqlite-utils 解决,大多数 Web 应用可使用 SQLite ,但多机器等情况更适合 MySQL 或 Postgres 。
阅读 23
0 条评论