(Продолжение. Начало в №7-9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 27, 28)
В этой статье мы публикуем перечень оригинальных решений и разработок, примененных при создании LeoBase. В список вошли только уникальные для СУБД компоненты либо те, реализация которых в LeoBase выполнена особенно удачно. Отличительной чертой этих решений является возможность отделения и использования независимо от СУБД.
Индексы
В LeoBase существует два типа индексов: обыкновенный и реляционный. Обыкновенный индекс позволяет производить ускоренный, по сравнению с обычным, поиск по значениям, хранящимся в базе данных, так как в индексе не хранятся сами значения. Реляционный индекс является расширением обыкновенного, он также индексирует значения, однако смысл этих значений - связь двух баз данных между собой. Таким образом, в реляционном индексе содержатся средства, позволяющие быстро преобразовывать множество записей одной БД во множество записей другой БД, связанных с записями из первой. Благодаря структуре индексов в LeoBase проводится операция логического, а не физического упорядочения данных, а также возможен уточняющий поиск. Система индексации данных в LeoBase может быть использована с другими СУБД как прикладная часть библиотеки.
Виртуальные битовые массивы
Для реализации концепции множеств выделенных записей, а также для ускорения операций поиска по нескольким полям в LeoBase реализован набор процедур работы с виртуальными битовыми массивами (ВБМ). Чтобы оптимально использовать выделяемую им память, виртуальные битовые массивы настраиваются на максимально возможный номер бита. После открытия комплекса БД весь механизм ВБМ настраивается так, чтобы адресовать запись БД с максимально возможным номером. Каждый элемент в таком массиве уникален, память в них используется оптимальным образом. Механизм ВБМ также отделим от LeoBase и может быть использован в других целях.
Система буферизации файлов
Система кэширования файлов LeoBase Smart Files (LSF) функционирует на самых низших уровнях ядра LeoBase. Вся система файлового ввода-вывода основана на LSF. В большой степени она снимает проблему промежуточных буферов при чтении и записи данных.
LSF содержит полный перечень функций для работы с файлами, управления буфером, распределения файлов на нескольких носителях информации и т.д. При работе в сети LeoBase Smart Files кэширует данные отдельного клиента на его машине, снижая таким образом сетевой трафик. Немаловажно и то, что LeoBase Smart Files берет на себя работу с дескрипторами файлов операционной системы, что позволяет открыть одновременно сколько угодно файлов LSF. Для чтения информации из дисковых файлов LeoBase Smart Files сам перераспределяет дескрипторы файлов операционной системы.
Системный журнал LeoBase
LeoBase System Journal (LSJ) представляет собой средство, поддерживающее многие полезные функции. В их числе повышенная надежность сохранения данных. При внезапном отключении электропитания LSJ восстанавливает БД до максимально непротиворечивого состояния. LSJ обеспечивает поддержку моментальных снимков БД, которые представляют собой логические отметки, характеризующие состояние и наполнение БД на определенное время. Если возникает необходимость просмотреть, какие данные присутствовали в базе некоторое время назад, то с помощью LeoBase System Journal в любой момент возможна активизация этих снимков. В сетевой версии LeoBase LSJ согласует работу клиентов. Каждый клиент работает в собственном снимке БД, не мешая другим. При необходимости он может освежить свои данные информацией из БД на сервере.
Как и LeoBase Smart Files, LSJ реализован на уровне файловой системы СУБД. Благодаря этому он отделим от LeoBase и может быть использован для журнализации и сохранения файлов вне СУБД.
Концепция выделенных записей
Благодаря использованию виртуальных битовых массивов в СУБД LeoBase успешно реализована концепция выделенных записей. Главное ее отличие от традиционного подхода состоит в том, что над записями БД проводятся не физические, а логические операции. Выделенными записи БД могут стать как в результате проведения операции выборки, так и в результате произвольного выделения записей вручную. Благодаря этой концепции, в LeoBase результатом запроса являются все записи, удовлетворяющие запросу, а не только первая. Множество выделенных записей всегда относится к конкретной базе данных и может быть сохранено на диске для дальнейшего использования в виде специального файла, называемого состоянием базы данных. Возможности выделенных записей обусловлены возможностями виртуальных битовых массивов. Можно, например, провести поиск с добавлением/пересечением/вычитанием найденных записей с текущими выделенными записями. Аналогичные операции можно проводить и с состояниями. Концепция выделенных записей позволяет легко реализовать многооконную систему, работающую со списками записей.
Режимы пакетного изменения БД
Хотя эти режимы можно отнести к свойствам индексов LeoBase, они достаточно сильно связаны с самой СУБД. Когда в БД объявляется блокировка индексов, это означает, что при всех операциях изменения БД корректировки индексов не происходит. После отмены блокировки изменение индексов произойдет оптимальным для каждого случая способом. Полной перестройки индексов при этом не происходит. Особняком стоит механизм пакетного добавления записей. Его аналогом является добавление записей с заблокированными индексами, однако пакетное добавление работает в несколько раз быстрее этого метода. В любом случае, режимы пакетного изменения БД в тех случаях, когда БД уже содержит данные, значительно ускоряют ввод в базу больших объемов информации.
Система обновления БД
Реализованная в LeoBase система Upgrade позволяет поддерживать актуальность баз данных на удаленных компьютерах, создавая специальные файлы обновления, которые содержат лишь измененную порцию БД. Изменение данных в процессе считывания файла Upgrade идет в режиме блокировки индексов, что ускоряет завершающую фазу обновления. Процесс выглядит следующим образом:
- База данных централизованно пополняется и модифицируется поставщиком информации на своем компьютере (хосте);
- На хосте, с помощью процедуры LeoBase, считая от момента последнего обновления до текущего момента, изготавливается новый файл обновления, размер его предельно оптимизирован;
- Файл передается пользователям базы данных и обрабатывается у них специальной процедурой LeoBase, служащей для считывания обновления.
Система Upgrade также отделима от LeoBase и может применяться вместе с другими СУБД.
Система тиражирования данных
Система тиражирования данных позволяет клиентам пополнять и корректировать базу данных с удаленных компьютеров. Тиражирование - это комплекс мероприятий, предпринимаемых для совместного ведения одного комплекса БД. Для ведения базы одним клиентом, эта база переписывается ему в личный каталог. После работы клиентов по отдельности специальной программой - сервером репликаций, для каждой прикладной задачи своим - выполняется совмещение результатов их работы на общих базах данных. Процесс происходит следующим образом:
- идентичные копии БД поставляются всем клиентам;
- каждый клиент работает со своей копией БД, пополняя и изменяя ее;
- в конце сеанса работы каждый клиент изготавливает специальный файл тиражирования, содержащий изменения БД, внесенные им;
- на сервере репликаций происходит слияние этих файлов и устранение возможных конфликтов. В результате формируется общий файл тиражирования, содержащий изменения баз данных от начала текущего сеанса работы до текущего момента.
- общий файл тиражирования снова рассылается всем клиентам. Каждый клиент производит откат своих действий до начала сеанса, в котором проводились изменения, и обрабатывает файл тиражирования специальной процедурой.
Цикл публикаций, рассказывающих о LeoBase, закончен. На сегодня в нем содержится наиболее полное популярное описание возможностей этой технологии. Мы благодарим "КВ" за предоставленную газетную площадь.
Мы с удовольствием ответим на все вопросы, связанные с применением данной технологии, которые просим направлять в редакцию газеты либо в компанию "СофтИнформ" по телефону 228-00-48 или по электронной почте.
Владимир КОТЛЯРОВ,
"СофтИнформ", тел. 213-28-13,
e-mail: ui@activ.minsk.by
Горячие темы