標籤:style color 使用 sp 檔案 資料 bs 管理 as
1 頁面管理器:是訪問本機資料庫和日誌的唯一模組(通過作業系統API)。它把隨機訪問系統或面向位元組的檔案系統抽象成資料庫檔案(基於頁的隨機訪問系統)。它定義了一套與檔案系統無關的介面來訪問資料庫檔案。B樹使用頁面管理模組的介面訪問資料庫,而非直接存取資料庫或記錄檔。B樹把資料庫檔案視為大小均勻的邏輯隊列。除記憶體資料庫外,一般的資料庫都是把資料庫檔案存在於磁碟上,用的時候讀入記憶體,操作之,有需要的話再寫回記憶體。一般情況下,資料庫檔案會比較大。有因為記憶體有限,所以在記憶體中只保持一小快的資料庫檔案,這塊記憶體叫做database cache或data buffer,在SQLite中叫做page cache。
對於每一個資料庫檔案,在檔案和緩衝之間移動頁面是頁面管理器的準系統。移動頁面對B+樹和其他高層模組是透明的。頁面管理器是檔案系統與這些高層模組的中間人,是的這些模組可以直接存取頁面內容,也負責把頁寫回資料庫檔案。他建立其了一個抽象,資料庫就是主存中的頁的隊列。頁面管理器也提供了其他功能:交易管理(實現ACID,並發的控制和恢複,原子的提交和復原),資料管理(協調資料庫檔案到緩衝區的頁的讀寫,檔案空間管理),日誌管理(向記錄檔寫入記錄),鎖管理(確保事務在訪問檔案之前已經獲得對資料庫檔案的相應的鎖)。總之,頁面管理實現了儲存的持久性和事務的原子性。
上層模組完全從低層級的鎖和日誌管理機制絕緣,他們不知道鎖和日誌的活動。B+樹只看到每個事務的層級,不管具體實現。頁管理器把一個事務拆分成鎖操作,日誌操作,對資料庫檔案的讀寫操作。B+樹以頁號請求一個頁,頁管理器返回一個指向已載入到緩衝區的頁的內容的指標。在對頁改動時,B+樹模組通知頁管理器在記錄檔裡儲存相應的資訊以應對可能的恢複,並且要獲得對相應資料庫檔案的鎖。B+樹在用完一個頁時通知頁管理器,如果頁面被更改,則寫迴文件。
2 頁面管理器介面結構:實現了名為Pager的資料結構,每個開啟的資料庫檔案對應著唯一一個Pager對象,資料庫檔案和Pager對象幾乎等價。B+樹想用一個資料庫檔案時,就建立一個Pager對象,使用對象的控制代碼對檔案進行操作。頁模組用控制代碼跟蹤關於檔案的鎖,記錄檔,資料庫的狀態,日誌狀態等。
3 緩衝管理:SQLitre為每個開啟的資料庫檔案維護一個單獨的頁緩衝區。如果一個線程兩次或多次開啟相同的檔案,頁管理器只會對第一個開啟調用建立單獨的頁緩衝區。記憶體資料庫記憶體資料庫不設計任何外部裝置,但是他們也被像本地檔案一樣對待,全部都在緩衝中。因此,B/B+樹用相同的介面來訪問資料庫。
頁緩衝區位於應用程式的記憶體空間。相同的頁也可能被作業系統所緩衝。當應用程式要讀任意檔案的內容時,作業系統先用自己緩衝的備份,再用應用程式的緩衝備份。SQLite的頁緩衝和區的組織和管理是獨立於作業系統的。頁面緩衝的管理是系統效能的關鍵。
3.1 緩衝區組織:為了加快搜尋緩衝速度,記憶體中快取項目都會有比較好的組織。SQLite用雜湊組織快取頁面,用頁槽儲存表中的頁。緩衝區是全相連的,即任何槽可以儲存任何頁面。雜湊表最初是空的,頁面管理器建立了新的槽並把其插入雜湊表中。一個緩衝區能儲存的槽有個最大值,而記憶體資料庫中無限制(只要作業系統允許應用程式的使用者空間增長)。
雜湊表中的每一頁都有一個PgHder類型的對象,接著是page image,接著是一些私人資料(B+樹用來儲存頁面具體控制資訊)。記憶體資料庫沒有記錄檔,所以他們的恢複資訊被記錄在記憶體對象中。指向這些對象的指標指向這些對象的指標在私人內容之後,這些指標被頁管理其使用。當頁管理器把頁調入緩衝區時,被初始化為零。在緩衝區的所有的頁面都可以通過雜湊表訪問,
SQLite頁面管理