標籤:
前言
SQLite是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目,設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在Android、iOS等移動作業系統中的資料庫實現也是使用的SQLite3。對於Android開發人員來說資料庫並不算很好維護,所以深入瞭解SQLite資料庫也變得很有必要,本文就來先介紹下SQLite3。
1.SQLite3簡單介紹
SQLite並不是一個獨立的進程,而是作為程式的一部分,應用程式經由程式設計語言內的API直接調用SQLite,這能有效減少資料庫訪問的延遲,因為在一個進程中調用函數要比跨進程通訊更有效率。SQLite將整個資料庫作為一個單獨的、可跨平台的檔案儲存體再主機中,它採用了再寫入資料時將整個資料庫檔案加鎖的簡單的設計,儘管寫操作只能串列進行,但SQLite的讀操作可以多任務同時進行。
程式庫實現了多數的SQL-92標準,包括事務以及實現原子性、一致性、隔離性和持久性,但它缺失了某些特性,例如它僅部分支援觸發器: 支援 FOR EACH ROW 觸發器,但不支援 FOR EACH STATEMENT 觸發器。儘管它支援大多數複雜查詢,但它的ALTER TABLE 功能有所限制:只能添加和重新命名列,不能修改或者刪除列。因此,當需要修改或者刪除列名時只能重新建立表。
2. 為什麼要用 SQLite
- 不需要一個單獨的伺服器處理序或操作的系統(無伺服器的);
- 不需要配置,這意味著不需要安裝或管理;
- 非常小,是輕量級的,完全配置時小於 400KiB,省略可選功能配置時小於250KiB;
- 自給自足的,這意味著不需要任何外部的依賴;
- 支援 SQL92(SQL2)標準的大多數查詢語言的功能。 SQLite 使用 ANSI-C 編寫的,並提供了簡單和便於使用的 API;
- 支援資料庫大小至2TB;
- 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運行。
3. SQLite的系統架構
SQLite採用了模組的設計,它由三個子系統,包括8個獨立的模組構成;模組將複雜的查詢過程分解為細小的工作進行處理。
如所示,sqlite主要由7個構件子系統(也就是模組)組成,這些模組被分割為兩個部分:
前端解析系統和後端引擎。
前端解析系統
前端預先處理應用程式傳遞過來的SQL語句和SQLite命令,對擷取的編碼分析,最佳化,並轉換 為後端能夠執行的SQLite內部位元組編碼。前端可分為三個模組:
後端引擎
後端是用來解釋位元組編碼程式的引擎,該引擎做的才是真正的資料庫處理工作。後端部分由四個模組組成:
虛擬機器(VM)
VM模組是一個內部位元組編碼語言的解譯器。它通過執行位元組編碼語句來實現SQL語句的工作。它是資料庫中資料的最終的操作者。它把資料庫看成表和索引的集合,而表和索引則是一系列的元組或者記錄。
B/B+樹
B/B+樹模組把每一個元組集組織進一個一次排好序的樹狀資料結構中,表和索引被分別置於單獨的B+和B樹中。該模組協助VM進行搜尋,插入和刪除樹中的元組。它也協助VM建立新的樹和刪除舊的樹
頁面發送器(pager)
頁面發送器模組在原始檔案的上層實現了一個面向頁面的資料庫檔案抽象。它管理B/B+樹使用的記憶體內緩衝(資料庫頁的),另外,他也管理檔案的鎖定,並用日誌來實現事物的ACID屬性。
作業系統交介面(system interface)
作業系統介面模組提供了對應於不同本地作業系統的統一交介面。
Android 資料庫開發(一)SQLite3概述