Введение

Движок баз данных, разработанный Microsoft, использующий JET Red в Microsoft Access. Движок баз данных Access (также известный как Office Access Connectivity Engine или ACE, а ранее как Microsoft Jet Database Engine, Microsoft JET Engine или просто Jet) – это движок баз данных, на котором построено несколько продуктов Microsoft. Первая версия Jet была разработана в 1992 году и состояла из трех модулей для работы с базами данных. Аббревиатура JET расшифровывается как Joint Engine Technology. Microsoft Access и Visual Basic используют или использовали Jet в качестве базового движка баз данных. Однако для общего использования он был заменен сначала Microsoft Desktop Engine (MSDE), а затем SQL Server Express. Для работы с большими базами данных базы данных Jet можно модернизировать (или, как принято говорить в Microsoft, "увеличить масштаб") до флагманского продукта Microsoft – SQL Server. База данных MS Jet (Red) объемом пять миллиардов записей с включенным сжатием и шифрованием требует около одного терабайта дискового пространства и обычно состоит из сотен файлов *.mdb.

Архитектура

Jet, являясь частью реляционной системы управления базами данных (RDBMS), обеспечивает манипулирование реляционными базами данных. Он предоставляет единый интерфейс, который другое программное обеспечение может использовать для доступа к базам данных Microsoft, и поддерживает функции безопасности, референциальной целостности, обработки транзакций, индексирования, блокировки записей и страниц, а также репликации данных. В более поздних версиях движок был расширен для выполнения SQL-запросов, хранения символьных данных в формате Unicode, создания представлений базы данных и обеспечения двунаправленной репликации с Microsoft SQL Server. Jet состоит из трех модулей: Native Jet ISAM Driver – динамическая библиотека (DLL), которая позволяет напрямую работать с файлами баз данных Microsoft Access (MDB) через API файловой системы (с произвольным доступом). Другой модуль содержит ISAM Drivers – DLL, обеспечивающие доступ к различным базам данных, использующим индексированный последовательный метод доступа (ISAM), таким как xBase, Paradox, Btrieve и FoxPro, в зависимости от версии Jet. Третий модуль – DLL объектов доступа к данным (DAO). DAO предоставляет API, позволяющий программистам обращаться к базам данных JET, используя любой язык программирования.

Закрытие

Jet позволяет нескольким пользователям одновременно получать доступ к базе данных. Чтобы предотвратить повреждение или потерю целостности данных при одновременном редактировании одной и той же записи или страницы базы данных несколькими пользователями, Jet использует политику блокировки. Любой пользователь может изменять только те записи базы данных (то есть элементы данных), к которым он применил блокировку, обеспечивающую исключительный доступ к записи до ее снятия. В версиях Jet до версии 4 используется модель блокировки страниц, а в Jet 4 – модель блокировки записей. Базы данных Microsoft организованы в "страницы" данных, представляющие собой структуры данных фиксированной длины (2 КБ до Jet 4, 4 КБ в Jet 4). Данные хранятся в "записях" переменной длины, которые могут занимать одну или несколько страниц. Модель блокировки страниц блокирует целые страницы, а не отдельные записи, что менее затратно по ресурсам, но означает, что при блокировке одной записи на странице, все остальные записи на этой странице также блокируются. В результате другие пользователи не могут получить доступ к этим сопутствующим заблокированным записям, даже если они не используются и нет необходимости их блокировать. В Jet 4 модель блокировки записей устраняет сопутствующие блокировки, обеспечивая доступность каждой неиспользуемой записи. Microsoft использует два механизма блокировки: пессимистическую и оптимистическую. При пессимистической блокировке запись или страница блокируется немедленно при запросе, а при оптимистической – блокировка откладывается до сохранения измененной записи. Оптимистическая блокировка реже приводит к конфликтам, поскольку запись блокируется лишь на короткое время. Однако при оптимистической блокировке нельзя гарантировать успешное обновление, так как другой пользователь может заблокировать запись первым. При пессимистической блокировке обновление гарантировано после получения блокировки. Другим пользователям необходимо ждать снятия блокировки для внесения изменений. Конфликты блокировки, требующие ожидания пользователя или приводящие к сбою запроса (обычно после истечения времени ожидания), чаще возникают при пессимистической блокировке.

Обработка транзакций

