我们曾经弃用SQLite的理由,好像逐渐不成立了……

AI导读
 
SQLite已从轻量级数据库蜕变为生产环境强者,凭借Turso、Litestream等工具和主流框架支持,在读取密集型服务、多租户SaaS及边缘场景中性能媲美PostgreSQL。只需调整五项PRAGMA配置,即可将单文件数据库优化至现代硬件水平,颠覆你对嵌入式数据库的认知。
内容由AI智能生成
有用

过去二十年里,SQLite长期被视作适用于测试环境、移动端应用和快速原型开发的数据库。等到项目正式落地,大家就会把它换掉。但这种固有认知正在悄无声息地被打破。2026年,一波新工具、新架构模式的出现,加上开发者们开始重新审视绝大多数应用的真实需求,已经推动SQLite以惊人的规模投入了生产环境。

本文并非主张SQLite可以在所有业务场景下取代PostgreSQL,而是针对一类应用场景:例如读取密集型服务、多租户SaaS产品、边缘部署场景、嵌入式JVM工具。坦白说,在这类场景中SQLite已经成为了更优选择。随着Turso这类平台、Litestream等工具的出现,以及Ruby on Rails、Spring Boot等主流框架的原生支持,嵌入式数据库和生产级数据库之间的差距,已经缩小到多数开发者难以想象的程度。

 

资料来源: DEV社区《SQLite复兴(2026)》; ByteIota Edge生产报告;Turso/Neon免费套餐文档

一、为什么我们曾经弃用SQLite的理由逐渐不成立

长期以来,大家不建议在服务端使用SQLite的理由始终是固定的几条:单写并发、不支持网络访问、没有用户管理、ALTER TABLE支持有限以及不支持数据复制。这些批评在过去完全合理,部分限制至今也仍然成立。SQLite的设计初衷可以追溯到2000年,当时它所处的环境没有网络、没有多进程访问,也不需要7×24全天候高负载运行。

但从2024年开始,一个核心观点开始在技术博客圈广泛传播:正如Stephen Margheim在一场广为流传的Rails技术分享中所说,SQLite是一个为2004年的硬件环境所设计的数据库,如今却运行在2025年的设备上。固态硬盘(SSD)已经从根本上改变了I/O的成本模型。在NVMe存储上开启WAL模式后,SQLite在单个节点上可以实现每秒1万到5万次的持续写入。这和同一台机器上调优后的PostgreSQL实例性能相当。此外,与SQLite的默认日志模式相比,在高并发负载场景下启用WAL模式可以将p99写入延迟降低30%到60%。这根本不是一个玩具数据库所能达到的性能水平,这个指标足以覆盖绝大多数Web应用的需求。

此外,生态系统也发生了变化。过去需要独立数据库服务才能提供的能力,如今要么已经内置为SQLite扩展,要么可以通过轻量封装层实现。这彻底改变了技术选型的权衡逻辑。

先把实话说在前头:SQLite本质上仍然是单文件数据库。如果你的应用确实存在多进程高并发写入的需求 :比如实时竞价、高频事件流处理或者是多写端分布式系统,那么PostgreSQL或者MySQL依然是更合适的选择。本文接下来的内容,主要面向绝大多数不属于这类场景的应用。

二、彻底改变格局的生态体系

SQLite的再度崛起,并非某一款工具突然走红,而是多个独立项目同步走向成熟,共同补齐了SQLite真正的短板,同时又没有丢掉它简洁易用的核心优势。

1、LibSQL和Turso :具备网络能力的SQLite

LibSQL是Turso团队基于SQLite开发的开源分支版本。它完全兼容SQLite原有API ,同时新增了以往难以实现的能力:支持通过HTTP和WebSocket访问的服务端模式、可从远程主库自动同步的嵌入式副本、基于MVCC与BEGIN CONCURRENT实现的多写支持、面向AI与RAG场景的原生向量搜索,以及更完善的ALTER TABLE功能。更关键的是,Turso基于LibSQL之上构建了全托管云服务,支持创建无限量数据库(由于采用文件而非进程形式,因此不存在冷启动问题),并提供十分慷慨的免费套餐:每月9GB存储空间与5亿行数据读取量。

该方案带来的架构模式极具优势:每个用户、租户或是AI智能体,都可以拥有专属的独立SQLite数据库。数据读取在本地副本执行,延迟可低至微秒级;写入操作则会同步至远端主库。这套架构不用管理连接池,没有缩零后再扩容的性能损耗,租户之间也不存在共享状态的竞争问题。对于多租户SaaS应用而言,这种单租户单数据库的SQLite架构,在运维复杂度上远低于PostgreSQL常用的单库多Schema或行级隔离方案。

2、Litestream:不用数据库服务器的持续备份方案

Litestream由Ben Johnson开发,可以说是SQLite生态中最被低估的工具。它以Sidecar模式运行,持续追踪SQLite的WAL,并将数据变更实时同步至兼容S3协议的对象存储中。数据恢复只需从同步流中还原即可:支持时间点恢复、极低的恢复点目标(RPO)、多环境复制等能力,全程无需运行独立数据库服务器。很多团队想享受SQLite极简运维的优势,却又需要可靠的灾备方案,而Litestream恰好完美补齐了这块短板。

以下是一个精简版Litestream配置示例:

1
# litestream.yml — continuous WAL streaming to S3
2
dbs:
3
- path: /data/app.db
4
replicas:
5
- url: s3://your-bucket/app.db

就是这么简单。Litestream会自动处理WAL日志追踪、S3上传、数据压缩与保留策略。数据恢复也只需要一条命令即可完成。结合SQLite自身的ACID特性,以及WAL模式带来的数据持久化能力,这套方案已经达到生产级备份标准,其简洁程度甚至超过很多PostgreSQL的备份部署方式。

3、Cloudflare D1:全球边缘节点上的SQLite

Cloudflare D1于2024年4月正式全面上线,支持在Cloudflare全球节点网络中自动实现读副本。SQLite直接内嵌在Workers运行时中,开发者通过绑定接口进行操作,不用接触数据库文件或编写连接字符串。性能测试显示,在 50 万行数据规模的表中,D1的查询性能达到主流无服务器版PostgreSQL服务的3.2倍。对于Cloudflare Workers 用户而言,D1是自然而然的首选方案:数据库与计算服务同节点部署,消除了跨地域网络往返带来的性能损耗,解决了无服务器数据库常见的性能痛点。

 

来源: DEV 社区 — SQLite 的复兴(2026 年 2 月)。数据为 p50 基准测试结果;请务必使用您自己的工作负载进行验证。

三、从JVM视角上看:Spring Boot及更多场景下的SQLite

SQLite的复兴浪潮中,JVM生态几乎是最被忽视的领域。Java和Kotlin开发者以往做嵌入式数据库时,开发环境一般用H2或HSQLDB,到生产环境再切换成 PostgreSQL。但SQLite如今已是极具竞争力的替代方案,而且不仅能用在测试环境中,生产环境同样稳定可靠。

xerial/sqlite-jdbc驱动(GitHub Star超过3000,最新版本为2025年11月发布的 3.50.x 系列)提供了标准JDBC接口。从Hibernate 6开始,hibernate-community-dialects已内置SQLite方言支持,这意味着Spring Boot + JPA集成SQLite非常简单直接。由于SQLite是进程内运行,没有Socket、没有独立服务、也无需鉴权层 ,因此读写操作可直接通过JVM访问磁盘上的数据库文件。

下面是一份可直接运行的Spring Boot + SQLite application.properties配置示例:

1
# application.properties — Spring Boot + SQLite + Hibernate 6
2
spring.datasource.url=jdbc:sqlite:./data/app.db
3
spring.datasource.driver-class-name=org.sqlite.JDBC
4
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
5
spring.jpa.hibernate.ddl-auto=update
6
spring.sql.init.mode=always
7
 
8
 
9
# Enable WAL mode for better concurrent read performance
10
spring.datasource.hikari.connection-init-sql=PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;

sqlite-jdbc的Maven依赖配置如下:

1
<dependency>
2
<groupId>org.xerial</groupId>
3
<artifactId>sqlite-jdbc</artifactId>
4
<version>3.50.3.0</version>
5
</dependency>
6
<dependency>
7
<groupId>org.hibernate.orm</groupId>
8
<artifactId>hibernate-community-dialects</artifactId>
9
</dependency>

SQLite在JVM生态中有以下适用场景:

  • 需要本地数据存储的CLI工具和Java桌面应用;

  • 单实例部署、写入并发较低的Spring Boot微服务;

  • 测试套件:使用内存模式SQLite(jdbc:sqlite::memory:)替代需要单独启动的PostgreSQL容器;

  • Android应用(SQLite是Android系统原生内置数据库);

  • 读密集型服务,且数据库与应用部署在同一台机器上。

在JVM上使用SQLite有一个必须注意的坑:SQLite采用连接级别的锁机制,这意味着如果搭配HikariCP连接池,并且多线程同时执行写入操作,不做精细配置就会频繁出现SQLITE_BUSY错误。实际解决方案是:设置PRAGMA busy_timeout=5000,同时控制写入并发量,或是所有写入请求统一走单一连接。但如果你的JVM服务存在高并发写入场景,PostgreSQL依旧是更合适的选择。

 

数据来源: DEV社区SQLite Renaissance基准测试(2026年2月)。数据为报告范围的代表性中值。

四、多租户架构的变革

除了纯粹的性能优势,SQLite在2026年带来的一大架构变革,就是每个租户一个数据库架构。传统基于PostgreSQL的多租户应用,通常采用两种方案:要么共用数据表、通过tenant_id字段做隔离;要么为每个租户单独创建Schema。两种方案都要做好查询隔离、行级权限管控,连接池也需适配各租户的负载压力。

借助SQLite与Turso,每个租户可以直接拥有数据库文件。这种隔离是物理结构级的,而非逻辑层面。某个租户的慢查询不会影响其他租户的数据读取。数据备份、版本迁移乃至数据删除(比如遵循《通用数据保护条例》GDPR的相关需求)都变得极为简单,直接操作单个文件即可。Turso免费版支持创建无限数量的数据库,即便是服务数万名租户,该架构也能有效控制成本。

这种方案尤其适合处于增长初期的SaaS产品。传统PostgreSQL要实现完善的多租户隔离,运维成本往往远高于实际业务负载。正如Turso所言,目前不少团队不仅将该模式应用于SaaS业务,还落地到AI智能体架构中:为每个智能体分配独立数据库,用于状态追踪、记忆存储与任务协同,完全规避资源争抢问题。

五、SQLite与PostgreSQL:实用选型指南

与其简单判定SQLite和PostgreSQL到底谁更好,不如明确各自更适合的场景。下表观点均基于2026年当下真实的架构现状总结而成。

 

六、真正实用的性能调优

SQLite默认配置是针对2004年的硬件优化的,数据持久化方案也偏向保守。好在只需执行短短五行SQL语句,就能将其调优至适配现代生产环境。建议通过连接池的初始化脚本,在每次新建连接时自动执行以下编译指令(PRAGMA):

1
-- Apply these PRAGMAs on connection open (e.g., HikariCP connectionInitSql)
2
PRAGMA journal_mode = WAL; -- Enables concurrent reads + single writer
3
PRAGMA synchronous = NORMAL; -- Safe on SSD; full fsync only at WAL checkpoints
4
PRAGMA busy_timeout = 5000; -- Wait up to 5s before SQLITE_BUSY error
5
PRAGMA cache_size = -64000; -- 64 MB page cache in memory
6
PRAGMA foreign_keys = ON; -- Foreign key enforcement (off by default)

这些配置安全可靠、文档完善,也是Ruby on Rails、Django、Go等技术社区在生产环境使用SQLite时公认的最佳调优方案。这里重点说明synchronous=NORMAL配置:开启该模式后,数据会在WAL检查点完成后持久化,但并非每一笔事务提交都立即落盘。在SSD上这是非常合理的取舍:宕机时数据库依然保持一致,只有在极端断电情况下,可能会丢失最近几秒内的事务。如果搭配Litestream做WAL实时流式备份,这种极端情况也能避免。

补充:SQLite官方文档显示,在存储大二进制对象(BLOB)时,它比直接读写文件系统快35%;而且整个SQLite库体积不足600KB。对于嵌入式工具、命令行应用和资源受限环境,它几乎没有对手。

七、完善整个生态的周边工具

1、Sqlite-VEC

