中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解SQLite軟件架構

發布時間:2021-10-22 15:41:33 來源:億速云 閱讀:180 作者:iii 欄目:數據庫

本篇內容主要講解“如何理解SQLite軟件架構”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解SQLite軟件架構”吧!

SQLite是一個非常受歡迎的數據庫,在數據庫排行榜中已經進入前十的行列。這主要是因為該數據庫非常小巧,而且可以支持Linux、Windows、iOS和Andriod的主流的操作系統。

如何理解SQLite軟件架構

SQLite非常簡單,是一個進程內的動態庫數據庫。其最大的特點是可以支持不同的語言來使用,比如C、C++、Java等等。同時,SQLite還是一個開源的數據庫,也就是開發者可以根據自己的需求來修改數據的功能特性。

SQLite雖然非常小巧,但功能卻非常豐富,正所謂“麻雀雖小,五臟俱全”。SQLite不僅具備基本的SQL特性,還具備索引、觸發器、視圖和事務等特性。

SQLite的主要API

SQLite提供兩種訪問接口,一種是通過sqlite命令行工具,另外一種是通過動態庫,也就是API函數。在學習SQLite架構之前,我們有必要對其API進行一個簡要的介紹。其實SQLite的API很簡單,主要包括三個,分別是sqlite3_open、sqlite3_exec和sqlite3_close三個函數。其中sqlite3_exec則是用于執行SQL語句的函數。

也就是說sqlite3_exec是SQLite功能的關鍵入口,我們后面分析代碼也應該以此函數作為突破點。其它函數相對簡單,也沒那么重要。

SQLite整體架構

首先我們從整體架構上介紹一下SQLIte。其架構如圖所示,包括接口層、SQL命令處理器和存儲后端等。

如何理解SQLite軟件架構

最為核心的不是就是SQLite內核了。其中包括接口層、SQL命令處理器和虛擬機三部分。SQL命令處理器負責對用戶的SQL進行預處理,最終生成適用于虛擬機執行的代碼。

其下是后端部分,后端部分相當于存儲引擎。下面我們簡要的介紹一下每個模塊的功能。

(1) 接口

SQLIte庫的使用通過函數調用實現。為了避免與其它庫出現沖突,SQLite的函數都以sqlite3作為前綴。接口部分的實現在文件main.c,legacy.c和vdbeapi.c中。其中main.c中包含其主要的接口,包括sqlite3_open、sqlite3_config和sqlite3_close等等。SQLite中最終的函數不在main.c中,而是在legacy.c中,該文件中只包含這一個接口的實現。

(2) 詞法分析器

詞法分析器對SQL語句字符串進行解析,最終生成單詞(token)序列。并且將生成的單詞序列傳給解析器進行下一步的動作。該功能的具體實現在文件tokenize.c中,核心入口函數為sqlite3RunParser。

(3) 解析器

SQLite的解析器基于Lemon實現,它實現將SQL語句字符串解析成語法樹。Lemon是一個與YACC/BISON類似的詞法分析庫。該庫的源代碼在tool目錄中。

(4) 代碼生成器

代碼生成器用于生成與SQL語句對應,可以在虛擬機執行的代碼。代碼生成器實現比較復雜,包含的文件有:build.c, delete.c, attach.c,  expr.c, insert.c, pragma.c, select.c,  auth.c等等。通過文件名可以看出,這里很多文件其實分別對應著一個SQL語句,比如delete,insert和select等。

(5) 虛擬機

SQL的具體執行在一個稱為虛擬機的組件中進行的,這個在前面架構圖中已經有所展示。虛擬機執行的代碼有前面代碼生成器產生。虛擬機的實現在文件vdbe.h和vdbe.c中。

(6) B-樹

SQLite的數據通過B樹進行組織管理。每個表或者索引都有一個對應的B樹。所有的B樹存儲在一個數據庫文件中。B樹的具體實現在btree.c和btree.h文件中。

(7) 頁緩存

SQLite的文件被劃分為等份大小,B樹也是以該大小為粒度來對數據進行管理。頁緩存是該粒度對應的內存內容,通過該內存實現對數據塊的讀寫等訪問。頁緩存相關的實現在pager.c和pcache.c等文件中。

(8) 操作系統接口

SQLite是一個跨平臺的數據庫,其存儲數據需要兼容Windows和Linux的文件系統API。為了方便,SQLite實現了一個抽象層。這樣對于SQLite業務邏輯來說,只需要調用該抽象層的接口即可,而不用關心操作系統。

(9) 基礎庫

包含一個被各個模塊都可能使用到的基礎庫,比如內存分配,字符串處理等。

SQLite文件格式

前文我們簡要的介紹了一下SQLite的軟件架構以及每個組件的基本功能。接下來我們介紹一下數據庫文件的相關功能。

在SQLite中一個文件承載著一個數據庫實例,這個文件稱為主庫文件(main database  file)。除了主庫文件外,還可能有一些其它文件,比如用于事務的日志文件等。本文主要集中介紹主庫文件,其它文件后續介紹。

(1) 頁

數據庫文件由多個頁構成,每個頁的大小在512到65536字節之間,且大小必須是2的冪。頁通過編號進行標記,起始值為1,最大編號為2的31次冪-2。頁的默認大小是4KB,本文以默認大小為例進行介紹。

如何理解SQLite軟件架構

在數據庫中的每個頁都有一個特定的用途,這些用途包括:

  • 鎖字節頁(Lock-byte page)

  • 剩余 頁

  • B樹 頁

  • 指針映射頁

  • 有效負載溢出頁

數據庫文件的第一個頁是比較特殊的,它包含整個數據庫文件的描述信息,這里稱為數據庫頭信息。

(2) 數據庫頭

數據庫頭包含100個字節的內容,其中每一個成員的偏移,大小和功能如下圖所示。

如何理解SQLite軟件架構

我們可以創建一個數據庫實例,然后對照文件內容與數據庫頭的格式進行理解。比如數據庫頭的第一個成員為一個魔數,用于標識該文件為SQLite數據庫文件及版本。在下圖中可以找到該信息,可以看出兩者完全匹配(SQLite  format 3)。

如何理解SQLite軟件架構

除了上述數據庫頭的格式外,每個不同的頁都有不同的布局。

到此,相信大家對“如何理解SQLite軟件架構”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江孜县| 读书| 思南县| 衡南县| 禄丰县| 沧源| 华蓥市| 株洲县| 固始县| 依安县| 无极县| 呼图壁县| 沧州市| 陕西省| 峡江县| 同德县| 桃源县| 赞皇县| 天等县| 东乌珠穆沁旗| 高雄市| 德惠市| 井冈山市| 平乐县| 汶川县| 五华县| 盐亭县| 喜德县| 云安县| 泰顺县| 吴江市| 枣强县| 固原市| 会东县| 苍山县| 安图县| 麟游县| 来安县| 大石桥市| 贡山| 沅陵县|