Jet поддерживает обработку транзакций для систем баз данных, обладающих такой возможностью (системы ODBC обеспечивают транзакционную обработку одного уровня, в то время как некоторые системы ISAM, такие как Paradox, не поддерживают обработку транзакций). Транзакция – это последовательность операций, выполняемых над базой данных, которые должны быть выполнены как единое целое. Это известно как атомарность и является одним из принципов ACID (Атомарность, Согласованность, Изолированность и Долговечность), которые считаются ключевыми характеристиками обработки транзакций в системе управления базами данных. Для работы с транзакциями (до Jet 3.0) программисту требовалось вручную начинать транзакцию, выполнять необходимые операции, а затем фиксировать (сохранять) транзакцию. До момента фиксации изменения вносятся только в память и фактически не записываются на диск. Транзакции имеют ряд преимуществ по сравнению с независимыми обновлениями базы данных. Одним из основных преимуществ является возможность отмены транзакции в случае возникновения проблемы в процессе ее выполнения. Это называется откатом транзакции или просто откатом, и он восстанавливает состояние записей базы данных точно до состояния, существовавшего до начала транзакции. Транзакции также обеспечивают сохранение согласованности состояния базы данных в случае сбоя системы в середине последовательности обновлений, которые должны быть выполнены атомарно. Нет риска, что только часть обновлений будет записана в базу данных; либо все операции будут успешно завершены, либо изменения будут отменены при перезапуске системы базы данных. Благодаря политике ODBC, использующей память, транзакции позволяют выполнять множество обновлений записи полностью в памяти, с единственной дорогостоящей записью на диск в конце. Неявные транзакции были поддержаны в Jet 3.0. Это транзакции, которые начинаются автоматически после фиксации предыдущей транзакции в базе данных. В Jet неявные транзакции возникали при выполнении SQL DML-запроса. Однако было обнаружено, что это оказывает негативное влияние на производительность в 32-битных версиях Windows (Windows 95, Windows 98), поэтому в Jet 3.5 Microsoft отказалась от использования неявных транзакций при выполнении SQL DML-запросов.

Целостность данных

Jet обеспечивает целостность сущностей и референциальную целостность. По умолчанию Jet предотвращает любые изменения записи, которые нарушают референциальную целостность, но в базах данных Jet вместо этого можно использовать ограничения распространения (каскадные обновления и каскадные удаления) для поддержания референциальной целостности. Jet также поддерживает "бизнес-правила" (также известные как "ограничения") или правила, применяемые к любому столбцу для контроля допустимых данных, вносимых в таблицу или столбец. Например, можно установить правило, запрещающее ввод даты в столбец "дата регистрации", если она предшествует текущей дате и времени, или правило, требующее ввода только положительных значений в числовое поле.

Безопасность

Доступ к базам данных Jet осуществляется на уровне отдельных пользователей. Информация о пользователях хранится в отдельной системной базе данных, а доступ контролируется для каждого объекта в системе (например, для таблиц или запросов). В Jet 4 компания Microsoft реализовала функциональность, позволяющую администраторам баз данных устанавливать параметры безопасности с помощью SQL-команд CREATE, ADD, ALTER, DROP USER и DROP GROUP. Эти команды являются частью стандарта ANSI SQL 92 и также применяются к командам GRANT/REVOKE. С выпуском Jet 2 настройка безопасности также стала возможна программно через DAO.

Вопросы

Запросы — это механизмы, которые Jet использует для извлечения данных из базы данных. Они могут быть определены в Microsoft QBE (Query By Example), через окно SQL Microsoft Access или посредством языка Data Access Objects (DAO) Access Basic. Затем они преобразуются в оператор SQL SELECT. После этого запрос компилируется — это включает в себя разбор запроса (проверку синтаксиса и определение столбцов для запроса в таблице базы данных), затем преобразование во внутренний формат объекта запроса Jet, который затем токенизируется и организуется в древовидную структуру. Начиная с Jet 3.0, запросы оптимизируются с использованием технологии оптимизации запросов Microsoft Rushmore. Затем запрос выполняется, а результаты передаются обратно приложению или пользователю, запросившему данные. Jet передает данные, полученные в результате запроса, в виде dynaset. Это набор данных, динамически связанный с базой данных. В отличие от хранения результатов запроса во временной таблице, где данные нельзя напрямую обновлять, dynaset позволяет пользователю просматривать и изменять содержащиеся в нем данные. Например, если преподаватель университета запросит список всех студентов, получивших отличие за задание, и обнаружит ошибку в записи одного из них, пользователю потребуется лишь обновить данные в dynaset, что автоматически обновит запись в базе данных студента без необходимости отправлять отдельный запрос на обновление после сохранения результатов запроса во временную таблицу.

Совместимость

Microsoft предоставляет драйверы JET только для Microsoft Windows, и поддержка баз данных JET сторонним программным обеспечением почти полностью доступна только в Windows. Тем не менее, существуют проекты с открытым исходным кодом, позволяющие работать с базами данных JET на других платформах, включая Linux. Среди них, в частности, MDB Tools и его значительно расширенный Java-порт Jackcess, а также UCanAccess.