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模塊實現了存儲的持久性和事務的原子性。

相關文章
相關標籤/搜索