可延伸儲存引擎

可延伸儲存引擎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). 

外部連結 編輯