这是一款基于虚拟表实现向量相似度检索的轻量级SQLite扩展。它采用C语言编写且无外部依赖,可在SQLite支持的所有环境(包括WASM)中运行。对于需要开发AI功能或搭建RAG流程,但又不想单独部署一套向量数据库的团队来说,这个扩展非常值得一试。

  • github.com/asg017/sqlite-vec

2、LiteFS(Fly.io)

这是一款基于FUSE实现的SQLite复制组件,专为Fly.io部署环境打造。数据复制对应用完全透明,适用于部署在Fly.io、读请求居多且写入吞吐量不超过约每秒100次的应用。该工具开源,支持自行部署。

  • github.com/superfly/litefs

3、Turso(Rust重写版)

除了目前已投入生产使用、基于C语言开发的LibSQL之外,Turso还在从零开始用Rust重写SQLite ,项目代号为Limbo(目前处于Beta阶段)。该版本原生支持多版本并发控制(MVCC)以实现并发写入、异步优先架构以及WASM运行环境。它目前还不建议用于生产,但指明了SQLite生态未来的发展方向。

  • github.com/tursodatabase/turso

4、RQLITE / DQLITE

如果团队需要基于Raft共识算法的多主分布式SQLite,rqlite和dqlite是业内主流选择。二者牺牲了SQLite原本的简洁特性,换取多节点写入能力。当单主架构的SQLite无法满足业务需求,且不愿全面迁移至其他数据库时,可以考虑采用这两款工具。

  • github.com/rqlite/rqlite

八、什么时候该放弃SQLite

知道SQLite不适合什么场景,与知道它适合什么场景同样重要。如果出现以下情况,就说明你的业务已经超出了SQLite的能力范围:

  • 多个进程并发写入,即便做了调优仍然频繁出现SQLITE_BUSY错误;

  • 需要在并发事务间使用行级锁或表级锁精细控制

  • 复杂的分析查询,更适合用PostgreSQL基于代价的查询优化器;

  • 需要依赖Postgres生态里的高级扩展,如PostGIS、TimescaleDB等。

此外,如果团队已具备成熟的PostgreSQL运维能力,仅为小幅性能提升而迁移数据库,往往得不偿失。

简单总结:

  • 优先选SQLite:单进程服务、嵌入式工具、边缘部署、多租户应用(文件隔离远比行级隔离更简洁);

  • 优先选PostgreSQL:需要多写并发、复杂分析型任务、丰富插件扩展生态的场景。

特别重要的一点:不要把“它只是 SQLite”和“它无法用于生产环境”混为一谈。时至今日,这种观点早已站不住脚。

九、我们学到了什么

  • SQLite以往的短板:不支持网络访问、缺乏复制能力、仅支持单线程写入,如今正通过LibSQL、Turso、Litestream、Cloudflare D1、LiteFS等生态工具系统性解决,并且不需要改动SQLite内核。

  • 在开启WAL模式的现代NVMe硬件上,本地SQLite的读取延迟比任何网络数据库低100~1000倍,写入吞吐量与同机部署的PostgreSQL相当。

  • Cloudflare D1和Turso将SQLite带到边缘节点并实现自动读复制,实现全球10毫秒内读取,这是中心化PostgreSQL实例根本无法做到的。

  • 基于SQLite“一库一文件”模型的单租户独立数据库架构,在多租户SaaS和AI智能体场景下,运维难度远小于PostgreSQL的行级隔离方案。

  • 在JVM生态中,借助xerial sqlite-jdbc驱动以及Hibernate 6社区适配的方言,SQLite完全可以用于生产环境。开启WAL模式并调优HikariCP连接池后,能够稳定支撑大部分单实例Spring Boot、Kotlin服务。

  • Litestream将SQLite的单文件特性升级为生产级备份能力:WAL实时同步至S3、支持时间点恢复,且部署时无需额外搭建独立数据库服务。

  • 2026年,我们不该再纠结“SQLite能不能用于生产环境”,而应思考当前业务的写入并发量,是否真的需要用PostgreSQL。对绝大多数读密集型Web应用而言,答案往往是否定的。

作者丨Eleftheria Drosopoulou 编译丨dbaplus社群

来源丨网址:https://www.javacodegeeks.com/2026/05/sqlite-in-2026-why-serious-apps-are-choosing-it-over-postgres.html

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

 
 

posted on 2026-07-19 14:16  漫思  阅读(7)  评论(0)    收藏  举报

导航