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