




全文預覽已結(jié)束
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1. SQLite的特性1. SQLite支持事務,滿足(ACID)特性:即使在系統(tǒng)crash掉或者掉電的情況下,一樣可以恢復。2. 零配置,不需要安裝或者初始化管理即可使用。 3??梢浦残裕嚎缙脚_:也很容易移植到其它平臺下邊 4. 緊湊性:整個數(shù)據(jù)庫存儲在跨平臺的磁盤文件里頭 4.簡單性:SQLite的API是最簡單和最容易使用的API之一,它的API被很好的歸檔記錄,它的設計便于幫助你用多種方式定制 6:靈活性:關系數(shù)據(jù)庫前端強大的能力和靈活性,B-樹后臺的簡單性和緊湊性。 使用SQLIte,就省去了對大型數(shù)據(jù)庫的配制問題,沒有網(wǎng)絡和連接問題的困擾,沒有平臺限制,沒有許可費,沒有版稅費。7:自由許可:SQLite的所有代碼都在公開的范圍之內(nèi),沒有許可的問題,核心源代碼的任何部分沒有版權聲明,代碼的每個貢獻者被要求簽署宣誓書,特別聲明拒絕對所貢獻代碼的任何版權收益。8:可靠性:SQLite源代碼不僅公開免費,它的質(zhì)量也很高,C代碼整潔、模塊化,并帶有恰當?shù)淖⑨尅?:便利性:SQLite還有許多獨特的能帶來很大便利的特性。這些特性包括動態(tài)類型、沖突解決和連接多個數(shù)據(jù)庫到單個會話的能力。 10:. 支持TB和GB大小的字符串和大對象 11:. 常規(guī)操作比目前流行的C/S結(jié)構的數(shù)據(jù)庫引擎要快 :12. 源碼注釋完美,測試覆蓋率達100% 13: 使用ANSI-C來開發(fā),使用了TCL綁定 14: 源碼以單文件的形式發(fā)布,便于用戶將其集成到自己的項目當中 15:. 隨同發(fā)布的有一個命令行可執(zhí)行程序,用于管理SQLite數(shù)據(jù)庫。2. 適合應用SQLite的場合1、網(wǎng)站: 作為數(shù)據(jù)庫引擎SQLite適用于中小規(guī)模流量的網(wǎng)站 2、嵌入式設備和應用軟件 3:應用程序文件格式 :4:替代某些特別的文件格式 :5:內(nèi)部的或臨時的數(shù)據(jù)庫 :6:命令行數(shù)據(jù)集分析工具 7:在Demo或測試版的時候作為企業(yè)級數(shù)據(jù)庫的替代品 :8:數(shù)據(jù)庫教學 :9:試驗SQL語言的擴展3. SQLite的原子提交原理原子提交”是SQLite這種支持事務的數(shù)據(jù)庫的一個重要特性。原子提交意味著某個事務中數(shù)據(jù)庫的變化會完整完成或者根本不完成。SQLite的原子提交邏輯會使得一個事務中的變化就象同時發(fā)生的一樣。事務的原子是SQLite的重要特性,即使事務由于操作系統(tǒng)出錯或掉電發(fā)生中斷也能保持其原子性。1、硬件設定 2、單個文件提交包括:實始狀態(tài)、申請一個共享鎖、從數(shù)據(jù)庫讀取信息、申請一個Reserved Lock、生成一個回滾日志、修改用戶進程中的數(shù)據(jù)頁、刷新回滾日志文件到存儲設備、獲得一個獨享鎖、將變更數(shù)據(jù)寫到數(shù)據(jù)庫文件、刷新變更到存儲、刷新回滾日志文件、釋放鎖、回滾 3、回滾:產(chǎn)生事件源出錯 、Hot Rollback Journals、取得數(shù)據(jù)庫的一個獨享鎖、 回滾沒有完成的變更、刪除hot日志文件、如果一切正常,沒有什么未完成的寫操作 4、多文件提交:每個數(shù)據(jù)庫文件單獨擁有日志文件、主日志文件、更新回滾日志文件頭、修改數(shù)據(jù)庫文件、刪除主日志文件、清除回滾日志5、原子操作的一些實現(xiàn)細節(jié):總是記錄整個扇區(qū)、寫日志文件時垃圾的處理、提交前緩存溢出、6、優(yōu)化:在事務間保存緩存、獨享訪問模式、不必將空閑頁寫進日志、單頁更新及扇區(qū)原子寫、Filesystems With Safe Append Semantics、7、原子提交行為測試8:可能發(fā)生的問題:缺乏文件鎖實現(xiàn)、不完整的磁盤刷新、文件部分地刪除、寫入到文件中的垃圾、刪除掉或更名了“hot”日志文件、4. SQLite的體系結(jié)構1SQLite體系結(jié)構SQLite 有一種優(yōu)雅、 標準化的設計。它可以分成8個主要子系統(tǒng)5. 論述SQLite數(shù)據(jù)類型中“類型親緣性”的概念為了最大化SQLite和其它數(shù)據(jù)庫引擎之間的數(shù)據(jù)類型兼容性,SQLite提出了類型親緣性的概念。我們理解類型親緣性 ,在表字段被聲明之后,SQLite都會根據(jù)該字段聲明時的類型為其選擇一種親緣類型,當數(shù)據(jù)插入時,該字段的數(shù)據(jù)將會優(yōu)先采用親緣類型作為該值的存儲方式,除非親緣類型不匹配或無法轉(zhuǎn)換當前數(shù)據(jù)到該親緣類型,這樣SQLite才會考慮其它更適合該值的類型存儲該值。五種親緣類型:TEXT : NUMERIC、INTEGER、REAL、NONE6. SQLite數(shù)據(jù)庫文件格式SQLite有3類數(shù)據(jù)庫。除內(nèi)存數(shù)據(jù)庫外,SQLite把每個數(shù)據(jù)庫(main或temp)都存儲到一個單獨的文件中。SQLite數(shù)據(jù)庫文件由固定大小的“頁(page)”組成,頁大小可以在數(shù)據(jù)庫剛剛創(chuàng)建時設置,一旦創(chuàng)建了數(shù)據(jù)庫對象之后,這個值就不能再改變了。SQLite在程序中對文件頁數(shù)進行了限制,文件頁數(shù)的最大值默認為1073741823,在sqliteLimit.h中定義,可以在運行時改變。頁的類型可以是:Btree頁、空閑(free)頁或溢出(overflow)頁。SQLite還有兩種頁。一種稱為“鎖頁(lockingpage)”。只有1頁,位于數(shù)據(jù)庫文件偏移為1G開始的地方,如果文件不足1G,就沒有此頁,另一種稱為“指針位圖頁(數(shù)據(jù)庫中第一個頁(page1)永遠是Btree頁。Page1的前100個字節(jié)是一個對數(shù)據(jù)庫文件進行描述的“文件頭”。它包括數(shù)據(jù)庫的版本、格式的版本、頁大小、編碼等所有創(chuàng)建數(shù)據(jù)庫時設置的永久性參數(shù),在SQLite文件中,所有的整數(shù)都采用大端格式,即高位字節(jié)在前。7. 論述SQLite的加鎖和并發(fā)控制在SQLite中,鎖和并發(fā)控制機制都是由pager_module模塊負責處理的,如ACID,在含有數(shù)據(jù)修改的事物中,該模塊將確?;蛘咚械臄?shù)據(jù)修改全部提交,或者全部回滾。與此同時,該模塊還提供了一些磁盤文件的內(nèi)存Cache功能。事實上,pager_module模塊并不關心數(shù)據(jù)庫存儲的細節(jié),如B-Tree、編碼方式、索引等,它只是將其視為由統(tǒng)一大小(通常為1024字節(jié))的數(shù)據(jù)塊構成的單一文件,其中每個塊被稱為一個頁(page)。在該模塊中頁的起始編號為1,即第一個頁的索引值是1,其后的頁編號以此類推。二、文件鎖:1). UNLOCKED:2). SHARED 3). RESERVED 4). PENDING 5). EXCLUSIVE:三、回滾日志 四、數(shù)據(jù)寫入 在SQLite3中,通過使用PENDING鎖則有效的避免了寫?zhàn)囸I情形的發(fā)生。當某一進程持有PENDING鎖時,已經(jīng)存在的讀操作可以繼續(xù)進行,直到其正常結(jié)束,但是新的讀操作將不會再被SQLite接受,SQLite3在實現(xiàn)上確實針對鎖和并發(fā)控制做出了一些精巧的變化,特別是對于事物這一SQL語言級別的特征。在缺省情況下,SQLite3會將所有的SQL操作置于antocommit模式下,這樣所有針對數(shù)據(jù)庫的修改操作都會在SQL命令執(zhí)行結(jié)束后被自動提交8. 介紹SQLite的預寫日志(WAL)原理與用途 WAL機制的原理是:修改并不直接寫入到數(shù)據(jù)庫文件中,而是寫入到另外一個稱為WAL的文件中;如果事務失敗,WAL中的記錄會被忽略,撤銷修改;如果事務成功,它將在隨后的某個時間被寫回到數(shù)據(jù)庫文件中,提交修改。WAL日志是數(shù)據(jù)庫中一種高效的日志算法。從數(shù)據(jù)庫原理而言,它實現(xiàn)的是redo日志模式。即修改數(shù)據(jù)庫時,不直接修改數(shù)據(jù)庫內(nèi)容,而是將修改完的數(shù)據(jù)寫入日志中,并同步到磁盤上,這樣對其他讀進程就沒有影響。如果數(shù)據(jù)庫崩潰,重啟后掃描日志文件,然后更新的數(shù)據(jù)庫中。為了提高效率,WAL日志模式提供checkpoint操作,來定時進行數(shù)據(jù)更新操作。 文件格式的兼容性、讀和寫可以完全地并發(fā)執(zhí)行,不會互相阻塞、磁盤I/O行為更容易被預測。9. 簡述Android中數(shù)據(jù)存儲的幾種方式它的存儲方式也不外乎這幾種,按方式總體來分,也是文件,數(shù)據(jù)庫和網(wǎng)絡。但從開發(fā)者的角度來講它可以分為以下五種方式: 1、 Shared Preferences:使用鍵值對存儲私有的簡單數(shù)據(jù)。2、 Internal Storage:在設備內(nèi)部存儲器中存儲私有數(shù)據(jù)3、 External Storage:在外部存儲器上存儲公共數(shù)據(jù)4、 SQLite Database :利用數(shù)據(jù)庫存儲結(jié)構化數(shù)據(jù)5、 Netwok Connection:通過網(wǎng)絡服務器存儲數(shù)據(jù)10. 論述SQLite的頁緩沖管理SQLite緩存替換算法是LRU(Least Recently Used,最近最少使用算法)。實現(xiàn)比較簡單,主要是由兩部分組成:hash表。hash表主要是加快對緩存中數(shù)據(jù)頁的查找速度。hash表后面是一串鏈表,保存滿足該hash函數(shù)的所有的頁。SQLite是通過頁號來進行hash操作的,hash完找到鏈表的頭結(jié)點,然后依次查找。LRU鏈表。LRU鏈表是通過SQLite操作hash表中的元素的來實現(xiàn)的。SQLite對hash表中頁進行一次操作,就會將該頁放到LRU鏈表的頭部,因為該頁是最近最常用到的。如果緩存需要替換,則需要從LRU鏈表尾部取出,然后回寫到數(shù)據(jù)庫文件中。所以,在內(nèi)存中對頁的操作至少需要四個指針,兩個實現(xiàn)hash表的后續(xù)鏈表,兩個實現(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,還需要對日志進行IO。所以undo模式的IO操作比較多。SQLite中,另外的一種模式就是WAL機制,WAL(write ahead log)就是對redo日志機制的一種實現(xiàn)。簡單來說就是把想對數(shù)據(jù)庫進行操作的動作先都寫到日志里面,然后對DB進行操作,操作完后,只把日志刷新的磁盤中,而不需要把DB在內(nèi)存中的部分刷新到磁盤里面,這樣,相對與undo日志機制,redo機制就使得IO操作在系統(tǒng)的安排下進行(比如緩沖區(qū)替換等等),而不需要立即進行IO操作。12. 描述SQLite中B+樹的用途及結(jié)構SQLite采用的是B+樹來存儲表中的索引和數(shù)據(jù)。B樹的鍵及其值既存儲在內(nèi)部節(jié)點上,也存儲在葉節(jié)點上,所有的葉節(jié)點具有相同的深度。 B+樹作了些微改變,鍵和數(shù)據(jù)會存儲到葉節(jié)點上,并且按照鍵值排好序。而內(nèi)部節(jié)點只存儲鍵值。相當于有兩條查找路徑。 SQLite從根葉開始創(chuàng)建B+樹,一般從頁1開始。它以獨立的頁來存儲樹節(jié)點,每頁一個節(jié)點,這些頁要分內(nèi)部頁還是葉子頁。對于每個節(jié)點,任何項(數(shù)據(jù))及其鍵值組合成一個payload, 每頁都會預設一個payload值,當實際的payload超過此值時,超出的字節(jié)就會填充到溢出頁,多余的payload會依次存儲到溢出頁形成的鏈表里。內(nèi)部頁和葉子頁都可以有溢出頁。B+樹模塊管理著所有的頁。13. 寫出三種通過SQLite語言擴展使用SQLite的具體語言,以及在這些語言下使用SQLite數(shù)據(jù)庫的主要步驟和關鍵語句。Perl, Python, Ruby, Java, Tcl, and PHPPerl連接 為了驗證安裝了SQLite驅(qū)動器,在Perl里使用DBI函數(shù)available_drivers():use DBI; print Drivers: . join(, , DBI-available_drivers(), n; 你用標準DBI:connect函數(shù)連接一個數(shù)據(jù)庫: use DBI; my $dbh = DBI-connect( dbi:SQLite:dbname=foods.db, , , RaiseError = 1 ); $dbh-disconnect; 第二和第三個參數(shù)對應于驅(qū)動器名和數(shù)據(jù)庫名。第三和第四個對應用戶名和密碼,這些對SQLite不合適。Python如提到過的,在Python 2.5和更新版本里的內(nèi)建模塊被命名為sqlite3。如果使用單獨的源pysqlite包,它是在pysqlite2里。DB API模塊設置在dbapi2里。當你同時正想著PySQLite版本號和SQLite版本號時,這個有時是混亂的。你用模塊的connect()函數(shù)連接數(shù)據(jù)庫,傳遞進相關的名字或者你想打開的數(shù)據(jù)庫文件的完整文件路徑對于Python 2.5+中的內(nèi)建pysqlite,一個連接如下: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ī)則應用:通過傳遞進名字:memory:作為數(shù)據(jù)庫名,你能用內(nèi)存數(shù)據(jù)庫;新的數(shù)據(jù)庫為新文件創(chuàng)建;等等。你能在包括的模塊里看到唯一真正的變種,pysqlite的各個源模塊是在輸入語義。從現(xiàn)在開始,我們將認為你愉快地轉(zhuǎn)換到這種技術,該技術最好的適合了你使用pysqlite的偏愛方式。TCLSQLite擴展位于sqlite3包,它必須用包請求指令裝載。為了連接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 晉城職業(yè)技術學院《論文寫作與學術道德規(guī)范》2023-2024學年第一學期期末試卷
- 首都醫(yī)科大學《第二外語牙語》2023-2024學年第一學期期末試卷
- 四川美術學院《基礎分子生物學實驗》2023-2024學年第一學期期末試卷
- 河北交通職業(yè)技術學院《航海英語專題》2023-2024學年第一學期期末試卷
- 黔東南民族職業(yè)技術學院《針灸推拿學》2023-2024學年第一學期期末試卷
- 商丘學院《中國思想文化史》2023-2024學年第一學期期末試卷
- 遼寧石油化工大學《傳熱學(含實驗)》2023-2024學年第一學期期末試卷
- 湖南現(xiàn)代物流職業(yè)技術學院《生物技術制藥》2023-2024學年第一學期期末試卷
- 廣州美術學院《三維數(shù)字建模》2023-2024學年第一學期期末試卷
- 中國礦業(yè)大學(北京)《體操Ⅰ》2023-2024學年第一學期期末試卷
- 2025年上海徐匯區(qū)高一(下)信息技術合格考試題及答案
- 國家開放大學《理工英語1》期末機考題庫
- JJG 693-2011可燃氣體檢測報警器
- POCT血糖儀項目培訓記錄表、資質(zhì)授權申請表
- 鄉(xiāng)村治理-課件
- 增材制造技術發(fā)展課件
- 少兒財商的培養(yǎng)(課堂)課件
- 暨南大學《馬克思主義基本原理概論》題庫歷年期末考試真題分類匯編及答案
- 青霉素的發(fā)現(xiàn)與作用課件
- 2018年專利代理師資格考試科目三-專利代理實務真題及解析
- 施工進度計劃網(wǎng)絡圖、橫道圖
評論
0/150
提交評論