世界上最流行的數(shù)據(jù)庫,只想活50年!
世界上最流行的數(shù)據(jù)庫是什么?
Oracle? MySQL? PostgreSQL?
都不是,答案是SQLite。
你可能沒聽說過它,但是它就在你身邊的:
每一臺智能手機(jī)中(Android 和iOS)
每一臺Mac電腦中
每一臺Windows 10 電腦中
每一個主要的瀏覽器中(Chrome, Firefox,Safari)
大部分的機(jī)頂盒當(dāng)中
每個PHP和Python安裝目錄中
很多流行的桌面應(yīng)用(微信、QQ、 DropBox、 Skype、iMessage、WhatsApp、 Adobe Acrobat Reader....)
......
不信的話可以在電腦中搜索一下 “*.db”,看看能發(fā)現(xiàn)多少個。
SQLite的發(fā)明人是Richard Hipp。

最近,Richard做了一個重要的決定:支持SQLite到2050年!
也就是說,從2000年問世算起,SQLite將“只有”50歲的壽命。
到2050年,技術(shù)會發(fā)生什么變化?還會有人使用SQLite嗎?
我覺得答案是肯定的。
關(guān)系數(shù)據(jù)庫不像別的軟件,它保存的是企業(yè)的關(guān)鍵數(shù)據(jù),是非常穩(wěn)定的,全球的信息系統(tǒng)在底層都依賴它們,一般情況下是不敢輕易動的。
像Oracle,1979年就出現(xiàn)了,現(xiàn)在已經(jīng)46歲了,還是世界上最大的數(shù)據(jù)庫。
PostgreSQL 29歲了, MySQL 30了,SQL Server 36了...... 它們都會繼續(xù)活下去。
即使出現(xiàn)了全新的、大幅領(lǐng)先關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型,很多遺留系統(tǒng)也會繼續(xù)使用關(guān)系數(shù)據(jù)庫。
在嵌入式關(guān)系數(shù)據(jù)庫領(lǐng)域,SQLite幾乎是一統(tǒng)江湖,沒有對手,它的應(yīng)用范圍如此廣泛,活到2050年不成問題。
為了完成這個宏偉的目標(biāo),Richard和團(tuán)隊做出了一些重要的決策:
向后兼容
SQLite團(tuán)隊承諾保持它的C API 與磁盤格式的向后兼容性,這意味著現(xiàn)有應(yīng)用在未來幾十年升級 SQLite 時不需重寫或遷移,極大降低長期使用成本與數(shù)據(jù)遷移風(fēng)險(對長期存儲尤為重要)。
這就意味著,你今天存入的SQLite數(shù)據(jù)庫的內(nèi)容,你的孫子輩依然可以輕松訪問。
SQLite的數(shù)據(jù)文件就是那個.db,它的格式不管在32位機(jī)器上,還是在64機(jī)器上,不管在大端還是小端平臺上都完全相同。
你可以把數(shù)據(jù)文件輕松從一個系統(tǒng)復(fù)制到另外一個系統(tǒng)(比如從Windows到Linux),無需做任何轉(zhuǎn)換。
詳盡的文檔
SQLite的策略非常獨(dú)特,它雖然開放源代碼,任何人都可以下載,但是卻不接受外界的代碼貢獻(xiàn)。
這二十多年,只有Richard為首的三四個人維護(hù)。
這個小團(tuán)隊編寫了大量的文檔,包括SQLite的架構(gòu),數(shù)據(jù)庫格式,查詢計劃,字節(jié)碼引擎、編譯期選項等等,非常詳盡,讓人嘆為觀止。
圖片
它的文檔就像一本“SQLite 教科書”,幾乎涵蓋了從初學(xué)者到系統(tǒng)開發(fā)者所有層次的需求。
文檔里不僅告訴你“能怎么用”,還告訴你“為什么這樣設(shè)計”,甚至記錄某些歷史包袱和兼容性考慮。
比如SQLite 特有的“Railroad Diagram”(鐵道圖)來展示 SQL 語法,非常直觀,比光靠文字描述更容易理解。
圖片
可以說,SQLite的文檔在開源軟件中是數(shù)一數(shù)二的。
優(yōu)秀的注釋
SQLite的注釋尤其驚人,注釋竟然超過了35%的內(nèi)容。
我們經(jīng)常會看到一些模版式的代碼注釋,說了相當(dāng)于沒說,但是SQLite不同,它的注釋非常實用,能解釋變量和對象的真正含義。
比如 btree.c、pager.c 這些核心文件,都會在開頭詳細(xì)描述 B-Tree、Pager 層的設(shè)計原理,讓讀代碼的人不用完全依賴外部文檔。
Richard Hipp 很注重可移植性與穩(wěn)定性,很多注釋會解釋為什么這樣設(shè)計、有哪些邊界情況需要處理。
注釋里經(jīng)常會提到“這是為了應(yīng)對某個 bug/某個平臺的限制”。
注釋和代碼風(fēng)格統(tǒng)一、簡潔。沒有花哨的行話,基本是“寫給未來的自己/其他人看的”,不像很多項目那樣只寫函數(shù)名的重復(fù)解釋。
目標(biāo)就是方便新程序員理解,使其在未來幾十年內(nèi)易于維護(hù)。
災(zāi)難備份
永遠(yuǎn)不用擔(dān)心SQLite源碼被篡改和丟失,因為Richard把源碼每個歷史版本都做了加密保護(hù),并且自動復(fù)制到不同數(shù)據(jù)中心的服務(wù)器中。
此外,全球還有數(shù)千個額外的Clone版本在各個私人服務(wù)器上。
更有意思的是,Richard說SQLite的這三四個人小團(tuán)隊也分布在世界各地,即使某個大陸沉沒了,SQLite依然可以存活。
保守/實用主義
計算機(jī)領(lǐng)域發(fā)展太快了,新技術(shù)層出不窮,每個人都會受到新潮流的影響。
但是SQLite開發(fā)者盡量避免被最新時髦做法所吸引,他們傾向于編寫經(jīng)得住時間考驗的代碼,這樣的代碼應(yīng)當(dāng)是“永恒的”,讓那些“未出生的程序員”在將來也能輕松閱讀、理解和維護(hù)。
說實話,我看到“未出生的程序員”是又震撼又疑惑,震撼的是今年Richard已經(jīng)64歲,如果干到2050年,都89了,他這么做,確實是在考慮未來代碼的傳承。
疑惑的是如果將來技術(shù)出現(xiàn)重大變化,還讓讓未來的程序員來看古老的代碼,是不是并不太好?
幸運(yùn)的是,SQLite用的是C語言這樣“永不過時的編程語言”,數(shù)據(jù)庫理論又非常穩(wěn)定,所以他做出這樣的選擇應(yīng)該也沒啥問題。
“變態(tài)”的測試
SQLite 的測試非常變態(tài),它不僅測試了源碼中的每個分支,每個判斷,甚至考慮了機(jī)器指令層面。
它會在不同的平臺(例如 x86_64、ARM64、32-bit 平臺),不同操作系統(tǒng)(Linux/Windows/macOS/嵌入式 RTOS)等,不同編譯器(GCC、Clang、MSVC、各種交叉編譯器)反復(fù)執(zhí)行,對不同優(yōu)化級別、不同代碼生成選項、多次構(gòu)建的重復(fù)檢查,找出偶發(fā)性/非確定性錯誤(比如未初始化內(nèi)存導(dǎo)致的隨機(jī)行為、競態(tài)、內(nèi)存重用引發(fā)的間歇性崩潰)。
它真正織起來一張龐大的安全網(wǎng),只要你改動的代碼引入了Bug,立刻就會被這張網(wǎng)給捕捉到。
它的深度和重復(fù)性可以說是“接近航空級別”,極端嚴(yán)格和全面。
這種長期的嚴(yán)格的承諾,不但讓SQLite坐穩(wěn)了嵌入式關(guān)系數(shù)據(jù)庫一哥的寶座,也贏得了那些需要長久保存數(shù)據(jù)機(jī)構(gòu)的信任。
比如世界上最大的圖書館,美國國會圖書館就把SQLite確定為保持?jǐn)?shù)字化內(nèi)容的推薦存儲格式,和SQLite并列的是XML、JSON 、CSV這樣標(biāo)準(zhǔn)的格式。
SQLite開放源碼,但不接受外界貢獻(xiàn),就這么幾個人,精雕細(xì)琢,不斷打磨,不但搞出了極其精良的代碼,極其詳盡的文檔,更是讓SQLite成了世界上最流行的數(shù)據(jù)庫。
在AIGC大行其道的今天,SQLite依然堅持這種“工匠式”的軟件開發(fā),實在是罕見。
正因為有這樣執(zhí)著的開發(fā)者,不追逐潮流,不為炫技而妥協(xié),它的穩(wěn)定性、可靠性和可維護(hù)性才得以跨越幾十年,成為每一臺設(shè)備、每一個應(yīng)用不可或缺的基石。




























