世界上最流行的数据库是什么?
Oracle? MySQL? PostgreSQL?
都不是,答案是SQLite。
![]()
你可能没听说过它,但是它就在你身边的:
每一台智能手机中(Android 和iOS)
每一台Mac电脑中
每一台Windows 10 电脑中
每一个主要的浏览器中(Chrome, Firefox,Safari)
大部分的机顶盒当中
每个PHP和Python安装目录中
很多流行的桌面应用(微信、QQ、 DropBox、 Skype、iMessage、WhatsApp、 Adobe Acrobat Reader....)
不信的话可以在电脑中搜索一下 “*.db”,看看能发现多少个。
SQLite的发明人是Richard Hipp。
![]()
最近,Richard做了一个重要的决定:支持SQLite到2050年!
也就是说,从2000年问世算起,SQLite将“只有”50岁的寿命。
到2050年,技术会发生什么变化?还会有人使用SQLite吗?
我觉得答案是肯定的。
关系数据库不像别的软件,它保存的是企业的关键数据,是非常稳定的,全球的信息系统在底层都依赖它们,一般情况下是不敢轻易动的。
像Oracle,1979年就出现了,现在已经46岁了,还是世界上最大的数据库。
PostgreSQL 29岁了, MySQL 30了,SQL Server 36了...... 它们都会继续活下去。
即使出现了全新的、大幅领先关系数据库的数据模型,很多遗留系统也会继续使用关系数据库。
在嵌入式关系数据库领域,SQLite几乎是一统江湖,没有对手,它的应用范围如此广泛,活到2050年不成问题。
为了完成这个宏伟的目标,Richard和团队做出了一些重要的决策:
01
向后兼容
SQLite团队承诺保持它的C API 与磁盘格式的向后兼容性,这意味着现有应用在未来几十年升级 SQLite 时不需重写或迁移,极大降低长期使用成本与数据迁移风险(对长期存储尤为重要)。
这就意味着,你今天存入的SQLite数据库的内容,你的孙子辈依然可以轻松访问。
SQLite的数据文件就是那个.db,它的格式不管在32位机器上,还是在64机器上,不管在大端还是小端平台上都完全相同。
你可以把数据文件轻松从一个系统复制到另外一个系统(比如从Windows到Linux),无需做任何转换。
02
详尽的文档
SQLite的策略非常独特,它虽然开放源代码,任何人都可以下载,但是却不接受外界的代码贡献。
这二十多年,只有Richard为首的三四个人维护。
这个小团队编写了大量的文档,包括SQLite的架构,数据库格式,查询计划,字节码引擎、编译期选项等等,非常详尽,让人叹为观止。
![]()
它的文档就像一本“SQLite 教科书”,几乎涵盖了从初学者到系统开发者所有层次的需求。
文档里不仅告诉你“能怎么用”,还告诉你“为什么这样设计”,甚至记录某些历史包袱和兼容性考虑。
比如SQLite 特有的“Railroad Diagram”(铁道图)来展示 SQL 语法,非常直观,比光靠文字描述更容易理解。
![]()
可以说,SQLite的文档在开源软件中是数一数二的。
03
优秀的注释
SQLite的注释尤其惊人,注释竟然超过了35%的内容。
我们经常会看到一些模版式的代码注释,说了相当于没说,但是SQLite不同,它的注释非常实用,能解释变量和对象的真正含义。
比如 btree.c、pager.c 这些核心文件,都会在开头详细描述 B-Tree、Pager 层的设计原理,让读代码的人不用完全依赖外部文档。
Richard Hipp 很注重可移植性与稳定性,很多注释会解释为什么这样设计、有哪些边界情况需要处理。
注释里经常会提到“这是为了应对某个 bug/某个平台的限制”。
注释和代码风格统一、简洁。没有花哨的行话,基本是“写给未来的自己/其他人看的”,不像很多项目那样只写函数名的重复解释。
目标就是方便新程序员理解,使其在未来几十年内易于维护。
04
灾难备份
永远不用担心SQLite源码被篡改和丢失,因为Richard把源码每个历史版本都做了加密保护,并且自动复制到不同数据中心的服务器中。
此外,全球还有数千个额外的Clone版本在各个私人服务器上。
更有意思的是,Richard说SQLite的这三四个人小团队也分布在世界各地,即使某个大陆沉没了,SQLite依然可以存活。
05
保守/实用主义
计算机领域发展太快了,新技术层出不穷,每个人都会受到新潮流的影响。
但是SQLite开发者尽量避免被最新时髦做法所吸引,他们倾向于编写经得住时间考验的代码,这样的代码应当是“永恒的”,让那些“未出生的程序员”在将来也能轻松阅读、理解和维护。
说实话,我看到“未出生的程序员”是又震撼又疑惑,震撼的是今年Richard已经64岁,如果干到2050年,都89了,他这么做,确实是在考虑未来代码的传承。
疑惑的是如果将来技术出现重大变化,还让让未来的程序员来看古老的代码,是不是并不太好?
幸运的是,SQLite用的是C语言这样“永不过时的编程语言”,数据库理论又非常稳定,所以他做出这样的选择应该也没啥问题。
06
“变态”的测试
SQLite 的测试非常变态,它不仅测试了源码中的每个分支,每个判断,甚至考虑了机器指令层面。
它会在不同的平台(例如 x86_64、ARM64、32-bit 平台),不同操作系统(Linux/Windows/macOS/嵌入式 RTOS)等,不同编译器(GCC、Clang、MSVC、各种交叉编译器)反复执行,对不同优化级别、不同代码生成选项、多次构建的重复检查,找出偶发性/非确定性错误(比如未初始化内存导致的随机行为、竞态、内存重用引发的间歇性崩溃)。
它真正织起来一张庞大的安全网,只要你改动的代码引入了Bug,立刻就会被这张网给捕捉到。
它的深度和重复性可以说是“接近航空级别”,极端严格和全面。
这种长期的严格的承诺,不但让SQLite坐稳了嵌入式关系数据库一哥的宝座,也赢得了那些需要长久保存数据机构的信任。
比如世界上最大的图书馆,美国国会图书馆就把SQLite确定为保持数字化内容的推荐存储格式,和SQLite并列的是XML、JSON 、CSV这样标准的格式。
SQLite开放源码,但不接受外界贡献,就这么几个人,精雕细琢,不断打磨,不但搞出了极其精良的代码,极其详尽的文档,更是让SQLite成了世界上最流行的数据库。
在AIGC大行其道的今天,SQLite依然坚持这种“工匠式”的软件开发,实在是罕见。
正因为有这样执着的开发者,不追逐潮流,不为炫技而妥协,它的稳定性、可靠性和可维护性才得以跨越几十年,成为每一台设备、每一个应用不可或缺的基石。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.