SQLite是一個嵌入式的數(shù)據(jù)庫,具有體積小、運行快、跨平臺等優(yōu)點,更關(guān)鍵的是,SQLite只有13萬行左右。而傳統(tǒng)的大型關(guān)系型數(shù)據(jù)庫如Mysql、Oracle,代碼行數(shù)超100多萬行。
SQLite從2000年第一個版本發(fā)布到現(xiàn)在,已經(jīng)運行在數(shù)億設(shè)備上了,從本地應(yīng)用、小型桌面應(yīng)用,到移動設(shè)備應(yīng)用(如 iOS、Android 應(yīng)用),甚至在每一臺電腦,在每一個瀏覽器之中都有它的身影。為什么說SQLite是一個偽裝成一門編程語言的數(shù)據(jù)庫呢?
說來話長
大概在1999年,軟件工程師D. Richard Hipp正在為美國海軍開發(fā)一款使用在導(dǎo)彈驅(qū)逐艦上的軟件,數(shù)據(jù)庫使用的是Informix。
Informix是一款功能強大的數(shù)據(jù)庫,但有個十分惱火的問題是,Informix經(jīng)常會崩潰連不上。不過軍隊里的長官可不知道什么tcp/ip協(xié)議、數(shù)據(jù)庫等知識,只看到軟件彈出的錯誤對話框,而這個對話框正是Hipp開發(fā)的。
作為一個擁有專業(yè)素的軟件工程師,一個想法便在Hipp腦海中產(chǎn)生:既然Informix那么不穩(wěn)定,那干脆把它替換掉吧。于是,在2000年1月,Hipp開始和同事討論關(guān)于開發(fā)一個簡單的嵌入式的數(shù)據(jù)庫。Hipp想法很簡單,作為一個運行在性能不高的機器上的程序,Informix數(shù)據(jù)庫體積太大、無法安裝,而且它是一個單獨運行的進程,為什么不能直接從磁盤上存取數(shù)據(jù)呢?
故事轉(zhuǎn)折
可是問題來了,Hipp并沒有開發(fā)過數(shù)據(jù)庫,甚至都不懂B樹,需要用到的時候還得去翻看 The Art of Computer Programming(計算機程序設(shè)計藝術(shù))。
不過好在Hipp有開發(fā)編譯器的經(jīng)驗。
在Hipp看來,一條SQL的執(zhí)行跟一條編程語言的執(zhí)行的本質(zhì)是一樣的,都是對預(yù)定義的語法規(guī)則進行解釋并執(zhí)行。兩者的區(qū)別是,編程語言最終是由計算機硬件執(zhí)行,而SQL最終是由控制磁盤的程序去執(zhí)行。說干就干,Hipp先構(gòu)建了一個SQL的解析器,接著把SQL語句轉(zhuǎn)成了bytecode,最后構(gòu)建一個bytecode執(zhí)行器完成相關(guān)數(shù)據(jù)的操作。不過Hipp并沒有把它立即運行在艦載機程序上,而是先發(fā)布到網(wǎng)上,驗證自己的想法和測試代碼。B-Tree模塊:由B-Tree、頁緩沖和操作系統(tǒng)接口組成。它們操作的是數(shù)據(jù)頁,這些頁具有相同的大小,就像一個個集裝箱。B-Tree的主要功能就是索引,維護著頁與頁之間的關(guān)系,以便快速找到所需的數(shù)據(jù)。頁緩沖主要作用是提高B-Tree與磁盤間的傳遞效率,我們知道,磁盤操作是計算機系統(tǒng)中操作最慢的事。
耳熟能詳
后來的故事大家都耳熟能詳,大家看到一個數(shù)據(jù)庫居然能運行在性能非常弱的掌機上,都大為驚嘆。一些大公司注意到了SQLite,首先是摩托羅拉,簽訂了第一筆8萬美元的功能增強商業(yè)訂單。接著巨頭 AOL(美國在線)也打來了電話,要把SQLite放到CD里使用。甚至諾基亞也過來了,他們需要把 SQLite 放到 symbian os(塞班系統(tǒng))。不過最后讓SQLite發(fā)言光大的,還是安卓,你在各類 app 里都能見到 .db 結(jié)尾的文件,就是它的數(shù)據(jù)。
閱讀原文:原文鏈接
該文章在 2025/1/7 11:39:56 編輯過