溫馨提示×

溫馨提示×

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

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

SQLite Database System Design and Implemention Pager Module的概述是什么

發(fā)布時(shí)間:2021-10-20 09:57:23 來源:億速云 閱讀:127 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)SQLite Database System Design and Implemention  Pager Module的概述是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

通過閱讀本節(jié),你應(yīng)當(dāng)能夠解釋解釋以下問題:

1.page cache是什么?為什么需要它?誰在使用它?
2.一般的緩存管理技術(shù)
3.SQLite采用的事務(wù)處理過程以及回滾過程

本章討論了pager模塊,該模塊在原生的字節(jié)文件上實(shí)現(xiàn)了抽象的數(shù)據(jù)庫頁文件系統(tǒng),扮演著 固定大小的數(shù)據(jù)頁面的管理者,定義了從數(shù)據(jù)庫文件中獲取
這些頁面的接口。它通過提供對數(shù)據(jù)文件的內(nèi)存層面上的緩存來幫助Tree模塊加速獲取數(shù)據(jù)庫頁面,也就是說它管理著頁面緩存。它還是事務(wù)管理器,該事務(wù)實(shí)現(xiàn)了ACID特性通過并發(fā)訪問控制和失敗回滾的處理。
它使并發(fā)控制和回滾操作對Tree和其他更高的模塊完全透明。它仍舊扮演者鎖和日志管理者的角色。事實(shí)上,pager模塊實(shí)現(xiàn)了一般數(shù)據(jù)庫管理系統(tǒng)中的持久性。

除了內(nèi)存數(shù)據(jù)庫之外,數(shù)據(jù)庫都位于外部存儲(chǔ)器比如磁盤,用原始的文件存儲(chǔ)著。
SQLite不能高效的獲取以及控制數(shù)據(jù)在磁盤上。
當(dāng)SQLite需要數(shù)據(jù)的時(shí)候,它從數(shù)據(jù)庫文件中將其讀取到主存中,在內(nèi)存中控制該數(shù)據(jù),并且在有需要的時(shí)候,將該數(shù)據(jù)寫回到數(shù)據(jù)庫文件中。
一般來說,數(shù)據(jù)庫文件的總的大小比可用的內(nèi)存大小大得多。由于有限大小的的主存,僅僅一部分內(nèi)存預(yù)留給數(shù)據(jù)庫文件,這個(gè)比例對整個(gè)數(shù)據(jù)庫文件來講,很小,并且這個(gè)預(yù)留的內(nèi)存空間通常叫做數(shù)據(jù)庫緩存或者數(shù)據(jù)緩沖區(qū);在SQLite的術(shù)語中,它被稱作page cache.這個(gè)緩存位于應(yīng)用處理的地址空間,不是位于操作系統(tǒng)的空間。操作系統(tǒng)擁有自己的數(shù)據(jù)緩存。

在SQLite當(dāng)中page緩存管理器被叫做pager。

該模塊面向的是下層的以字節(jié)為單位的普通的原生文件,并且轉(zhuǎn)換他們成為可以隨機(jī)訪問的高層面上的以page為單位的文件,這些page都是固定大小的對象,都是從原生的文件系統(tǒng)中讀出。

不同層次的文件可以有不同page大小。
pager為讀取這些數(shù)據(jù)庫文件定義了獨(dú)立于文件系統(tǒng)的可以方便使用的接口。
tree模塊直接位于pager模塊的上層,從始至終都在使用pager模塊提供的接口訪問數(shù)據(jù)庫,從不直接訪問任何數(shù)據(jù)庫文件或者日志文件。tree模塊面對的數(shù)據(jù)庫文件就像一個(gè)統(tǒng)一大小的page組成的邏輯數(shù)組一樣,并且訪問這些page通過他們的下標(biāo)。

SQLite中美國也你打開的數(shù)據(jù)庫文件也可以說是數(shù)據(jù)庫鏈接都維護(hù)著一個(gè)獨(dú)立的page緩存。
當(dāng)一個(gè)應(yīng)用程序打開一個(gè)數(shù)據(jù)庫文件的時(shí)候,pager模塊就會(huì)為這個(gè)文件創(chuàng)建并且初始化一個(gè)新的page緩存
如果該程序打開相同的數(shù)據(jù)庫文件兩次或者更多的次數(shù),在默認(rèn)的處理模式中,pager創(chuàng)建并且初始化同樣多的獨(dú)立的page 緩存為這個(gè)數(shù)據(jù)庫文件。

