Выполнение транзакций, ориентированное на данные

Реализация прототипа


Чтобы получить возможность оценить архитектуру DORA, мы реализовали на основе менеджера хранения данных Shore-MT [14] прототип сервера OLTP DORA. Shore-MT – это модифицированный вариант менеджера хранения данных SHORE [3] с многопотоковым ядром. В SHORE поддерживаются все основные возможности современных серверов баз данных: полная изоляция транзакций, иерархические блокировки, буферный пул с алгоритмом замещения CLOCK и набором подсказок по поводу замещения и упреждающего чтения, индексы на основе B-деревьев и журнализация и восстановление в стиле ARIES [18]. Мы используем Shore-MT, потому что показано, что эта система масштабируется лучше любого другого менеджера хранения данных с открытыми исходными текстами [14].

В нашем прототипе отсутствует какой-либо оптимизатор, преобразующий обычный код транзакций в графы потоков транзакций, и в Shore-MT отсутствует какой-либо интерфейс уровня пользователей. Поэтому все транзакции являются частично встроенными. Представление метаданных базы данных и серверная обработка не зависят от конкретной схемы базы данных, но в коде транзакций такая зависимость имеется. Это соглашение аналогично подходу статически компилируемых хранимых процедур, поддерживаемому в коммерческих серверах, когда аннотированный код на языке Си преобразуется в откопилированный объект, привязанный к конкретной базе данных и вызываемый напрямую. Например, для достижения максимально возможной производительности в среде DB2 разработчикам позволяется создавать разделяемые библиотеки "внешних подпрограмм" ("external routine"), которые динамически загружаются с помощью вызова dlopen и напрямую вызываются внутри ядра сервера.

Прототип реализован в виде некоторой надстройки над Shore-MT. Исходные коды Shore-MT прямо связываются с кодами прототипа. В Shore-MT вносились минимальные изменения. Был добавлен дополнительный параметр к функциям чтения и обновления записей, а также к функциям-итераторам индексного и прямого сканирования таблиц. Этот флаг вынуждает Shore-MT не использовать управление параллелизмом. В Shore-MT уже имеется встроенная опция доступа к некоторым ресурсам без управления параллелизмом. В случае вставки и удаления записей другой флаг вынуждает Shore-MT запрашивать блокировку только уровня записи, а не всей иерархии.

Между исполнителями поддерживается строгий порядок. Потоки управления устанавливают защелки именно в этом порядке, что позволяет избежать тупиков при "защелкивании" очередей поступающих действий исполнителей.

http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp



Содержание раздела