Hacker News 中文摘要

RSS订阅

十亿行数据下实现10万TPS:SQLite的超乎想象之效 -- 100k TPS over a billion rows: the unreasonable effectiveness of SQLite

文章摘要

这篇文章探讨了SQLite数据库在高并发场景下的惊人性能表现。作者通过实际测试证明,尽管SQLite采用单写入器设计且不支持MVCC,但在处理10万TPS(每秒事务数)和十亿级数据量时仍能保持高效。文章以Clojure代码示例展示了SQLite在Web应用常见交互式事务中的优异表现,颠覆了人们对其仅适用于移动设备的传统认知。测试基于配备M1 Pro芯片的MacBook Pro进行,结果表明SQLite的嵌入式特性并非缺陷,反而是其卓越扩展能力的关键。

文章总结

标题:SQLite的惊人效能:单机10万TPS处理十亿行数据

来源:https://andersmurphy.com/2025/12/02/100000-tps-over-a-billion-rows-the-unreasonable-effectiveness-of-sqlite.html

发布时间:2025年12月2日 GMT+8 01:00:13

核心内容:

  1. 性能对比实验
  • 测试环境:2021款MacBook Pro(M1 Pro芯片/16GB内存)
  • 数据库配置:
    • PostgreSQL:8连接池
    • SQLite:单写多读模式(8个读连接),启用WAL日志
  1. 关键发现
  • 网络延迟对PostgreSQL影响显著:

    • 无延迟:13,756 TPS
    • 5ms延迟:1,214 TPS
    • 10ms延迟:702 TPS
    • 启用串行化隔离后:660 TPS
  • SQLite表现:

    • 基础事务:44,096 TPS
    • 批量写入:186,157 TPS
    • 带保存点的批量事务:121,922 TPS
    • 混合读写场景:102,545 TPS
  1. 技术原理
  • SQLite优势:
    • 嵌入式架构消除网络延迟
    • 单写入器设计支持高效批量操作
    • 通过SAVEPOINT实现嵌套事务
    • 遵循幂律分布的用户访问模式
  1. 现实意义
  • 网络数据库受阿姆达尔定律限制
  • SQLite适合高并发OLTP场景
  • 单服务器可支撑百万级查询(参考Expensify案例)
  1. 扩展资源
  • Litestream(SQLite流复制工具)
  • 《Scalability! But at what COST?》论文
  • Joran Greef关于接口性能的演讲

注:本文通过Clojure实现的基准测试框架,使用虚拟线程模拟真实负载。完整代码已开源在作者GitHub仓库。

评论总结

以下是评论内容的总结:

  1. SQLite的性能优势

    • 多位用户分享了SQLite在实际应用中的高性能表现,包括低延迟操作和高效的备份功能。
    • 引用:"e2e latency of basically 1ms for CRUD operations"(评论6)
    • 引用:"It can take you pretty far and maybe it's all you need"(评论8)
  2. SQLite的局限性

    • 有评论指出SQLite不适合需要跨网络或多机协作的场景,且与网络数据库(如PostgreSQL)的适用场景不同。
    • 引用:"SQLite is completely out of equation if you need separate servers"(评论4)
    • 引用:"The question isn't 'which database is best' but 'does my architecture need to cross network boundaries?'"(评论7)
  3. 实际应用案例

    • 用户询问是否有组织分享过SQLite在生产环境中的极限使用经验(评论3),同时也有用户分享了个人项目中的成功案例。
    • 引用:"I've used SQLite as the content storage engine for years"(评论8)
    • 引用:"my website has been running seamlessly for about 3 weeks now"(评论9)
  4. 技术问题与解决方案

    • 讨论了SQLite的WAL(Write-Ahead Logging)潜在数据损坏问题(评论2)和多线程访问的解决方案(评论9)。
    • 引用:"Is there a solution for SQLite WAL corruption?"(评论2)
    • 引用:"use SQLITE_OPEN_FULLMUTEX flag for multi-threading"(评论9)
  5. 术语偏好

    • 有用户建议用"surprising"而非"unreasonable"形容SQLite的效果(评论5)。

总结:评论普遍认可SQLite在单机高性能场景的优势,但也指出其网络和分布式能力的不足,同时分享了实际应用中的经验和技术细节。