可擴展存儲引擎

可擴展存儲引擎Extensible Storage Engine,縮寫ESE)也稱JET Blue,它是微軟的一個ISAM(有索引順序訪問方法)數據存儲技術。ESE是Microsoft Exchange ServerActive DirectoryBranch Cache英語Branch CacheWindows搜索的核心組件。它也被眾多Windows組件使用,包括Windows Update客戶端和幫助和支持中心。它的目的是允許應用程序通過索引和順序訪問來存儲和檢索數據。

ESE提供事務型數據更新和恢復。它包含一種崩潰恢復機制,因此能保證系統崩潰下的數據一致性英語Data consistency。ESE中的事務高度並發的,因此ESE適合於服務器應用程序。ESE會智能緩存數據,從而確保對數據的高性能訪問。此外,ESE很輕便,適用用於輔助應用程序。

ESE運行時(ESENT.DLL)自Windows 2000起預裝在每個Windows版本中。自Windows XPWindows Server 2003的64位版本開始,ESE運行時擁有原生64位版本。Microsoft Exchange截至Exchange 2003時僅包含32位元版本。在Exchange 2007英語Exchange Server 2007中,它開始搭載64位元版本。

數據庫 編輯

數據庫既是數據的物理存在,也是它的邏輯分組。ESE數據庫看上去就只是一個Windows上的文件。在數據庫內部,它是一個2、4、8、16或32 KB的頁面的集合(16和32 KB頁面選項僅在Windows 7和Exchange 2010中可用)[1],布置在一個平衡的B樹結構中。[2]這些頁面包含元數據,用以描述數據庫中包含的數據、數據本身、數據索引,以及其他信息。這些信息在數據庫文件中混合存在,但數據會儘量集中。一個ESE數據庫可能包含最多232 個頁面,或16 TB的數據[3](如果使用8 KB的頁面)。

ESE數據庫將組織為稱作「實例」的組。大多數應用程序只使用單個實例,但所有應用程序也都可以使用多個實例。實例的重要性在於,它將單個恢復日誌系列與一個或多個數據庫相關聯。目前來說,可以隨時將最多6個用戶數據庫連接到ESE實例。使用ESE的每個單獨進程最多可能有1024個ESE實例。

ESE數據庫是可移植的,它可以從一個正在運行的ESE實例中分離,然後連接到相同或不同的運行實例。在分離時,數據庫可以使用標準的Windows工具複製。當ESE主動使用數據庫時,無法複製數據庫,因為ESE將獨占打開數據庫文件。數據庫可以物理駐留在Windows上支持直接尋址I/O操作的任何設備上。

編輯

一個表是一系列同質的記錄集合,其中每個記錄具有相同的列。每個表由其表名標識,其範圍是包含該表所分配的空間。數據庫中分配給表的磁盤空間量由使用CreateTable操作創建表時給出的參數決定。表會隨數據的創建而自動增長。

表可以有一個或多個索引。記錄數據必須至少有一個聚集索引。

記錄和列 編輯

索引 編輯

事務 編輯

光標導航和複製緩衝區 編輯

處理查詢 編輯

日誌和崩潰恢復 編輯

ESE的日誌和恢復功能支持將在系統崩潰時保證數據的完整性和一致性。日誌記錄會在日誌文件中冗餘地記錄數據庫的更新操作的過程。日誌文件的結構對於系統崩潰是非常健壯。恢復是在系統崩潰後使用此日誌將數據庫恢復到一個一致的狀態。

事務操作將在每次提交到事務級別0時記錄並將日誌刷新到磁盤。這使恢復過程能撤銷由事務級別0的事務所做的更新,以及撤消未提交到事務級別0的事務所做的更改。這種恢復方案通常被稱為「前滾/後退」恢復方案。日誌可以保留數據,直到通過下述的備份流程安全複製數據,也可以在不需要在系統崩潰從中恢復的情況下以循環方式重新使用日誌。循環記錄有助最小化日誌所耗用的磁盤空間量,但將影響在介質故障後重新找回數據的可能性。

備份和恢復 編輯

備份和恢復到不同硬件 編輯

當創建ESENT數據庫時,物理磁盤扇區的大小會存儲在數據庫中。該物理扇區大小預期在會話期間保持一致,否則將會報告一個錯誤。當將驅動器映像從一個物理驅動器克隆或恢復到另一個使用不同物理扇區大小的驅動器後,ESENT將報告錯誤。[4]

這是一項已知的問題,並且微軟已為此問題提供了相應補丁。Windows Vista或Windows Server 2008見KB2470478。[5]Windows 7或Windows Server 2008 R2見KB982018。[6]

歷史 編輯

相較JET Red 編輯

雖然兩者具有共同的血統,但JET Red與ESE有着很大區別。

  • JET Red是一種文件共享技術,而ESE旨在嵌入到服務器應用程序中,並且不共享文件。
  • JET Red盡最大努力恢復文件內容,而ESE則採用提前記錄和快照隔離來確保故障恢復。
  • JET Red在4.0版本之前僅支持頁面級鎖定,而ESE和JET Red 4.0及之後版本支持記錄級鎖定。
  • JET Red支持各種查詢接口,包括ODBCOLE DB。ESE不附帶查詢引擎,而是依賴於應用程序將自己的查詢寫為C ISAM代碼。
  • JET Red的最大數據庫文件大小為2 GiB,而ESE的最大數據庫文件大小為8 TiB(4 KiB頁面)或16 TiB(8 KiB頁面)。

參考資料 編輯

  1. ^ In this context 1 KB = 1024 B
  2. ^ Extensible Storage Engine Architecture. TechNet. [2007-06-18]. (原始內容存檔於2017-08-26). 
  3. ^ In this context 1 TB = 10244 B
  4. ^ 存档副本. [2017-04-15]. (原始內容存檔於2020-10-31). 
  5. ^ 存档副本. [2017-04-15]. (原始內容存檔於2015-02-28). 
  6. ^ 存档副本. [2017-04-15]. (原始內容存檔於2015-03-10). 

外部連結 編輯