一、 簡介
1. SQLite是一款嵌入式數據庫,它沒有獨立運行的進程,它與所服務的應用程序在應用程序進程空間內共生共存。它的代碼與應用程序代碼也是在一起的,或者說嵌入其中,作為托管它的程序的一部分。
2. 數據庫服務器在程序中的好處是不需要網絡配置和管理。
3. SQLite是開源的,不受許可證費用約束,而且是專門為嵌入式設計的產品。
二、 體系結構
SQLite 擁有一個簡潔的、模塊化的體系結構,并引進了一些獨特的方法進行關系型數據庫管理。 它由可以劃分為3個子系統(編譯器(Compiler)、核心(Core)、后端(Backend))的8個獨立模塊組成(詳見下圖)。這些模塊將查詢過程劃分為幾個獨立的任務,就像在流水線上工作一樣。在體系結構棧的頂部編譯查詢語句,在中部執行,在底部處理存儲并與操作系統交互。
下面讓我們根據不同模塊展開介紹。
-
接口(Interface)
接口處于棧的頂端,由SQLite C API組成。程序、腳本語言還有與SQLite交互的庫文件最終都是通過它與SQLite交互的。從表面上理解,這里是開發者、管理員等與SQLite通信的地方。
-
編譯器(Compiler)
編譯過程從詞法分析器(Tokenizer)和語法分析器(Parser)開始。它們協同處理文本形式的結構化查詢語句(Structured Query Language, SQL),分析其語法有效性,然后轉化為底層能更方便地處理的層次化數據結構。SQLite詞法分析器是手動編碼實現的,它的語法分析器是由SQLite特定的語法分析生成器Lemon(專門有
一本書
講解此生成器)產生的。
代碼生成器(Code Generator)將語法樹翻譯成一種SQLite專用的匯編代碼,這些匯編語言由一些最終由虛擬機執行的指令組成。代碼生成器的唯一工作是將語法樹轉換為完全由這種匯編語言編寫的微程序并交給虛擬機處理。
-
虛擬機(Virtual Machine)
架構棧的中心部分是虛擬機(Virtual Machine),也叫做虛擬數據庫引擎(Virtual DataBase Engine,VDBE)。VDBE是基于寄存器的虛擬機,在字節碼上工作,這使得它可以獨立頂層操作系統、CPU和系統體系結構。VDBE的字節代碼(稱為虛擬機語言)由100多個被稱為操作碼(opcodes)的可能的任務構成,所有這些操作都是圍繞數據庫進行的。
VDBE是一個專為數據處理設計的虛擬機。它的指令集中所有的指令或者用來完成具體的數據庫操作(比如打開一個表的游標、做記錄、提取一列或者開始一個事務等),或者以某種方式控制棧為完成這些操作做準備。SQLite中的所有SQL語句----從選擇和更新記錄到創建表、視圖以及索引----都是首先編譯成虛擬機語言,形成一個獨立的定義了如何完成給定的命令的指令集。
VDBE是SQLite的核心,它之前的所有模塊都是用于創建VDBE程序的,它之后的所有模塊都是用于執行VDBE程序的,每次執行一條指令。
-
后端(Backend)
后端由B-tree、頁緩存(page cache)以及操作系統接口組成。B-tree和pager一起作為信息代理。它們使用的數據源是數據庫頁,這些頁是具有相同大小的數據塊、就像用于運輸的集裝箱。頁里面的"貨物"是表示信息的大量位(bit),這些信息包括記錄、字段和索引項等。B-tree和pager不需要知道信息的內容,它們只負責移動和排列這些頁。
B-tree的職責就是排序。它維護著多個頁之間錯綜復雜的關系,這些關系能保證快速定位并找到一切有聯系的數據。B-tree將頁面組織成樹狀結構(這也是它叫做B-tree的原因),這種組織結構很適合搜索,頁面就是樹的葉子。
pager(SQLite的一種數據結構)幫助B-tree管理頁面,它負責傳輸。pager根據B-tree的請求從磁盤讀取頁面或者向磁盤寫入頁面。磁盤操作是目前計算機必須做的工作中最慢的事情之一。因此pager試圖通過將頻繁使用的頁面緩存在內存中來加速這一操作,從而最小化與硬盤直接交互所花費的時間。pager的功能描述頁包含事務管理、數據庫鎖以及崩潰恢復,其中許多功能是通過OS接口(OS Interface)實現的。
像文件鎖一樣的很多事情在不同的操作系統上實現是不同的。OS接口(OS Interface)為SQLite其他模塊提供了屏蔽這些差異的抽象層。最終的結果就是其他模塊看到的是一個一致的對外的系統接口。所以,pager不用擔心在Windows上以一種方式鎖文件,而在其他不同操作系統上(例如UNIX)上使用另一種方式。這就使得SQLite很容易移植到不同的操作系統上。
OS接口(OS Interface)的下面就是具體要存取的數據。
總體來看,SQLite分為三個子系統,里面包含了八個獨立模塊。
-
接口(Interface)
-
詞法分析器(Tokenizer)
-
語法分析器(Parser)
-
代碼生成器(Code Generator)
-
虛擬機(Virtual Machine)
-
B-Tree
-
Pager
-
OS接口(OS Interface)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
