




全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1. SQLite的特性1. SQLite支持事務(wù),滿足(ACID)特性:即使在系統(tǒng)crash掉或者掉電的情況下,一樣可以恢復(fù)。2. 零配置,不需要安裝或者初始化管理即可使用。 3??梢浦残裕嚎缙脚_:也很容易移植到其它平臺下邊 4. 緊湊性:整個(gè)數(shù)據(jù)庫存儲在跨平臺的磁盤文件里頭 4.簡單性:SQLite的API是最簡單和最容易使用的API之一,它的API被很好的歸檔記錄,它的設(shè)計(jì)便于幫助你用多種方式定制 6:靈活性:關(guān)系數(shù)據(jù)庫前端強(qiáng)大的能力和靈活性,B-樹后臺的簡單性和緊湊性。 使用SQLIte,就省去了對大型數(shù)據(jù)庫的配制問題,沒有網(wǎng)絡(luò)和連接問題的困擾,沒有平臺限制,沒有許可費(fèi),沒有版稅費(fèi)。7:自由許可:SQLite的所有代碼都在公開的范圍之內(nèi),沒有許可的問題,核心源代碼的任何部分沒有版權(quán)聲明,代碼的每個(gè)貢獻(xiàn)者被要求簽署宣誓書,特別聲明拒絕對所貢獻(xiàn)代碼的任何版權(quán)收益。8:可靠性:SQLite源代碼不僅公開免費(fèi),它的質(zhì)量也很高,C代碼整潔、模塊化,并帶有恰當(dāng)?shù)淖⑨尅?:便利性:SQLite還有許多獨(dú)特的能帶來很大便利的特性。這些特性包括動態(tài)類型、沖突解決和連接多個(gè)數(shù)據(jù)庫到單個(gè)會話的能力。 10:. 支持TB和GB大小的字符串和大對象 11:. 常規(guī)操作比目前流行的C/S結(jié)構(gòu)的數(shù)據(jù)庫引擎要快 :12. 源碼注釋完美,測試覆蓋率達(dá)100% 13: 使用ANSI-C來開發(fā),使用了TCL綁定 14: 源碼以單文件的形式發(fā)布,便于用戶將其集成到自己的項(xiàng)目當(dāng)中 15:. 隨同發(fā)布的有一個(gè)命令行可執(zhí)行程序,用于管理SQLite數(shù)據(jù)庫。2. 適合應(yīng)用SQLite的場合1、網(wǎng)站: 作為數(shù)據(jù)庫引擎SQLite適用于中小規(guī)模流量的網(wǎng)站 2、嵌入式設(shè)備和應(yīng)用軟件 3:應(yīng)用程序文件格式 :4:替代某些特別的文件格式 :5:內(nèi)部的或臨時(shí)的數(shù)據(jù)庫 :6:命令行數(shù)據(jù)集分析工具 7:在Demo或測試版的時(shí)候作為企業(yè)級數(shù)據(jù)庫的替代品 :8:數(shù)據(jù)庫教學(xué) :9:試驗(yàn)SQL語言的擴(kuò)展3. SQLite的原子提交原理原子提交”是SQLite這種支持事務(wù)的數(shù)據(jù)庫的一個(gè)重要特性。原子提交意味著某個(gè)事務(wù)中數(shù)據(jù)庫的變化會完整完成或者根本不完成。SQLite的原子提交邏輯會使得一個(gè)事務(wù)中的變化就象同時(shí)發(fā)生的一樣。事務(wù)的原子是SQLite的重要特性,即使事務(wù)由于操作系統(tǒng)出錯或掉電發(fā)生中斷也能保持其原子性。1、硬件設(shè)定 2、單個(gè)文件提交包括:實(shí)始狀態(tài)、申請一個(gè)共享鎖、從數(shù)據(jù)庫讀取信息、申請一個(gè)Reserved Lock、生成一個(gè)回滾日志、修改用戶進(jìn)程中的數(shù)據(jù)頁、刷新回滾日志文件到存儲設(shè)備、獲得一個(gè)獨(dú)享鎖、將變更數(shù)據(jù)寫到數(shù)據(jù)庫文件、刷新變更到存儲、刷新回滾日志文件、釋放鎖、回滾 3、回滾:產(chǎn)生事件源出錯 、Hot Rollback Journals、取得數(shù)據(jù)庫的一個(gè)獨(dú)享鎖、 回滾沒有完成的變更、刪除hot日志文件、如果一切正常,沒有什么未完成的寫操作 4、多文件提交:每個(gè)數(shù)據(jù)庫文件單獨(dú)擁有日志文件、主日志文件、更新回滾日志文件頭、修改數(shù)據(jù)庫文件、刪除主日志文件、清除回滾日志5、原子操作的一些實(shí)現(xiàn)細(xì)節(jié):總是記錄整個(gè)扇區(qū)、寫日志文件時(shí)垃圾的處理、提交前緩存溢出、6、優(yōu)化:在事務(wù)間保存緩存、獨(dú)享訪問模式、不必將空閑頁寫進(jìn)日志、單頁更新及扇區(qū)原子寫、Filesystems With Safe Append Semantics、7、原子提交行為測試8:可能發(fā)生的問題:缺乏文件鎖實(shí)現(xiàn)、不完整的磁盤刷新、文件部分地刪除、寫入到文件中的垃圾、刪除掉或更名了“hot”日志文件、4. SQLite的體系結(jié)構(gòu)1SQLite體系結(jié)構(gòu)SQLite 有一種優(yōu)雅、 標(biāo)準(zhǔn)化的設(shè)計(jì)。它可以分成8個(gè)主要子系統(tǒng)5. 論述SQLite數(shù)據(jù)類型中“類型親緣性”的概念為了最大化SQLite和其它數(shù)據(jù)庫引擎之間的數(shù)據(jù)類型兼容性,SQLite提出了類型親緣性的概念。我們理解類型親緣性 ,在表字段被聲明之后,SQLite都會根據(jù)該字段聲明時(shí)的類型為其選擇一種親緣類型,當(dāng)數(shù)據(jù)插入時(shí),該字段的數(shù)據(jù)將會優(yōu)先采用親緣類型作為該值的存儲方式,除非親緣類型不匹配或無法轉(zhuǎn)換當(dāng)前數(shù)據(jù)到該親緣類型,這樣SQLite才會考慮其它更適合該值的類型存儲該值。五種親緣類型:TEXT : NUMERIC、INTEGER、REAL、NONE6. SQLite數(shù)據(jù)庫文件格式SQLite有3類數(shù)據(jù)庫。除內(nèi)存數(shù)據(jù)庫外,SQLite把每個(gè)數(shù)據(jù)庫(main或temp)都存儲到一個(gè)單獨(dú)的文件中。SQLite數(shù)據(jù)庫文件由固定大小的“頁(page)”組成,頁大小可以在數(shù)據(jù)庫剛剛創(chuàng)建時(shí)設(shè)置,一旦創(chuàng)建了數(shù)據(jù)庫對象之后,這個(gè)值就不能再改變了。SQLite在程序中對文件頁數(shù)進(jìn)行了限制,文件頁數(shù)的最大值默認(rèn)為1073741823,在sqliteLimit.h中定義,可以在運(yùn)行時(shí)改變。頁的類型可以是:Btree頁、空閑(free)頁或溢出(overflow)頁。SQLite還有兩種頁。一種稱為“鎖頁(lockingpage)”。只有1頁,位于數(shù)據(jù)庫文件偏移為1G開始的地方,如果文件不足1G,就沒有此頁,另一種稱為“指針位圖頁(數(shù)據(jù)庫中第一個(gè)頁(page1)永遠(yuǎn)是Btree頁。Page1的前100個(gè)字節(jié)是一個(gè)對數(shù)據(jù)庫文件進(jìn)行描述的“文件頭”。它包括數(shù)據(jù)庫的版本、格式的版本、頁大小、編碼等所有創(chuàng)建數(shù)據(jù)庫時(shí)設(shè)置的永久性參數(shù),在SQLite文件中,所有的整數(shù)都采用大端格式,即高位字節(jié)在前。7. 論述SQLite的加鎖和并發(fā)控制在SQLite中,鎖和并發(fā)控制機(jī)制都是由pager_module模塊負(fù)責(zé)處理的,如ACID,在含有數(shù)據(jù)修改的事物中,該模塊將確保或者所有的數(shù)據(jù)修改全部提交,或者全部回滾。與此同時(shí),該模塊還提供了一些磁盤文件的內(nèi)存Cache功能。事實(shí)上,pager_module模塊并不關(guān)心數(shù)據(jù)庫存儲的細(xì)節(jié),如B-Tree、編碼方式、索引等,它只是將其視為由統(tǒng)一大小(通常為1024字節(jié))的數(shù)據(jù)塊構(gòu)成的單一文件,其中每個(gè)塊被稱為一個(gè)頁(page)。在該模塊中頁的起始編號為1,即第一個(gè)頁的索引值是1,其后的頁編號以此類推。二、文件鎖:1). UNLOCKED:2). SHARED 3). RESERVED 4). PENDING 5). EXCLUSIVE:三、回滾日志 四、數(shù)據(jù)寫入 在SQLite3中,通過使用PENDING鎖則有效的避免了寫?zhàn)囸I情形的發(fā)生。當(dāng)某一進(jìn)程持有PENDING鎖時(shí),已經(jīng)存在的讀操作可以繼續(xù)進(jìn)行,直到其正常結(jié)束,但是新的讀操作將不會再被SQLite接受,SQLite3在實(shí)現(xiàn)上確實(shí)針對鎖和并發(fā)控制做出了一些精巧的變化,特別是對于事物這一SQL語言級別的特征。在缺省情況下,SQLite3會將所有的SQL操作置于antocommit模式下,這樣所有針對數(shù)據(jù)庫的修改操作都會在SQL命令執(zhí)行結(jié)束后被自動提交8. 介紹SQLite的預(yù)寫日志(WAL)原理與用途 WAL機(jī)制的原理是:修改并不直接寫入到數(shù)據(jù)庫文件中,而是寫入到另外一個(gè)稱為WAL的文件中;如果事務(wù)失敗,WAL中的記錄會被忽略,撤銷修改;如果事務(wù)成功,它將在隨后的某個(gè)時(shí)間被寫回到數(shù)據(jù)庫文件中,提交修改。WAL日志是數(shù)據(jù)庫中一種高效的日志算法。從數(shù)據(jù)庫原理而言,它實(shí)現(xiàn)的是redo日志模式。即修改數(shù)據(jù)庫時(shí),不直接修改數(shù)據(jù)庫內(nèi)容,而是將修改完的數(shù)據(jù)寫入日志中,并同步到磁盤上,這樣對其他讀進(jìn)程就沒有影響。如果數(shù)據(jù)庫崩潰,重啟后掃描日志文件,然后更新的數(shù)據(jù)庫中。為了提高效率,WAL日志模式提供checkpoint操作,來定時(shí)進(jìn)行數(shù)據(jù)更新操作。 文件格式的兼容性、讀和寫可以完全地并發(fā)執(zhí)行,不會互相阻塞、磁盤I/O行為更容易被預(yù)測。9. 簡述Android中數(shù)據(jù)存儲的幾種方式它的存儲方式也不外乎這幾種,按方式總體來分,也是文件,數(shù)據(jù)庫和網(wǎng)絡(luò)。但從開發(fā)者的角度來講它可以分為以下五種方式: 1、 Shared Preferences:使用鍵值對存儲私有的簡單數(shù)據(jù)。2、 Internal Storage:在設(shè)備內(nèi)部存儲器中存儲私有數(shù)據(jù)3、 External Storage:在外部存儲器上存儲公共數(shù)據(jù)4、 SQLite Database :利用數(shù)據(jù)庫存儲結(jié)構(gòu)化數(shù)據(jù)5、 Netwok Connection:通過網(wǎng)絡(luò)服務(wù)器存儲數(shù)據(jù)10. 論述SQLite的頁緩沖管理SQLite緩存替換算法是LRU(Least Recently Used,最近最少使用算法)。實(shí)現(xiàn)比較簡單,主要是由兩部分組成:hash表。hash表主要是加快對緩存中數(shù)據(jù)頁的查找速度。hash表后面是一串鏈表,保存滿足該hash函數(shù)的所有的頁。SQLite是通過頁號來進(jìn)行hash操作的,hash完找到鏈表的頭結(jié)點(diǎn),然后依次查找。LRU鏈表。LRU鏈表是通過SQLite操作hash表中的元素的來實(shí)現(xiàn)的。SQLite對hash表中頁進(jìn)行一次操作,就會將該頁放到LRU鏈表的頭部,因?yàn)樵擁撌亲罱畛S玫降?。如果緩存需要替換,則需要從LRU鏈表尾部取出,然后回寫到數(shù)據(jù)庫文件中。所以,在內(nèi)存中對頁的操作至少需要四個(gè)指針,兩個(gè)實(shí)現(xiàn)hash表的后續(xù)鏈表,兩個(gè)實(shí)現(xiàn)LRU鏈表。11. 論述SQLite的日志管理數(shù)據(jù)庫理論中,日志分三種:undo,redo,undoredo。undo日志:在修改DB文件前,將欲修改的DB內(nèi)容寫入日志redo日志:在修改DB文件前,將想做的修改動作寫入日志undoredo日志:在修改DB文件前,將DB原內(nèi)容跟想做的操作都寫入日志SQLite中,原始的日志模式就是undo日志模式。這種模式會增加很多的IO操作。想修改DB,必須先把原DB寫入日志,這就是IO,修改完DB,還需要對日志進(jìn)行IO。所以undo模式的IO操作比較多。SQLite中,另外的一種模式就是WAL機(jī)制,WAL(write ahead log)就是對redo日志機(jī)制的一種實(shí)現(xiàn)。簡單來說就是把想對數(shù)據(jù)庫進(jìn)行操作的動作先都寫到日志里面,然后對DB進(jìn)行操作,操作完后,只把日志刷新的磁盤中,而不需要把DB在內(nèi)存中的部分刷新到磁盤里面,這樣,相對與undo日志機(jī)制,redo機(jī)制就使得IO操作在系統(tǒng)的安排下進(jìn)行(比如緩沖區(qū)替換等等),而不需要立即進(jìn)行IO操作。12. 描述SQLite中B+樹的用途及結(jié)構(gòu)SQLite采用的是B+樹來存儲表中的索引和數(shù)據(jù)。B樹的鍵及其值既存儲在內(nèi)部節(jié)點(diǎn)上,也存儲在葉節(jié)點(diǎn)上,所有的葉節(jié)點(diǎn)具有相同的深度。 B+樹作了些微改變,鍵和數(shù)據(jù)會存儲到葉節(jié)點(diǎn)上,并且按照鍵值排好序。而內(nèi)部節(jié)點(diǎn)只存儲鍵值。相當(dāng)于有兩條查找路徑。 SQLite從根葉開始創(chuàng)建B+樹,一般從頁1開始。它以獨(dú)立的頁來存儲樹節(jié)點(diǎn),每頁一個(gè)節(jié)點(diǎn),這些頁要分內(nèi)部頁還是葉子頁。對于每個(gè)節(jié)點(diǎn),任何項(xiàng)(數(shù)據(jù))及其鍵值組合成一個(gè)payload, 每頁都會預(yù)設(shè)一個(gè)payload值,當(dāng)實(shí)際的payload超過此值時(shí),超出的字節(jié)就會填充到溢出頁,多余的payload會依次存儲到溢出頁形成的鏈表里。內(nèi)部頁和葉子頁都可以有溢出頁。B+樹模塊管理著所有的頁。13. 寫出三種通過SQLite語言擴(kuò)展使用SQLite的具體語言,以及在這些語言下使用SQLite數(shù)據(jù)庫的主要步驟和關(guān)鍵語句。Perl, Python, Ruby, Java, Tcl, and PHPPerl連接 為了驗(yàn)證安裝了SQLite驅(qū)動器,在Perl里使用DBI函數(shù)available_drivers():use DBI; print Drivers: . join(, , DBI-available_drivers(), n; 你用標(biāo)準(zhǔn)DBI:connect函數(shù)連接一個(gè)數(shù)據(jù)庫: use DBI; my $dbh = DBI-connect( dbi:SQLite:dbname=foods.db, , , RaiseError = 1 ); $dbh-disconnect; 第二和第三個(gè)參數(shù)對應(yīng)于驅(qū)動器名和數(shù)據(jù)庫名。第三和第四個(gè)對應(yīng)用戶名和密碼,這些對SQLite不合適。Python如提到過的,在Python 2.5和更新版本里的內(nèi)建模塊被命名為sqlite3。如果使用單獨(dú)的源pysqlite包,它是在pysqlite2里。DB API模塊設(shè)置在dbapi2里。當(dāng)你同時(shí)正想著PySQLite版本號和SQLite版本號時(shí),這個(gè)有時(shí)是混亂的。你用模塊的connect()函數(shù)連接數(shù)據(jù)庫,傳遞進(jìn)相關(guān)的名字或者你想打開的數(shù)據(jù)庫文件的完整文件路徑對于Python 2.5+中的內(nèi)建pysqlite,一個(gè)連接如下:import sqlite3 db = sqlite3.connect(foods.db) With the separately sourced package for pysqlite, your connect changes to the following: from pysqlite2 import dbapi2 as sqlite3 db = sqlite3.connect(foods.db) 一般的規(guī)則應(yīng)用:通過傳遞進(jìn)名字:memory:作為數(shù)據(jù)庫名,你能用內(nèi)存數(shù)據(jù)庫;新的數(shù)據(jù)庫為新文件創(chuàng)建;等等。你能在包括的模塊里看到唯一真正的變種,pysqlite的各個(gè)源模塊是在輸入語義。從現(xiàn)在開始,我們將認(rèn)為你愉快地轉(zhuǎn)換到這種技術(shù),該技術(shù)最好的適合了你使用pysqlite的偏愛方式。TCLSQLite擴(kuò)展位于sqlite3包,它必須用包請求指令裝載。為了連接
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45657-2025信息化教學(xué)環(huán)境視聽技術(shù)要求
- GB/T 33745-2025物聯(lián)網(wǎng)術(shù)語
- 港口與航道工程技術(shù)專業(yè)教學(xué)標(biāo)準(zhǔn)(高等職業(yè)教育專科)2025修訂
- 現(xiàn)代移動通信技術(shù)專業(yè)教學(xué)標(biāo)準(zhǔn)(高等職業(yè)教育??疲?025修訂
- 2025年中國顆粒酶行業(yè)市場全景分析及前景機(jī)遇研判報(bào)告
- 2025年中國靜電釋放安全鞋行業(yè)市場全景分析及前景機(jī)遇研判報(bào)告
- 2025年中國罐頭包裝市場運(yùn)營趨勢分析及投資潛力研究報(bào)告
- 中國橡塑密封件行業(yè)市場調(diào)查研究及投資戰(zhàn)略咨詢報(bào)告
- 2025年中國車載通信系統(tǒng)行業(yè)市場運(yùn)行現(xiàn)狀及未來發(fā)展預(yù)測報(bào)告
- 2025年中國剛性雙面板行業(yè)市場發(fā)展現(xiàn)狀及投資戰(zhàn)略咨詢報(bào)告
- 網(wǎng)絡(luò)輿情監(jiān)控管理制度
- 機(jī)器試用擔(dān)保協(xié)議書范本
- 醫(yī)學(xué)影像分析-洞察及研究
- 2025年廣東高考物理試卷真題及答案詳解(精校打印版)
- 2025年上海徐匯區(qū)高一(下)信息技術(shù)合格考試題及答案
- 2025春季學(xué)期國開電大本科《人文英語4》一平臺機(jī)考真題及答案(第二套)
- 國家開放大學(xué)《理工英語1》期末機(jī)考題庫
- 培訓(xùn)中心全套管理制度
- 江蘇省-蘇州市昆山市城北中學(xué)2024-2025學(xué)年七年級下學(xué)期期末質(zhì)量調(diào)研歷史卷(含答案)
- (2025)黨風(fēng)廉政建設(shè)知識競賽(決賽)題庫及答案
- 售后管理獎懲管理制度
評論
0/150
提交評論