基于ARM-Linux的SQLite嵌入式數(shù)據(jù)庫(kù)的研究
發(fā)布時(shí)間:2008/8/29 0:00:00 訪問(wèn)次數(shù):571
引言
隨著嵌入式系統(tǒng)的廣泛應(yīng)用和用戶對(duì)數(shù)據(jù)處理和管理需求的不斷提高,各種智能設(shè)備和數(shù)據(jù)庫(kù)技術(shù)的緊密結(jié)合已經(jīng)得到了各方面的重視。不久的將來(lái)嵌入式數(shù)據(jù)庫(kù)將無(wú)處不在?v觀目前國(guó)際、國(guó)內(nèi)嵌入式數(shù)據(jù)庫(kù)的應(yīng)用情況,目前基于嵌入式數(shù)據(jù)庫(kù)應(yīng)用的市場(chǎng)已經(jīng)進(jìn)入加速發(fā)展的階段。
1 嵌入式數(shù)據(jù)庫(kù)
1.1 嵌入式數(shù)據(jù)庫(kù)的設(shè)計(jì)
嵌入式數(shù)據(jù)庫(kù)系統(tǒng)是指支持某種特定計(jì)算模式或移動(dòng)計(jì)算的數(shù)據(jù)庫(kù)管理系統(tǒng),它通常與操作系統(tǒng)和具體應(yīng)用集成在一起,運(yùn)行在智能型嵌入式設(shè)備或移動(dòng)設(shè)備上。嵌入式數(shù)據(jù)庫(kù)的使用是采用程序驅(qū)動(dòng),即由程序調(diào)用相應(yīng)的api來(lái)實(shí)現(xiàn)數(shù)據(jù)的存取。具有體積小巧、快速高效、穩(wěn)定可靠、可移植性等特點(diǎn),非常適用于嵌入式環(huán)境下的數(shù)據(jù)管理.。
嵌入式數(shù)據(jù)庫(kù)的主要設(shè)計(jì)思想如下圖1所示,在向上層應(yīng)用提供標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)接口的同時(shí),擺脫傳統(tǒng)數(shù)據(jù)庫(kù)僅僅由軟件驅(qū)動(dòng)的束縛,根據(jù)嵌入式系統(tǒng)的實(shí)際情況用soc技術(shù)同時(shí)實(shí)現(xiàn)硬件驅(qū)動(dòng)。軟件部分按sql92標(biāo)準(zhǔn)實(shí)現(xiàn)sql語(yǔ)句的解析,實(shí)現(xiàn)事務(wù)管理功能、數(shù)據(jù)同步機(jī)制、數(shù)據(jù)的備份和恢復(fù),軟件部分不關(guān)心數(shù)據(jù)的實(shí)際存儲(chǔ),用標(biāo)準(zhǔn)c實(shí)現(xiàn),能同任何嵌入式操作系統(tǒng)內(nèi)核一同編譯,能支持各嵌入式操作系統(tǒng)的安裝格式,由數(shù)據(jù)庫(kù)硬件驅(qū)動(dòng)專用芯片實(shí)現(xiàn)對(duì)實(shí)際數(shù)據(jù)的訪問(wèn)功能(存儲(chǔ)器讀寫,i/o通訊,異構(gòu)數(shù)據(jù)庫(kù)接駁)。
圖1 嵌入式數(shù)據(jù)庫(kù)驅(qū)動(dòng)結(jié)構(gòu)圖
1.2. 嵌入式數(shù)據(jù)庫(kù)sqlite
sqlite 是d. richard hipp 在2000年開發(fā)的一個(gè)小型嵌入式數(shù)據(jù)庫(kù)。他是完全獨(dú)立的,不具有外部依賴性,可以較為方便地應(yīng)用于嵌入式系統(tǒng)中。其源代碼完全開放,可以免費(fèi)用于任何用途,包括商業(yè)目的。sqlite 雖然是個(gè)極端輕量級(jí)的關(guān)系數(shù)據(jù)庫(kù),卻保留了數(shù)據(jù)庫(kù)的大部分特征,他提供了對(duì)sql92 標(biāo)準(zhǔn)的大多數(shù)支持:支持多表和索引、事務(wù)、視圖、觸發(fā)和一系列的用戶接口及驅(qū)動(dòng)。其主要特征如下::
(1) 支持原子的、一致的、獨(dú)立的和持久的(acid) 事務(wù)特性,即使系統(tǒng)崩潰和掉電。
(2) 零配置(zero2configuration),無(wú)需安裝和管理。
(3) 一個(gè)完整的數(shù)據(jù)庫(kù)存儲(chǔ)在單一磁盤文件中。
(4) 數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由共享。
(5) 支持?jǐn)?shù)據(jù)庫(kù)大小至2 tb。
(6) 字符串和二進(jìn)制大對(duì)象(blobs) 的大小僅被有效內(nèi)存限制。
(7) 源碼體積小,編譯后低于250 kb。
(8) 大部分的操作比關(guān)系型數(shù)據(jù)庫(kù)引擎要快。
(9) 簡(jiǎn)單易用的api。
sqlite 由于小、快、簡(jiǎn)單、可靠,而且作者完全放棄版權(quán),從他一發(fā)布出來(lái),便深受歡迎。對(duì)于嵌人式環(huán)境,管理、執(zhí)行、維護(hù)的簡(jiǎn)單化比企業(yè)數(shù)據(jù)庫(kù)引擎提供的許多復(fù)雜應(yīng)用更重要,因此sqlite 數(shù)據(jù)庫(kù)是一個(gè)很好的選擇。
2 sqlite 內(nèi)部結(jié)構(gòu)及開發(fā)技術(shù)
2. 1 sqlite 內(nèi)部結(jié)構(gòu)
sqlite 采用模塊化的設(shè)計(jì),主要由4個(gè)部分組成:內(nèi)核(core)、sql編譯器( sql compiler)、后端(backend)以及附件(accessories)。內(nèi)部結(jié)構(gòu)如圖2所示。
圖2 sqlite 的內(nèi)部結(jié)構(gòu)
sqlite 的接口是一些已經(jīng)編寫好的c庫(kù),即使使用不同語(yǔ)言的api,在底層仍然使用c 庫(kù)執(zhí)行。sql語(yǔ)句通過(guò)接口進(jìn)入到高效的sql編譯器,由標(biāo)記處理器( tokeni2zer)分解成檸檬分析器(par ser) 可以識(shí)別的各個(gè)標(biāo)志符,然后由分析器重新組合標(biāo)志符并調(diào)用代碼生成器(code generator) 生成虛擬機(jī)器碼,交由虛擬機(jī)( virtual machine)去執(zhí)行,最終完成sql 語(yǔ)句指定的任務(wù)。虛擬機(jī)是sqlite 內(nèi)部結(jié)構(gòu)的核心,不僅完成與數(shù)據(jù)操作相關(guān)的全部操作,而且還是客戶和存儲(chǔ)之間信息進(jìn)行交換的中間單元。數(shù)據(jù)庫(kù)按照b樹(b2t ree) 的形式存儲(chǔ)在磁盤上,通過(guò)可調(diào)整的頁(yè)面緩沖(pager) 獲得對(duì)數(shù)據(jù)的快速查找和存儲(chǔ)。為了方便移植,sqlite 使用一個(gè)抽象層接口(os in2terface) 與不同操作系統(tǒng)進(jìn)行對(duì)接。
2. 2 sqlite 開發(fā)技術(shù)
sqlite 本身提供了c 語(yǔ)言的api 接口,使得對(duì)數(shù)據(jù)庫(kù)的操作十分簡(jiǎn)單,主要是對(duì)3個(gè)api 函數(shù)的調(diào)用。
(1) 打開數(shù)據(jù)庫(kù)
int sqlite3 open (
const char 3 filename , / 3 數(shù)據(jù)庫(kù)文件名(u tf28) 3 /
sqlite3 3 3 ppdb / 3 輸出sqlite 數(shù)據(jù)庫(kù)句柄3 /
) ;
(2) 執(zhí)行sql
int sqlite3 exec (
sqlite3 3 , / 3 已經(jīng)打開的數(shù)據(jù)庫(kù)句柄3 /
const char 3 sql , / 3 要執(zhí)行的sql 語(yǔ)句3 /
sqlite callback , / 3 回調(diào)函數(shù)3 /
void 3 , / 3 回調(diào)函數(shù)的第一個(gè)參數(shù)3 /
char 3 3
引言
隨著嵌入式系統(tǒng)的廣泛應(yīng)用和用戶對(duì)數(shù)據(jù)處理和管理需求的不斷提高,各種智能設(shè)備和數(shù)據(jù)庫(kù)技術(shù)的緊密結(jié)合已經(jīng)得到了各方面的重視。不久的將來(lái)嵌入式數(shù)據(jù)庫(kù)將無(wú)處不在?v觀目前國(guó)際、國(guó)內(nèi)嵌入式數(shù)據(jù)庫(kù)的應(yīng)用情況,目前基于嵌入式數(shù)據(jù)庫(kù)應(yīng)用的市場(chǎng)已經(jīng)進(jìn)入加速發(fā)展的階段。
1 嵌入式數(shù)據(jù)庫(kù)
1.1 嵌入式數(shù)據(jù)庫(kù)的設(shè)計(jì)
嵌入式數(shù)據(jù)庫(kù)系統(tǒng)是指支持某種特定計(jì)算模式或移動(dòng)計(jì)算的數(shù)據(jù)庫(kù)管理系統(tǒng),它通常與操作系統(tǒng)和具體應(yīng)用集成在一起,運(yùn)行在智能型嵌入式設(shè)備或移動(dòng)設(shè)備上。嵌入式數(shù)據(jù)庫(kù)的使用是采用程序驅(qū)動(dòng),即由程序調(diào)用相應(yīng)的api來(lái)實(shí)現(xiàn)數(shù)據(jù)的存取。具有體積小巧、快速高效、穩(wěn)定可靠、可移植性等特點(diǎn),非常適用于嵌入式環(huán)境下的數(shù)據(jù)管理.。
嵌入式數(shù)據(jù)庫(kù)的主要設(shè)計(jì)思想如下圖1所示,在向上層應(yīng)用提供標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)接口的同時(shí),擺脫傳統(tǒng)數(shù)據(jù)庫(kù)僅僅由軟件驅(qū)動(dòng)的束縛,根據(jù)嵌入式系統(tǒng)的實(shí)際情況用soc技術(shù)同時(shí)實(shí)現(xiàn)硬件驅(qū)動(dòng)。軟件部分按sql92標(biāo)準(zhǔn)實(shí)現(xiàn)sql語(yǔ)句的解析,實(shí)現(xiàn)事務(wù)管理功能、數(shù)據(jù)同步機(jī)制、數(shù)據(jù)的備份和恢復(fù),軟件部分不關(guān)心數(shù)據(jù)的實(shí)際存儲(chǔ),用標(biāo)準(zhǔn)c實(shí)現(xiàn),能同任何嵌入式操作系統(tǒng)內(nèi)核一同編譯,能支持各嵌入式操作系統(tǒng)的安裝格式,由數(shù)據(jù)庫(kù)硬件驅(qū)動(dòng)專用芯片實(shí)現(xiàn)對(duì)實(shí)際數(shù)據(jù)的訪問(wèn)功能(存儲(chǔ)器讀寫,i/o通訊,異構(gòu)數(shù)據(jù)庫(kù)接駁)。
圖1 嵌入式數(shù)據(jù)庫(kù)驅(qū)動(dòng)結(jié)構(gòu)圖
1.2. 嵌入式數(shù)據(jù)庫(kù)sqlite
sqlite 是d. richard hipp 在2000年開發(fā)的一個(gè)小型嵌入式數(shù)據(jù)庫(kù)。他是完全獨(dú)立的,不具有外部依賴性,可以較為方便地應(yīng)用于嵌入式系統(tǒng)中。其源代碼完全開放,可以免費(fèi)用于任何用途,包括商業(yè)目的。sqlite 雖然是個(gè)極端輕量級(jí)的關(guān)系數(shù)據(jù)庫(kù),卻保留了數(shù)據(jù)庫(kù)的大部分特征,他提供了對(duì)sql92 標(biāo)準(zhǔn)的大多數(shù)支持:支持多表和索引、事務(wù)、視圖、觸發(fā)和一系列的用戶接口及驅(qū)動(dòng)。其主要特征如下::
(1) 支持原子的、一致的、獨(dú)立的和持久的(acid) 事務(wù)特性,即使系統(tǒng)崩潰和掉電。
(2) 零配置(zero2configuration),無(wú)需安裝和管理。
(3) 一個(gè)完整的數(shù)據(jù)庫(kù)存儲(chǔ)在單一磁盤文件中。
(4) 數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由共享。
(5) 支持?jǐn)?shù)據(jù)庫(kù)大小至2 tb。
(6) 字符串和二進(jìn)制大對(duì)象(blobs) 的大小僅被有效內(nèi)存限制。
(7) 源碼體積小,編譯后低于250 kb。
(8) 大部分的操作比關(guān)系型數(shù)據(jù)庫(kù)引擎要快。
(9) 簡(jiǎn)單易用的api。
sqlite 由于小、快、簡(jiǎn)單、可靠,而且作者完全放棄版權(quán),從他一發(fā)布出來(lái),便深受歡迎。對(duì)于嵌人式環(huán)境,管理、執(zhí)行、維護(hù)的簡(jiǎn)單化比企業(yè)數(shù)據(jù)庫(kù)引擎提供的許多復(fù)雜應(yīng)用更重要,因此sqlite 數(shù)據(jù)庫(kù)是一個(gè)很好的選擇。
2 sqlite 內(nèi)部結(jié)構(gòu)及開發(fā)技術(shù)
2. 1 sqlite 內(nèi)部結(jié)構(gòu)
sqlite 采用模塊化的設(shè)計(jì),主要由4個(gè)部分組成:內(nèi)核(core)、sql編譯器( sql compiler)、后端(backend)以及附件(accessories)。內(nèi)部結(jié)構(gòu)如圖2所示。
圖2 sqlite 的內(nèi)部結(jié)構(gòu)
sqlite 的接口是一些已經(jīng)編寫好的c庫(kù),即使使用不同語(yǔ)言的api,在底層仍然使用c 庫(kù)執(zhí)行。sql語(yǔ)句通過(guò)接口進(jìn)入到高效的sql編譯器,由標(biāo)記處理器( tokeni2zer)分解成檸檬分析器(par ser) 可以識(shí)別的各個(gè)標(biāo)志符,然后由分析器重新組合標(biāo)志符并調(diào)用代碼生成器(code generator) 生成虛擬機(jī)器碼,交由虛擬機(jī)( virtual machine)去執(zhí)行,最終完成sql 語(yǔ)句指定的任務(wù)。虛擬機(jī)是sqlite 內(nèi)部結(jié)構(gòu)的核心,不僅完成與數(shù)據(jù)操作相關(guān)的全部操作,而且還是客戶和存儲(chǔ)之間信息進(jìn)行交換的中間單元。數(shù)據(jù)庫(kù)按照b樹(b2t ree) 的形式存儲(chǔ)在磁盤上,通過(guò)可調(diào)整的頁(yè)面緩沖(pager) 獲得對(duì)數(shù)據(jù)的快速查找和存儲(chǔ)。為了方便移植,sqlite 使用一個(gè)抽象層接口(os in2terface) 與不同操作系統(tǒng)進(jìn)行對(duì)接。
2. 2 sqlite 開發(fā)技術(shù)
sqlite 本身提供了c 語(yǔ)言的api 接口,使得對(duì)數(shù)據(jù)庫(kù)的操作十分簡(jiǎn)單,主要是對(duì)3個(gè)api 函數(shù)的調(diào)用。
(1) 打開數(shù)據(jù)庫(kù)
int sqlite3 open (
const char 3 filename , / 3 數(shù)據(jù)庫(kù)文件名(u tf28) 3 /
sqlite3 3 3 ppdb / 3 輸出sqlite 數(shù)據(jù)庫(kù)句柄3 /
) ;
(2) 執(zhí)行sql
int sqlite3 exec (
sqlite3 3 , / 3 已經(jīng)打開的數(shù)據(jù)庫(kù)句柄3 /
const char 3 sql , / 3 要執(zhí)行的sql 語(yǔ)句3 /
sqlite callback , / 3 回調(diào)函數(shù)3 /
void 3 , / 3 回調(diào)函數(shù)的第一個(gè)參數(shù)3 /
char 3 3
熱門點(diǎn)擊
- 基于嵌入式處理器的電力諧波多功能實(shí)時(shí)分析系統(tǒng)
- 基于ARM9芯片S3C2410異常中斷程序設(shè)
- 三星ARM9 S3C2410 的的特點(diǎn)及其軟
- VxWorks下實(shí)時(shí)多任務(wù)程序的實(shí)現(xiàn)
- ARM、DSP、FPGA的特點(diǎn)和區(qū)別
- 基于CP2200的嵌入式以太網(wǎng)接口設(shè)計(jì)
- ucos-ii在嵌入式智能視覺監(jiān)控系統(tǒng)中的應(yīng)
- ARM/uClinux應(yīng)用程序的開發(fā)
- 基于ARM開發(fā)板的車輛檢測(cè)系統(tǒng)控制單元設(shè)計(jì)
- 425嵌入式開發(fā)平臺(tái)簡(jiǎn)介
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說(shuō)新車間的特點(diǎn)是“靈動(dòng)”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- 扇出型面板級(jí)封裝(FOPLP)
- 全球首款無(wú)掩模光刻系統(tǒng)—DSP
- 紫光閃存E5200 PCIe 5.0 企業(yè)級(jí)
- NAND Flash 技術(shù)和系
- 高性能DIMM 內(nèi)存數(shù)據(jù)技術(shù)封
- PCIe Gen4 SSD主控
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究