SQLite支持一個(gè)高級特性,該特性支持所有打開同一個(gè)數(shù)據(jù)庫的鏈接共享同樣的page 緩存,該文件可能被相同的或者不同的數(shù)據(jù)庫鏈接打開了多次。
在內(nèi)存型數(shù)據(jù)庫中,沒有任何數(shù)據(jù)指向外部存儲(chǔ)區(qū),但是,他們也是同樣的通過pager來處理和保存數(shù)據(jù)。因此,tree 模塊使用同樣的接口來獲取不同類型的數(shù)據(jù)庫。

pager 是SQLite中層次最低的模塊。它是唯一的通過原生的操作系統(tǒng)提供的IO 接口訪問原生數(shù)據(jù)文件和日志文件的模塊。

他直接讀取和寫數(shù)據(jù)庫文件以及日志文件。
他不理解數(shù)據(jù)是如何在數(shù)據(jù)庫中組織存放的。他也不與數(shù)據(jù)庫中的內(nèi)容進(jìn)行交互,不會(huì)自己對數(shù)據(jù)內(nèi)容進(jìn)行修改。
他僅僅保證無論什么信息在數(shù)據(jù)庫文件中存儲(chǔ)著,都能重復(fù)的獲取不用任何轉(zhuǎn)換。
在某種意義上,pager是一個(gè)被動(dòng)的實(shí)體。
雖然它可能會(huì)修改數(shù)據(jù)庫文件的一些頭信息,比如文件的變化次數(shù)。
他將對數(shù)據(jù)庫文件的操作工作從一般的隨機(jī)訪問的字節(jié)形式的文件系統(tǒng),抽象成一個(gè)隨機(jī)訪問的頁面系統(tǒng)。
他定義了一套易于使用,獨(dú)立于文件系統(tǒng)接口的可以隨機(jī)訪問數(shù)據(jù)庫文件頁面的接口。

對每個(gè)數(shù)據(jù)庫文件來說,在數(shù)據(jù)庫文件與內(nèi)存之間移動(dòng)page是pager作為緩存管理器的基礎(chǔ)功能。
這個(gè)頁面移動(dòng)是透明的對于tree和更高層面的模塊。
pager是一個(gè)原生文件系統(tǒng)和高層次模塊之間的媒介。
他的主要目的就是使數(shù)據(jù)庫頁面在內(nèi)存中是可以尋址的,從而使這些模塊能直接訪問內(nèi)存中的頁面內(nèi)容。
他還定位了寫頁面回?cái)?shù)據(jù)庫文件的位置。
他創(chuàng)造了一個(gè)抽象的概念,數(shù)據(jù)庫文件是以數(shù)組形式的頁面存放于內(nèi)存中的,tree和pager兩個(gè)模塊通過定義良好的頁面訪問協(xié)議一起工作。

除了緩存管理工作,pager還承擔(dān)了很多其他很多的一個(gè)典型數(shù)據(jù)庫管理系統(tǒng)應(yīng)該具有的功能。
他提供了典型的事務(wù)處理系統(tǒng)的核心服務(wù):事務(wù)管理,數(shù)據(jù)管理,日志管理和鎖管理

作為一個(gè)事務(wù)管理器,他實(shí)現(xiàn)了事務(wù)的ACID特性通過管理并發(fā)空調(diào)制和回滾操作。
他并且負(fù)責(zé)了原子性的提交和事務(wù)回滾。
作為一個(gè)數(shù)據(jù)管理器,他定位讀和寫數(shù)據(jù)庫文件通過內(nèi)存中的緩存頁面,并且負(fù)責(zé)文件空間管理工作。
作為一個(gè)日志管理器,他實(shí)現(xiàn)了往日志文件中寫日志記錄。
作為一個(gè)鎖管理器,他保證了事務(wù)在獲取一個(gè)數(shù)據(jù)庫頁面之前,已經(jīng)擁有了數(shù)據(jù)庫文件上的合適的鎖。
在本質(zhì)上說,pager模塊實(shí)現(xiàn)了存儲(chǔ)的持久性和事務(wù)的原子性。

上述就是小編為大家分享的SQLite Database System Design and Implemention  Pager Module的概述是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI