版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
千里之行,始于足下讓知識帶有溫度。第第2頁/共2頁精品文檔推薦淺談嵌入式SQLite數(shù)據(jù)庫實現(xiàn)與應(yīng)用1、前言
有一些日子沒有認(rèn)真關(guān)注SQLite了,今日打開其主頁,發(fā)覺其最新的版本已經(jīng)是3.6.22了,更讓我驚喜的是它的用戶越來越多,而且郵件列表的關(guān)注者也越來越多,驟然覺得自己已經(jīng)太old了。驚喜的同時,不得不聊上幾句了。
首先,來看看都有哪些人在使用SQLite,主頁上列舉一長串NB的用戶,其中不乏像Adobe,Apple,F(xiàn)irefox,甚至連google,Microsoft,SUN這樣的用戶。
Firefox:這是我的機(jī)器上V3.5.7安裝名目下的文件:
可以發(fā)覺用的SQLite。
據(jù)說,Google在它的DesktopforMac,GoogleGears,以及Android,甚至Chrome中都用到SQLite,而且,Google的工程師對SQLite的全文檢索功能作了很大的貢獻(xiàn)(contribution)。還有Apple,Micorsoft,SUN等等,這里就不列舉了。具體見http://./famous.html。有這些公司的參加,對SQLite的進(jìn)展應(yīng)當(dāng)有很大的協(xié)助,尤其是像Google這樣的用戶。
2、實現(xiàn)與應(yīng)用
下面從實現(xiàn)及應(yīng)用的角度來談?wù)凷QLite,先看看SQLite的特點(diǎn)(功能)吧。
特點(diǎn)
容易(simple):SQLite是一個十分輕量級自包含(lightweightandself-contained)的DBMS:一個頭文件,一個動態(tài)庫文件,你就擁有了關(guān)系數(shù)據(jù)庫的全部功能了。容易,是SQLite最顯然的哲學(xué)。它提供的API少而容易。只需要一個DLL文件,你的程序馬上就擁有了一個功能強(qiáng)大的數(shù)據(jù)庫引擎,這是一件很美好的事。
小巧(small):我用VS2022在Windows下編譯的3.6.11,Release版為368K,用時不到20秒——而編譯MySQL時,要花上幾分鐘。而當(dāng)我插入10000條int數(shù)據(jù)時,內(nèi)存開銷660K,磁盤開銷92K。
事務(wù)(transaction):事務(wù)是現(xiàn)代商業(yè)數(shù)據(jù)處理系統(tǒng)最基本的要求,而Access,不論是在可執(zhí)行文件大?。戳艘幌翧ccess2022的可執(zhí)行文件大小為6.32M,兩者不是一個量級),還是事務(wù)特性,都是不能和SQLite相比的。
并發(fā)性(Concurrency):因為SQLite通過OS的文件鎖來實現(xiàn)庫級鎖,粒度很大,但是,它通過一些復(fù)雜特別的處理(詳細(xì)可以參見分析系列),盡量的提升了讀寫的并發(fā)度。假如你還有不安,你可以看看這篇文章:http://./database/sqlite_cms.html。
SQL92:SQLite支持絕大部分的標(biāo)準(zhǔn)SQL語句,你只需要幾百K的空間,就可以換來需要上百兆的通用DBMS幾乎全部操作了。
便利(Convenience):假如你的程序要使用SQLite,只需要將拷貝你的程序名目即可。
開源(Opensource):這是它最強(qiáng)大的地方。開源,意味著你可以品讀它的源碼,你可以隨時修改它,加入你自己的特性,而這一切徹低免費(fèi)的。開源,是一種精神。
實現(xiàn)部分
好了,現(xiàn)在從實現(xiàn)的角度來談?wù)剛€人體味,這也是我比較關(guān)注的。
SQLite是一款優(yōu)秀的嵌入式數(shù)據(jù)庫管理系統(tǒng),這里有兩層含義:一是它常常作為動態(tài)庫嵌入到應(yīng)用程序;
另外一方面它通常用于嵌入式設(shè)備或其它要求較低的桌面應(yīng)用。假如把它作為內(nèi)存數(shù)據(jù)庫,個人覺得不是很適合。究竟,它的寫并發(fā)性不是很好,此時,TimesTen大概會更好,BerkeyDB大概是一個不錯的挑選。SQLite這樣的嵌入式數(shù)據(jù)庫與主存數(shù)據(jù)庫的應(yīng)用場景、實現(xiàn)以及對資源的需求都是不一樣的。
(1)事務(wù)處理
事務(wù)的核心問題有兩個:并發(fā)控制和恢復(fù)。解決了并發(fā)控制和恢復(fù)問題的系統(tǒng),就能允許它的用戶假設(shè)程序是原子的(atomically)執(zhí)行的——好似沒有其它的程序同時執(zhí)行;而且是牢靠的(reliably)——不會產(chǎn)生失敗。原子性和牢靠性的抽象,則稱為事務(wù)(transaction)。其實,事務(wù)并不是DBMS的專利,任何分布式系統(tǒng),都面向并發(fā)和恢復(fù)問題,而解決的辦法就是事務(wù),只不過,我們更常聽到DBMS中的事務(wù)。
并發(fā)控制保證事務(wù)的原子執(zhí)行,它使得交叉執(zhí)行的事務(wù)看起來是一個接一個的挨次執(zhí)行的,徹低沒有交叉執(zhí)行。假如交叉執(zhí)行的結(jié)果與挨次執(zhí)行的結(jié)果全都,則稱為串行化(serializable)。
恢復(fù)使得數(shù)據(jù)庫僅僅包含那些正常完成的事務(wù)的結(jié)果。假如事務(wù)在執(zhí)行的過程中發(fā)生錯誤,不能繼續(xù)舉行,恢復(fù)算法必需清除部分完成事務(wù)產(chǎn)生的影響。
?并發(fā)控制
SQLite只支持庫級鎖,庫級鎖意味著什么?——意味著同時只能允許一個寫操作,也就是說,即事務(wù)T1在A表插入一條數(shù)據(jù),事務(wù)T2在B表中插入一條數(shù)據(jù),這兩個操作不能同時舉行,即使你的機(jī)器有100個CPU,也無法同時舉行,而只能挨次舉行。表級都不能并行,更別說元組級了——這就是庫級鎖。但是,SQLite盡量延遲申請X鎖,直到數(shù)據(jù)塊真正寫盤時才申請X鎖,這是十分巧妙而有效的。
?恢復(fù)
SQLite的恢復(fù)技術(shù)是影子分頁技術(shù)(shadowpaging)技術(shù)的典型代表。
DBMS的常用恢復(fù)技術(shù)有影子分頁技術(shù)與基于日志的技術(shù),前者在早其數(shù)據(jù)庫管理系統(tǒng)中用到,比如SystemR,現(xiàn)代DBMS中已經(jīng)很難見到它的身影了。
影子分頁技術(shù)與基于日志技術(shù)相比,優(yōu)點(diǎn)是實現(xiàn)容易,消退了寫日志記錄的開銷,恢復(fù)的速度也快(不需要redo和undo)。影子分頁的缺點(diǎn)就是事務(wù)提交時要輸出多個塊,這使得提交的開銷很大,而且以塊為單位,很難應(yīng)用到允許多個事務(wù)并發(fā)執(zhí)行的狀況——這是它致命的缺點(diǎn)。
(2)查詢處理
SQLite的查詢處理本質(zhì)上就是一個SQL編譯器和一個虛擬機(jī)。而實現(xiàn)這些功能只用了十多個文件,囫圇實現(xiàn)實現(xiàn)容易而有效,但是也存在一些問題。首先,SQLite字典數(shù)據(jù)很容易,實際上它的字典就一個表sqlite_mater,全部的信息都是通過對sqlite_master中SQL語句舉行解析獵取的,而解析一個SQL語句,都需要舉行詞法分析、語法分析、甚至虛擬機(jī)代碼的生成。而這一過程是很需要時光的,而且,查詢方案也沒有重用。第二,查詢優(yōu)化還比較容易,特殊是銜接操作,只通過循環(huán)來做(MySQL也一樣)。但是,僅僅數(shù)萬代碼,我們不能對它要求太苛求。
(3)存儲模型
SQLite的文件物理上被劃分成相同大小的塊;規(guī)律上劃分成一些B-Tree——每個表對應(yīng)一個B-Tree。而沒有像Oracle,或者InnoDB對數(shù)據(jù)塊舉行復(fù)雜的規(guī)律組織,這種按需分配數(shù)據(jù)塊的做法必定影響磁盤的讀寫性能。不過,歸根到底,還是源于它的應(yīng)用場景。
(4)緩沖區(qū)管理
Buffer的管理對于DBMS,無疑是十分重要的,SQLite在其它方面做得比較容易,但是在緩沖區(qū)管理這一塊,它還是做足了功夫。SQLite采納DBMS常用的LRU算法。更值得一提的是,在較新的版本中,SQLite采納和虛擬文件系統(tǒng)的類似的方式,實現(xiàn)了讓默認(rèn)緩沖區(qū)管理子系統(tǒng)可以很簡單的切換成其它的緩沖區(qū)管理算法,這是十分靈便的。
(5)I/O
SQLite采納容易的堵塞I/O,較新的版本將異步I/O作為可選的擴(kuò)展,但是,因為SQLite沒有日志,所以,事務(wù)中ACID中的D,就無法保證,所以,假如你的數(shù)據(jù)很關(guān)鍵,請不要用SQLite的異步I/O。另一方面,實際上,無數(shù)嵌入式操作系統(tǒng),比如WindowsCE并不支持異步I/O(不過,這可以通過多線程加以解決)。
但是,這些“缺點(diǎn)”并不是SQLite的缺點(diǎn),相對于通過DBMS,恰恰是它的優(yōu)點(diǎn),這樣的實現(xiàn)容易,而且對資源的需求較低。對嵌入式設(shè)備、或者那些要求較低的應(yīng)用,已經(jīng)足夠,足夠就好。
應(yīng)用場景
嵌入式設(shè)備:這應(yīng)當(dāng)是SQLite應(yīng)用的主要場景,無數(shù)公司都在他們的嵌入式應(yīng)用程序中使用SQLite,其中不乏google的Android。
桌面應(yīng)用:假如你已經(jīng)厭惡了fopen,fread,fwrite這些函數(shù),SQLite是你不錯的挑選,它接口容易,而且支持事務(wù)。前些天無意中下了一個cookie清除軟件——CookieCrumbler,打開一看,發(fā)覺里面居
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職工程審計管理應(yīng)用(應(yīng)用技術(shù))試題及答案
- 2025年中職新能源汽車(充電槍更換)試題及答案
- 2026年營養(yǎng)咨詢(孕婦營養(yǎng)調(diào)理)試題及答案
- 按價值付費(fèi)下5G醫(yī)療成本效益分析
- 養(yǎng)老院老人緊急聯(lián)絡(luò)通訊制度
- 養(yǎng)老院老人生活娛樂活動組織人員培訓(xùn)制度
- 養(yǎng)老院老人家庭關(guān)系溝通制度
- 養(yǎng)老院突發(fā)事件應(yīng)急預(yù)案制度
- 養(yǎng)老院醫(yī)療護(hù)理服務(wù)質(zhì)量制度
- 2026年國企財務(wù)知識成本核算方法應(yīng)用練習(xí)與答題指引含答案
- 光伏系統(tǒng)運(yùn)行維護(hù)與檢修方案
- 2025年江蘇省建筑施工企業(yè)主要負(fù)責(zé)人安全員A證考核考試題庫附答案
- 高校學(xué)生評價體系改革方案
- 防火防盜安全知識
- 施工現(xiàn)場安全生產(chǎn)網(wǎng)格化管理方案
- 19CJ87-2 采光、通風(fēng)、消防排煙天窗(二)-屋面節(jié)能通風(fēng)裝置圖集
- 雨課堂在線學(xué)堂《英美音樂與文化》作業(yè)單元考核答案
- 電石生產(chǎn)安全技術(shù)規(guī)程
- 智能制造車間SCADA系統(tǒng)設(shè)計方案
- 自考勞動法2025年10月真題及答案
- CD20單抗治療免疫性疾病
評論
0/150
提交評論