(Продолжение. Начало в №7-9, 11)
Как мы писали, система обновления Upgrade содержится в LeoBase в виде готовой функции. Сегодня мы расскажем о ней и на примере системы "ЮрИнформ" опишем возможности ее практического применения в справочных системах.
История разработки этой подсистемы является примером того, как новые технологии появляются из-за практической необходимости. Юридическая база данных пополняется очень интенсивно, особенно в Беларуси, поэтому при создании системы «ЮрИнформ» не мог не встать вопрос о выборе способа, которым информация о произведенных изменениях могла бы передаваться абоненту. Как известно, ни одна из популярных у нас СУБД не содержит встроенной системы обновления, пригодной для таких случаев. Разработчикам информационных систем приходится либо (для каждого случая) самим дописывать программную "заплатку" на конкретную СУБД (без возможности ее переноса в другой проект), либо попросту игнорировать проблему, переложив ее на плечи будущих пользователей. Поэтому-то большинство отечественных ИПС и предлагают при корректировке данных полную переустановку системы. К счастью, в нашем случае разработчики не пошли по этому пути, а предпочли решить проблему раз и навсегда. Созданная ими функция Upgrade не просто позволяет оптимально решить проблему обновления «ЮрИнформ» на удаленных компьютерах, она существует независимо от "ЮрИнформ" и предлагается разработчикам баз данных в составе LeoBase.
СУБД позволяет обновлять БД с помощью Upgrade-файлов, содержащих новые и измененные данные. В Upgrade-файле нет ничего лишнего: так, в него не попадет запись, добавленная и удаленная в промежутке между созданием старой и новой версий БД, а если поле какой-то записи менялось много раз, то в Upgrade-файле будет записано только последнее значение.
Система Upgrade позволяет создавать специальные файлы обновления, содержащие лишь порцию измененной информации? и, таким образом, дает возможность поддерживать согласованность БД на удаленных компьютерах посредством пересылки относительно небольших объемов данных. Процесс выглядит следующим образом:
- База данных централизованно пополняется и модифицируется поставщиком информации на своем компьютере (хосте);
- На хосте, с помощью процедуры LeoBase, считая от момента последнего обновления до текущего момента, изготавливается новый файл обновления, размер его предельно оптимизирован;
- Файл получает порядковый номер и передается пользователям базы данных, а также обрабатывается у них специальной процедурой LeoBase, служащей для считывания обновления.
Upgrade-файл, создаваемый LeoBase, может быть двух форматов: Fast и Compact. В первом случае файл формируется быстрее, однако его размер больше, нежели во втором. Создание Compact-файла требует обязательного наличия системного журнала (о нем мы расскажем в последующих статьях этой серии), а размер полученного Upgrade-файла является минимально возможным. Основное отличие между этими форматами заключается в том, что в формате Fast в Upgrade- файл модифицированные записи помещаются целиком, а в Compact — только реально измененные поля. Это не относится к memo-полям, которые, имея, как правило, большой объем, и в том, и в другом случае помещаются в файл обновления только при изменении. В настоящее время, при корректировке memo-поля, последнее попадает в Upgrade-файл целиком, однако в скором будущем, с реализацией в LeoBase технологии под названием Binary Large OBjects (о ней мы также расскажем в свое время), станет возможным и в этом случае помещать в файлы обновления только измененные части, что, естественно, существенно сократит объем этих файлов.
После создания файлу обновления присваивается порядковый номер и он рассылается абонентам, причем, многие из них, благодаря небольшому объему Upgrade-файла, предпочитают получать его через модем. Для пользователя актуализация установленной у него базы сводится к простой процедуре запуска на своей машине очередных файлов обновления.
Изменение данных в процессе считывания файла Upgrade происходит в режиме блокировки индексов, что существенно ускоряет фазу обновления. Примечательно, что обновление в LeoBase проводится с применением механизма пакетного добавления, без полной реиндексации БД. Вообще говоря, механизм пакетного добавления реализован для эффективной групповой модификации записей в БД. Пакетное добавление позволяет практически всегда избежать длительной операции переиндексации всей БД. О пакетном добавлении мы еще упомянем при рассказе о работе с записями, а сейчас на примере покажем, как с его помощью протекает процесс обновления.
Допустим, что у нас имеется база данных, содержащая 1 млн. записей, и в нее необходимо добавить еще 20 тыс. записей, причем ключевых полей в БД достаточно много (например, более 10). Добавление с актуализацией индексов будет идти очень долго, если же добавить записи без учета индексов, то, с учетом последующей перестройки индексов, это займет еще больше времени. Для подобных случаев и предусмотрен механизм пакетного добавления. Новые записи вводятся в БД без корректировки индексов, а для последующей перестройки базы, в зависимости от конкретной ситуации, СУБД выбирает один из трех специальных алгоритмов, устраняющих последствия пакетного добавления. Такая перестройка происходит значительно быстрее, чем полная реиндексация БД.
Кроме пакетного добавления, существует еще одна возможность скоростного изменения базы данных без корректировки индексов. Это режим блокировки индексов. При его установке все дальнейшие операции по изменению базы данных (добавление, модификация, удаление записей) происходят без корректировки заблокированных индексов. Естественно, что ключевые поля, индексы которых заблокированы, не могут участвовать в операциях выборки и упорядочивания. При отмене режима блокировки индексов их корректировка происходит по тем же алгоритмам, что и устранение последствий пакетного добавления. Пакетное добавление — логически то же, что и простое добавление с заблокированными индексами всей БД, но наличие пакетно добавленных записей все же позволяет остальным записям участвовать в операциях выборки и упорядочивания.
Важной представляется возможность отслеживать все изменения, происходящие в базе данных. LeoBase позволяет программисту определить специальную процедуру, с помощью которой можно отслеживать изменения, происходящие с БД. Данная процедура создает множества выделенных записей до и после обновления, а затем, с помощью побитовых операций сравнения, отслеживает — что изменилось. Эта возможность используется в части индексации текста лингвистической подсистемы, о которой речь пойдет в следующей статье.
Владимир КОТЛЯРОВ,
"СофтИнформ", тел. 228-00-48,
e-mail: ui@activ.minsk.by
Горячие темы