SQLite为何能征服世界:从三位开发者的固执到一万亿数据库实例的技术传奇
2000年5月29日,D. Richard Hipp开始编写一个嵌入式数据库引擎。他的动机很务实:作为通用动力公司的承包商,他正在为美国海军的奥斯卡·奥斯汀号驱逐舰开发软件。军舰上的程序需要一个本地数据库,但传统的客户端-服务器数据库在这个场景下有一个致命缺陷——如果数据库服务器进程崩溃,整个应用程序就会瘫痪。 ...
2000年5月29日,D. Richard Hipp开始编写一个嵌入式数据库引擎。他的动机很务实:作为通用动力公司的承包商,他正在为美国海军的奥斯卡·奥斯汀号驱逐舰开发软件。军舰上的程序需要一个本地数据库,但传统的客户端-服务器数据库在这个场景下有一个致命缺陷——如果数据库服务器进程崩溃,整个应用程序就会瘫痪。 ...
数据库教科书告诉开发者一个简单的承诺:事务一旦提交,数据就是持久的。ACID中的"D"代表Durability——持久性。但生产环境中的实际情况远比教科书复杂:同样配置了主从复制、同样使用了SSD存储、同样收到了COMMIT成功的返回码,断电重启后,有些数据确实完好无损,有些却凭空消失了。 ...
1978年,图灵奖得主Jim Gray在《Notes on Data Base Operating Systems》中正式描述了两阶段提交协议(Two-Phase Commit, 2PC)。这个协议的核心目标简单而直接:让分布在不同机器上的多个数据库,能够像操作单一数据库一样实现"全有或全无"的原子性保证。 ...
2018年3月,PostgreSQL开发者Craig Ringer在邮件列表中披露了一个令人震惊的发现:PostgreSQL对fsync()错误处理不当可能导致数据损坏。这个后来被称为"fsyncgate"的事件揭示了一个更深层的问题——许多开发者对fsync()的语义存在根本性误解。 ...