可扩展存储引擎

可扩展存储引擎（Extensible Storage Engine，缩写ESE）也称JET Blue，它是微软的一个ISAM（有索引顺序访问方法）数据存储技术。ESE是Microsoft Exchange Server、Active Directory、和Windows搜索的核心组件。它也被众多Windows组件使用，包括Windows Update客户端和帮助和支持中心。它的目的是允许应用程序通过索引和顺序访问来存储和检索数据。

ESE提供事务型数据更新和恢复。它包含一种崩溃恢复机制，因此能保证系统崩溃下的。ESE中的事务高度并发的，因此ESE适合于服务器应用程序。ESE会智能缓存数据，从而确保对数据的高性能访问。此外，ESE很轻便，适用用于辅助应用程序。

ESE运行时（ESENT.DLL）自Windows 2000起预装在每个Windows版本中。自Windows XP和Windows Server 2003的64位版本开始，ESE运行时拥有原生64位版本。Microsoft Exchange截至Exchange 2003时仅包含32位元版本。在中，它开始搭载64位元版本。

 数据库 
数据库既是数据的物理存在，也是它的逻辑分组。ESE数据库看上去就只是一个Windows上的文件。在数据库内部，它是一个2、4、8、16或32 KB的页面的集合（16和32 KB页面选项仅在Windows 7和Exchange 2010中可用）In this context 1 KB = 1024 B，布置在一个平衡的B树结构中。这些页面包含元数据，用以描述数据库中包含的数据、数据本身、数据索引，以及其他信息。这些信息在数据库文件中混合存在，但数据会尽量集中。一个ESE数据库可能包含最多232 个页面，或16 TB的数据In this context 1 TB = 10244 B（如果使用8 KB的页面）。

ESE数据库将组织为称作“实例”的组。大多数应用程序只使用单个实例，但所有应用程序也都可以使用多个实例。实例的重要性在于，它将单个恢复日志系列与一个或多个数据库相关联。目前来说，可以随时将最多6个用户数据库连接到ESE实例。使用ESE的每个单独进程最多可能有1024个ESE实例。

ESE数据库是可移植的，它可以从一个正在运行的ESE实例中分离，然后连接到相同或不同的运行实例。在分离时，数据库可以使用标准的Windows工具复制。当ESE主动使用数据库时，无法复制数据库，因为ESE将独占打开数据库文件。数据库可以物理驻留在Windows上支持直接寻址I/O操作的任何设备上。

 表 
一个表是一系列同质的记录集合，其中每个记录具有相同的列。每个表由其表名标识，其范围是包含该表所分配的空间。数据库中分配给表的磁盘空间量由使用CreateTable操作创建表时给出的参数决定。表会随数据的创建而自动增长。

表可以有一个或多个索引。记录数据必须至少有一个聚集索引。

 记录和列 

 索引 

 事务 

 光标导航和复制缓冲区 

 处理查询 

 日志和崩溃恢复 
ESE的日志和恢复功能支持将在系统崩溃时保证数据的完整性和一致性。日志记录会在日志文件中冗余地记录数据库的更新操作的过程。日志文件的结构对于系统崩溃是非常健壮。恢复是在系统崩溃后使用此日志将数据库恢复到一个一致的状态。

事务操作将在每次提交到事务级别0时记录并将日志刷新到磁盘。这使恢复过程能撤销由事务级别0的事务所做的更新，以及撤消未提交到事务级别0的事务所做的更改。这种恢复方案通常被称为“前滚/后退”恢复方案。日志可以保留数据，直到通过下述的备份流程安全复制数据，也可以在不需要在系统崩溃从中恢复的情况下以循环方式重新使用日志。循环记录有助最小化日志所耗用的磁盘空间量，但将影响在介质故障后重新找回数据的可能性。

 备份和恢复 

 备份和恢复到不同硬件 
当创建ESENT数据库时，物理磁盘扇区的大小会存储在数据库中。该物理扇区大小预期在会话期间保持一致，否则将会报告一个错误。当将驱动器映像从一个物理驱动器克隆或恢复到另一个使用不同物理扇区大小的驱动器后，ESENT将报告错误。

这是一项已知的问题，并且微软已为此问题提供了相应补丁。Windows Vista或Windows Server 2008见KB2470478。Windows 7或Windows Server 2008 R2见KB982018。

 历史 

 相较JET Red 
虽然两者具有共同的血统，但JET Red与ESE有着很大区别。
 JET Red是一种文件共享技术，而ESE旨在嵌入到服务器应用程序中，并且不共享文件。
 JET Red尽最大努力恢复文件内容，而ESE则采用提前记录和快照隔离来确保故障恢复。
 JET Red在4.0版本之前仅支持页面级锁定，而ESE和JET Red 4.0及之后版本支持记录级锁定。
 JET Red支持各种查询接口，包括ODBC和OLE DB。ESE不附带查询引擎，而是依赖于应用程序将自己的查询写为C ISAM代码。
 JET Red的最大数据库文件大小为2 GiB，而ESE的最大数据库文件大小为8 TiB（4 KiB页面）或16 TiB（8 KiB页面）。

 参考资料 

 外部链接 
 ManagedEsent  - 一个.NET托管的互操作库
 ESENT Serialization  - 基于ManagedEsent的一个适用于.NET的对象持久化框架。
  - 用于访问可扩展存储引擎（ESE）数据库文件（EDB）格式的库和工具。
 RavenDB  - 建立在ESENT之上的NoSQL文档数据库。

Category:微軟API
Category:专有软件
Category:数据库引擎
Category:微软数据库软件