您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關SQLite Database System Design and Implemention Pager Module的概述是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
通過閱讀本節,你應當能夠解釋解釋以下問題:
1.page cache是什么?為什么需要它?誰在使用它?
2.一般的緩存管理技術
3.SQLite采用的事務處理過程以及回滾過程
本章討論了pager模塊,該模塊在原生的字節文件上實現了抽象的數據庫頁文件系統,扮演著 固定大小的數據頁面的管理者,定義了從數據庫文件中獲取
這些頁面的接口。它通過提供對數據文件的內存層面上的緩存來幫助Tree模塊加速獲取數據庫頁面,也就是說它管理著頁面緩存。它還是事務管理器,該事務實現了ACID特性通過并發訪問控制和失敗回滾的處理。
它使并發控制和回滾操作對Tree和其他更高的模塊完全透明。它仍舊扮演者鎖和日志管理者的角色。事實上,pager模塊實現了一般數據庫管理系統中的持久性。
除了內存數據庫之外,數據庫都位于外部存儲器比如磁盤,用原始的文件存儲著。
SQLite不能高效的獲取以及控制數據在磁盤上。
當SQLite需要數據的時候,它從數據庫文件中將其讀取到主存中,在內存中控制該數據,并且在有需要的時候,將該數據寫回到數據庫文件中。
一般來說,數據庫文件的總的大小比可用的內存大小大得多。由于有限大小的的主存,僅僅一部分內存預留給數據庫文件,這個比例對整個數據庫文件來講,很小,并且這個預留的內存空間通常叫做數據庫緩存或者數據緩沖區;在SQLite的術語中,它被稱作page cache.這個緩存位于應用處理的地址空間,不是位于操作系統的空間。操作系統擁有自己的數據緩存。
在SQLite當中page緩存管理器被叫做pager。
該模塊面向的是下層的以字節為單位的普通的原生文件,并且轉換他們成為可以隨機訪問的高層面上的以page為單位的文件,這些page都是固定大小的對象,都是從原生的文件系統中讀出。
不同層次的文件可以有不同page大小。
pager為讀取這些數據庫文件定義了獨立于文件系統的可以方便使用的接口。
tree模塊直接位于pager模塊的上層,從始至終都在使用pager模塊提供的接口訪問數據庫,從不直接訪問任何數據庫文件或者日志文件。tree模塊面對的數據庫文件就像一個統一大小的page組成的邏輯數組一樣,并且訪問這些page通過他們的下標。
SQLite中美國也你打開的數據庫文件也可以說是數據庫鏈接都維護著一個獨立的page緩存。
當一個應用程序打開一個數據庫文件的時候,pager模塊就會為這個文件創建并且初始化一個新的page緩存
如果該程序打開相同的數據庫文件兩次或者更多的次數,在默認的處理模式中,pager創建并且初始化同樣多的獨立的page 緩存為這個數據庫文件。
SQLite支持一個高級特性,該特性支持所有打開同一個數據庫的鏈接共享同樣的page 緩存,該文件可能被相同的或者不同的數據庫鏈接打開了多次。
在內存型數據庫中,沒有任何數據指向外部存儲區,但是,他們也是同樣的通過pager來處理和保存數據。因此,tree 模塊使用同樣的接口來獲取不同類型的數據庫。
pager 是SQLite中層次最低的模塊。它是唯一的通過原生的操作系統提供的IO 接口訪問原生數據文件和日志文件的模塊。
他直接讀取和寫數據庫文件以及日志文件。
他不理解數據是如何在數據庫中組織存放的。他也不與數據庫中的內容進行交互,不會自己對數據內容進行修改。
他僅僅保證無論什么信息在數據庫文件中存儲著,都能重復的獲取不用任何轉換。
在某種意義上,pager是一個被動的實體。
雖然它可能會修改數據庫文件的一些頭信息,比如文件的變化次數。
他將對數據庫文件的操作工作從一般的隨機訪問的字節形式的文件系統,抽象成一個隨機訪問的頁面系統。
他定義了一套易于使用,獨立于文件系統接口的可以隨機訪問數據庫文件頁面的接口。
對每個數據庫文件來說,在數據庫文件與內存之間移動page是pager作為緩存管理器的基礎功能。
這個頁面移動是透明的對于tree和更高層面的模塊。
pager是一個原生文件系統和高層次模塊之間的媒介。
他的主要目的就是使數據庫頁面在內存中是可以尋址的,從而使這些模塊能直接訪問內存中的頁面內容。
他還定位了寫頁面回數據庫文件的位置。
他創造了一個抽象的概念,數據庫文件是以數組形式的頁面存放于內存中的,tree和pager兩個模塊通過定義良好的頁面訪問協議一起工作。
除了緩存管理工作,pager還承擔了很多其他很多的一個典型數據庫管理系統應該具有的功能。
他提供了典型的事務處理系統的核心服務:事務管理,數據管理,日志管理和鎖管理
作為一個事務管理器,他實現了事務的ACID特性通過管理并發空調制和回滾操作。
他并且負責了原子性的提交和事務回滾。
作為一個數據管理器,他定位讀和寫數據庫文件通過內存中的緩存頁面,并且負責文件空間管理工作。
作為一個日志管理器,他實現了往日志文件中寫日志記錄。
作為一個鎖管理器,他保證了事務在獲取一個數據庫頁面之前,已經擁有了數據庫文件上的合適的鎖。
在本質上說,pager模塊實現了存儲的持久性和事務的原子性。
上述就是小編為大家分享的SQLite Database System Design and Implemention Pager Module的概述是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。