SQLite 是一�(gè)�(shí)�(xiàn)嵌入� SQL �(shù)�(jù)庫引擎的 C 語言�,是遵守ACID的關(guān)�(lián)��(shù)�(jù)庫管理系�(tǒng),它的設(shè)�(jì)目標(biāo)是嵌入式的, SQLite 不是一�(gè)用于連接到大型數(shù)�(jù)�服務(wù)�(big database server)的客戶 端庫(client library�。SQLite 是一�(gè)服務(wù)�,直接讀寫(reads and writes directly)在硬盤上的�(shù)�(jù)庫文��
自幾十年前出�(xiàn)的商�(yè)�(yīng)用程序以�,數(shù)�(jù)庫就成為軟件�(yīng)用程序的主要組成部分。正與數(shù)�(jù)庫管理系�(tǒng)非常�(guān)鍵一�,它們也變得非常龐大,并占用了相�(dāng)多的系統(tǒng)資源,增加了管理的復(fù)雜性。隨著軟件應(yīng)用程序逐漸模塊模塊�,一種新型數(shù)�(jù)庫會(huì)比大型復(fù)雜的傳統(tǒng)�(shù)�(jù)庫管理系�(tǒng)更適�(yīng)。嵌入式�(shù)�(jù)庫直接在�(yīng)用程序�(jìn)程中�(yùn)行,提供了零配置(zero-configuration)運(yùn)行模�,并且資源占用非常少�
SQLite是一�(gè)開源的嵌入式�(guān)系數(shù)�(jù)�,它�2000年由D. Richard Hipp�(fā)�,它的減少應(yīng)用程序管理數(shù)�(jù)的開�,SQLite可移植性好,很容易使用,很�,高效而且可靠�
SQLite嵌入到使用它的應(yīng)用程序中,它們共用相同的�(jìn)程空間,而不是單�(dú)的一�(gè)�(jìn)�。從外部看,它并不像一�(gè)RDBMS,但在�(jìn)程內(nèi)部,它卻是完整的,自包含的數(shù)�(jù)庫引擎�
嵌入式數(shù)�(jù)庫的一大好處就是在你的程序�(nèi)部不需要網(wǎng)�(luò)配置,也不需要管理。因?yàn)榭蛻舳撕头?wù)器在同一�(jìn)程空間運(yùn)�。SQLite 的數(shù)�(jù)庫權(quán)限只依賴于文件系�(tǒng),沒有用戶帳戶的概念。SQLite 有數(shù)�(jù)庫級(jí)鎖定,沒有網(wǎng)�(luò)服務(wù)�。它需要的�(nèi)存,其它開銷很小,適合用于嵌入式�(shè)�。你需要做的僅僅是把它正確的編譯到你的程序�
SQLite�(shí)�(xiàn)了多�(shù)的SQL-92�(biāo)�(zhǔn),包括事�(wù),就是代表原子性、一致�、隔離性和持久性的(ACID),觸發(fā)器和多數(shù)的復(fù)雜查�。不�(jìn)行類型檢查。你可以把字符串插入到整�(shù)列中。例�,某些用戶發(fā)�(xiàn)這是使數(shù)�(jù)庫更加有用的�(chuàng)�,特別是與無類型的腳本語言一起使用的�(shí)候。其他用戶認(rèn)為這是主要的缺�(diǎn)�
多�(gè)�(jìn)程或線程可以訪問同一�(gè)�(shù)�(jù)而沒有問�。可以并行的滿足多�(gè)讀訪問。只有在其他訪問�(dāng)前不被服�(wù)的時(shí)候才能滿足寫訪問;否則寫訪問失敗并帶有一�(gè)�(cuò)誤代碼(也可以在可配置的超時(shí)過期之后自動(dòng)的重試)�
提供了叫做sqlite的一�(gè)�(dú)立程序用來查詢和管理SQLite�(shù)�(jù)庫文�� 它也充當(dāng)寫使用SQLite庫的�(yīng)用的一�(gè)例子�
SQLite采用了模塊的�(shè)�(jì),它由三�(gè)子系�(tǒng),包�8�(gè)�(dú)立的模塊�(gòu)��
1、接�(Interface)
接口由SQLite C API組成,也就是說不管是程序、腳本語言還是庫文�,最終都是通過它與SQLite交互�(我們通常用得較多的ODBC/JDBC也會(huì)�(zhuǎn)化為相應(yīng)C API的調(diào)�)�
2、編譯器(Compiler)
在編譯器�,分詞器(Tokenizer)和分析�(Parser)�(duì)SQL�(jìn)行語法檢�,然后把它轉(zhuǎn)化為底層能更方便處理的分層的�(shù)�(jù)�(jié)�(gòu)---語法�,然后把語法樹傳給代碼生成器(code generator)�(jìn)行處�。而代碼生成器根據(jù)它生成一種針�(duì)SQLite的匯編代碼,由虛擬機(jī)(Virtual Machine)�(zhí)��
3、虛擬機(jī)(Virtual Machine)
架構(gòu)中最核心的部分是虛擬�(jī),或者叫做虛擬數(shù)�(jù)庫引�(Virtual Database Engine,VDBE)。它和Java虛擬�(jī)相似,解釋執(zhí)行字節(jié)代碼。VDBE的字節(jié)代碼�128�(gè)操作�(opcodes)�(gòu)成,它們主要集中在�(shù)�(jù)庫操�。它的每一條指令都用來完成特定的數(shù)�(jù)庫操�(比如打開一�(gè)表的游標(biāo))或者為這些操作棧空間的�(zhǔn)�(比如壓入?yún)�?shù))。總�,所有的這些指令都是為了滿足SQL命令的要�(�(guān)于VM,后面會(huì)做詳�(xì)介紹)�
4、后�(Back-End)
后端由B-�(B-tree),頁緩存(page cache,pager)和操作系�(tǒng)接口(即系�(tǒng)�(diào)�)�(gòu)�。B-tree和page cache共同�(duì)�(shù)�(jù)�(jìn)行管理。B-tree的主要功能就是索�,它維護(hù)著各�(gè)頁面之間的復(fù)雜的�(guān)系,便于快速找到所需�(shù)�(jù)。而pager的主要作用就是通過OS接口在B-tree和Disk之間傳遞頁面�
1、零配置(Zero Configuration)
2、可移植(Portability)�
它是�(yùn)行在Windows,Linux,BSD,Mac OS X和一些商用Unix系統(tǒng),比如Sun的Solaris,IBM的AIX,同樣,它也可以工作在許多嵌入式操作系統(tǒng)�,比如QNX,VxWorks,Palm OS, Symbin和Windows CE�
3、Compactness�
SQLite是被�(shè)�(jì)成輕量級(jí),自包含�。one header file, one library, and you’re relational, no external database server required
4、簡(jiǎn)�(Simplicity)
5、靈�(Flexibility)
6、可�(Reliability)�
SQLite的核心大約有3萬行�(biāo)�(zhǔn)C代碼,這些代碼都是模塊化的,很容易閱讀