SQLite: How it works, by Richard Hipp (2024)
摘要
本文整理了 Richard Hipp 在 2024 年关于 SQLite 设计原理与哲学演讲的要点,阐述了 SQLite 嵌入式、单文件、低复杂度的特点及其工作原理。
<p><a href="https://sqlite.org/talks/howitworks-20240624.pdf" rel="ugc">https://sqlite.org/talks/howitworks-20240624.pdf</a></p>
<p><a href="https://lobste.rs/s/v2xrcm/sqlite_how_it_works_by_richard_hipp_2024">Comments</a></p>
查看缓存全文
缓存时间: 2026/08/13 15:26
TL;DR:SQLite 是世界上使用最广泛的数据库引擎,以嵌入式、无服务器、单文件、公共领域授权的设计,用极低复杂度解决了大量实际问题;本文整理了 Richard Hipp 在 2024 年对该引擎的工作原理与设计哲学的演讲。
## 关于演讲者
演讲者是理查德·希普(Richard Hipp),SQLite 的发明者,至今仍是首席开发者。项目由一个小团队维护,总共只有五名提交者。他坦言自己有博士学位,但不是数据库方向的——他从未上过数据库课程,学位论文是计算语言学(1992 年)。
> 我从没想过要成为数据库专家,但我现在就是。
## 什么是 SQLite?
SQLite 是当前世界上使用最广泛的数据库引擎。按他的说法,现在离你两米之内,可能就有大约 100 个 SQLite 数据库在悄悄运行。
他想传达的重点是:**SQLite 解决的问题比它制造的问题多**。
> 最近网上有人说,你的敌人是复杂性。SQLite 是降低复杂性的绝佳方式。它力求简单。当然,有时候你确实需要复杂的东西,但如果能简化事情、避免复杂性,那才是更好的方法。
## SQLite 的显著特点
### 嵌入式 / 无服务器架构
大多数数据库引擎是客户端-服务器架构:应用链接的库只是一个通信中心,负责封装参数、发送消息给数据库引擎,再拿回结果。这种模式通常很好,但数据库引擎宕机、故障、配置错误时,应用就瘫痪了。
理查德曾经做自由职业开发时,应用需要和 Informix 数据库通信。数据库由另一组人控制,有时会宕机,他的应用就会报错;用户把 bug 报告发给他,因为弹出错误对话框的是他的应用。
> 我想:为什么我需要在服务器和客户端之间跑来跑去?为什么不能直接访问磁盘上的数据库?
当时没有 SQL 数据库引擎能做到这一点,于是他自己写了一个——24 年后,就是今天的 SQLite。
他用矩阵展示了不同数据库引擎的定位:非 SQL 引擎在上面,SQL 引擎在下面;客户端-服务器在右边,嵌入式在左边。SQLite 是其中独特的那个:**它是唯一一个完整的 SQL 数据库,同时又完全是嵌入式或无服务器的**。
### 交付物是一个单一的 C 代码文件
SQLite 的交付物是一个巨大的 C 文件,现在有 9 MB,而且每天都在增长。实际开发中,他们不会直接编辑那个文件,而是维护一堆小的 C 文件,由构建过程把它们粘合在一起。
这样做的好处是:如果你用 C、C++ 或 Rust 编程,只需把这个文件加进 makefile,就立刻拥有一个完整的嵌入式 SQL 数据库引擎。
> 这使部署更容易。你的敌人是复杂性。
### 数据库是磁盘上的单个文件
SQLite 数据库可以存储数千个不同的表、视图、触发器,非常节省空间。因为是单个文件,你可以把它当作一种应用程序文件格式:
> 你拥有 SQL、事务和查询语言的全部功能,但可以把它存储在一个文件中。然后当你创建了这个文件,你可以通过电子邮件附件之类的发给你的朋友们。
虽然它是二进制文件,但格式完全开放、自 2004 年以来保持稳定,向后兼容。完整规范在网上公开,大约 20 页。
相似文章
引用D. Richard Hipp
来自SQLite创建者D. Richard Hipp的一句话,他反思了SQL如何取代了COBOL程序员在查询大型数据集方面的角色,从而改变了编程工作的性质。
Pull Requests are Free Puppies
SQLite 的创造者 Richard Hipp 用“免费 puppy”比喻拉请求:表面免费,实则承诺长期维护。文章还回顾了 SQLite 的起源、早期合同和联盟成立的故事,探讨开源维护的隐性成本。
Reliability Lessons From SQLite
SQLite 开发者分享其可靠性经验,源自 DO-178B 航空电子标准,通过 100% MCDC 测试覆盖率确保代码质量,强调“没有测试过就不工作”的理念。
SQLite:万能数据库解决方案
本文倡导将SQLite视为一种多功能且稳定的数据库解决方案,强调其在不同技术栈中替代多种其他工具的能力。
可执行文件是SQLite数据库
文章探讨了用SQLite替换ELF可执行文件格式,介绍了一个名为SELF的原型,使得可执行文件可以成为SQLite数据库,并讨论了其益处和技术影响。