Extensible Storage Engine
Extensible Storage Engine (ESE) — это встраиваемая реляционная база данных с индексно-последовательным доступом (ISAM), разработанная корпорацией Microsoft. ESE обеспечивает транзакционное хранение и извлечение данных, поддерживает блокировки на уровне записей и механизм восстановления после сбоев. Движок не предназначен для работы в роли отдельного сервера баз данных, а используется как компонент внутри приложений, где требуется надёжное и производительное хранение данных с возможностью быстрого доступа по первичному ключу.
История
Разработка ESE началась в середине 1990-х годов как часть проекта Microsoft Exchange Server. Первоначально движок назывался Joint Engine Technology (JET) Blue, в отличие от более ранней версии JET Red, использовавшейся в Microsoft Access. ESE был создан для обеспечения высокой производительности и устойчивости к сбоям, необходимых для корпоративных почтовых систем.
Первая версия ESE (ESE97) была выпущена вместе с Exchange Server 5.5 в 1997 году. В последующих версиях Exchange Server (2000, 2003, 2007, 2010, 2013, 2016, 2019) движок постоянно совершенствовался: увеличивался максимальный размер базы данных, улучшались алгоритмы кэширования и сжатия, добавлялась поддержка новых типов индексов.
Помимо Exchange Server, ESE стал основой для Active Directory (начиная с Windows 2000), службы сертификации Active Directory Certificate Services, файловой системы Windows Desktop Search, а также ряда других компонентов Windows. В Windows 10 и Windows 11 ESE используется, например, в системном реестре (для хранения данных некоторых ветвей), в службе Windows Update и в приложении «Почта».
Архитектура
Типы записей и страниц
ESE оперирует страницами фиксированного размера (обычно 4 КБ, 8 КБ или 16 КБ, настраивается при создании базы). Данные хранятся в виде записей, которые могут быть переменной длины. Каждая запись имеет уникальный идентификатор (ключ), по которому осуществляется прямой доступ. Поддерживаются как кластеризованные (основные) индексы, так и некластеризованные (вторичные) индексы.
Транзакции и восстановление
ESE поддерживает транзакции с полной поддержкой ACID (атомарность, согласованность, изолированность, долговечность). Транзакции могут быть явными (с использованием BeginTransaction/Commit/Rollback) или неявными (автоматически создаваемыми движком). Для обеспечения долговечности используется журнал транзакций (transaction log), в который записываются все изменения до их применения к основной базе данных. В случае сбоя (например, отключения питания) при следующем запуске ESE автоматически восстанавливает базу данных до согласованного состояния, применяя или откатывая незавершённые транзакции.
Кэширование
ESE использует буферный кэш (buffer cache) для хранения часто запрашиваемых страниц данных в оперативной памяти. Размер кэша динамически регулируется в зависимости от доступной памяти и нагрузки. При недостатке памяти старые страницы вытесняются из кэша по алгоритму LRU (Least Recently Used). Кэширование существенно повышает производительность операций чтения и записи.
Блокировки
Движок поддерживает блокировки на уровне записей (row-level locking), что позволяет нескольким процессам одновременно читать и изменять разные записи в одной таблице. Блокировки бывают разделяемыми (shared) для чтения и исключительными (exclusive) для записи. ESE автоматически управляет блокировками, предотвращая взаимные блокировки (deadlocks) путём обнаружения и разрешения конфликтов.
Версии и совместимость
Основные версии ESE:
- ESE97 — первая версия, использовалась в Exchange Server 5.5.
- ESE98 — улучшенная версия, применялась в Exchange 2000/2003 и Active Directory.
- ESE 5.1 — версия, поставляемая с Windows Server 2008 и более поздними ОС. Поддерживает базы данных размером до 16 ТБ.
- ESE 6.0 — версия для Windows Server 2012 и Windows 8. Включает поддержку сжатия данных и улучшенное управление памятью.
- ESE 7.0 — версия для Windows Server 2016 и Windows 10. Добавлена поддержка сквозного шифрования (Transparent Data Encryption, TDE) и улучшена производительность при работе с большими объёмами данных.
Каждая новая версия ESE обратно совместима с форматами баз данных предыдущих версий, но не все функции доступны в старых форматах.
Применение
Microsoft Exchange Server
ESE является основным движком хранения для всех версий Exchange Server, начиная с 5.5. В Exchange базы данных ESE хранят почтовые ящики пользователей, общие папки, календари, контакты и другие элементы. Производительность и надёжность ESE критически важны для работы корпоративной почтовой системы.
Active Directory
Начиная с Windows 2000, служба каталогов Active Directory использует ESE для хранения данных об объектах (пользователи, компьютеры, группы, политики). База данных Active Directory (ntds.dit) представляет собой файл ESE. Движок обеспечивает быстрый поиск по атрибутам объектов и поддержку репликации между контроллерами домена.
Другие компоненты Windows
- Служба сертификации Active Directory Certificate Services — использует ESE для хранения сертификатов и ключей.
- Windows Desktop Search — индексирует файлы и хранит метаданные в базе ESE.
- Windows Update — хранит информацию об обновлениях и состоянии системы.
- Приложение «Почта» в Windows 10/11 — использует ESE для хранения писем и настроек учётных записей.
Сторонние приложения
ESE может использоваться разработчиками как встраиваемая база данных в собственных приложениях. Для этого Microsoft предоставляет API (esent.dll), доступный из C/C++, C#, PowerShell и других языков. Примерами сторонних приложений, использующих ESE, являются некоторые антивирусные программы, системы резервного копирования и игровые движки (например, для хранения профилей игроков).
Производительность и ограничения
ESE обеспечивает высокую производительность при операциях с малыми и средними объёмами данных (до нескольких терабайт). Максимальный размер одной базы данных в последних версиях составляет 16 ТБ. Движок оптимизирован для сценариев с интенсивной записью и частыми мелкими транзакциями, характерными для почтовых систем и каталогов.
Ограничения ESE включают:
- Отсутствие поддержки SQL-запросов (доступ только через API).
- Ограниченные возможности для сложных запросов с множественными соединениями таблиц.
- Отсутствие полнотекстового поиска (реализуется на уровне приложения).
- Не поддерживает распределённые транзакции (XA-протокол).
Критика
ESE критикуется за сложность администрирования и диагностики. В случае повреждения базы данных (например, из-за сбоя диска) восстановление может потребовать специальных утилит (eseutil) и значительного времени. Также отмечается, что производительность ESE снижается при работе с очень большими объёмами данных (десятки терабайт) по сравнению с современными реляционными СУБД, такими как Microsoft SQL Server или PostgreSQL. Тем не менее, для своих целевых сценариев (Exchange, Active Directory) ESE остаётся надёжным и эффективным решением.
Источники
- Microsoft Docs: Extensible Storage Engine (ESE) Overview
- Inside Microsoft Exchange Server 2007 / Tony Redmond — Elsevier, 2007
- Windows Internals, Part 1 / Mark Russinovich, David Solomon, Alex Ionescu — Microsoft Press, 2012
- Техническая документация Microsoft по Active Directory и Exchange Server
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →