LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

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

admin
2026年7月3日 19:57 本文热度 116

过去二十年里,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配置示例:

# litestream.yml — continuous WAL streaming to S3dbs:  - path: /data/app.db    replicas:      - 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配置示例:

# application.properties — Spring Boot + SQLite + Hibernate 6spring.datasource.url=jdbc:sqlite:./data/app.dbspring.datasource.driver-class-name=org.sqlite.JDBCspring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialectspring.jpa.hibernate.ddl-auto=updatespring.sql.init.mode=always
# Enable WAL mode for better concurrent read performancespring.datasource.hikari.connection-init-sql=PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;

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

<dependency>  <groupId>org.xerial</groupId>  <artifactId>sqlite-jdbc</artifactId>  <version>3.50.3.0</version></dependency><dependency>  <groupId>org.hibernate.orm</groupId>  <artifactId>hibernate-community-dialects</artifactId></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 / LibSQLPostgreSQL
单区域、读取密集型 Web 应用✓ 非常适配可以使用,但读取性能偏弱
边缘场景/全球低延迟读取✓ 理想选择(D1,Turso)✗ 存在跨区域延迟损耗
多租户SaaS(每个租户一个数据库)✓ 原生适配模式隔离实现复杂
高并发写入场景(>5K/s,多进程环境)✗ 存在单点写入瓶颈✓ 支持行级锁,可扩展性好
Spring Boot / JVM 内嵌工具场景✓ 进程内运行,无需独立服务器需要单独部署Postgres服务
复杂数据分析/窗口函数查询支持该能力,但优化器能力有限✓ 一流的查询优化器
全文检索内置FTS5引擎 (功能强大但较为基础)✓ 搭配 pg_trgm / external 效果更佳
AI/向量搜索(RAG工作负载)✓ 可通过sqlite-vec 扩展,LibSQL原生支持✓ pgvector(更成熟)
容灾/简易备份需求✓ Litestream + 单文件pg_dump / WAL 归档,部署流程繁琐
无需运维的开发(零基础设施)✓ 无需服务器,无需 Docker✗ 需要维护正在运行的Postgres实例


六、真正实用的性能调优


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

-- Apply these PRAGMAs on connection open (e.g., HikariCP connectionInitSql)PRAGMA journal_mode = WAL;        -- Enables concurrent reads + single writerPRAGMA synchronous = NORMAL;      -- Safe on SSD; full fsync only at WAL checkpointsPRAGMA busy_timeout = 5000;       -- Wait up to 5s before SQLITE_BUSY errorPRAGMA cache_size = -64000;       -- 64 MB page cache in memoryPRAGMA 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


该文章在 2026/7/6 10:21:43 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号