Открыть сервис

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:

Каждая новая версия 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

Сторонние приложения

ESE может использоваться разработчиками как встраиваемая база данных в собственных приложениях. Для этого Microsoft предоставляет API (esent.dll), доступный из C/C++, C#, PowerShell и других языков. Примерами сторонних приложений, использующих ESE, являются некоторые антивирусные программы, системы резервного копирования и игровые движки (например, для хранения профилей игроков).

Производительность и ограничения

ESE обеспечивает высокую производительность при операциях с малыми и средними объёмами данных (до нескольких терабайт). Максимальный размер одной базы данных в последних версиях составляет 16 ТБ. Движок оптимизирован для сценариев с интенсивной записью и частыми мелкими транзакциями, характерными для почтовых систем и каталогов.

Ограничения ESE включают:

Критика

ESE критикуется за сложность администрирования и диагностики. В случае повреждения базы данных (например, из-за сбоя диска) восстановление может потребовать специальных утилит (eseutil) и значительного времени. Также отмечается, что производительность ESE снижается при работе с очень большими объёмами данных (десятки терабайт) по сравнению с современными реляционными СУБД, такими как Microsoft SQL Server или PostgreSQL. Тем не менее, для своих целевых сценариев (Exchange, Active Directory) ESE остаётся надёжным и эффективным решением.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →