Отслеживание изменений в пространственной базе данных с использованием журнала изменений

Печать Предыдущая страница Стартовая страница

Формирование картографического представления пространственной информации из БД выполняется на основании выборки данных, получаемой по соответствующему SQL-запросу. После получения в ГИС Панорама выборки данных в БД могут произойти различные изменения данных, производимые другими клиентами СУБД. Получить более актуальную выборку можно, выполнив повторный запрос к БД и получив весь набор данных целиком. Однако при больших объемах данных это требует значительных ресурсов и временных затрат. Поэтому целесообразнее выполнять проверку изменений в БД и дополнительно получать небольшие выборки только в составе тех данных, которые были изменены.

С этой целью предусмотрена возможность так называемой инкрементной обработки. Инкрементная обработка данных подразумевает использование в процессе обновления карты по базе данных не всех записей наборов данных, а лишь тех, которые претерпели какие-либо изменения с момента предыдущей операции обновления картографического представления в ГИС Панораме по информации из БД.

Для реализации возможности инкрементной обработки в базу данных должна быть добавлена служебная таблица – журнал изменений, в которой регистрируются все факты изменений в таблицах БД, подлежащих нанесению на карту. Регистрация фактов изменений производится специальными триггерами этих таблиц.

Факт создания, изменения или удаления каждой записи вносится в журнал изменений с указанием кода операции и времени ее совершения.

Каждая запись находит отражение в журнале изменений лишь единожды. То есть если запись была изменена, а затем удалена, то в журнале факт изменения будет замещен более поздним по времени фактом удаления.

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

Каждый экземпляр ГИС Панорама выполняет в БД регистрацию уникального идентификатора сессии. За счет этого записи БД, добавленные, измененные или удаленные из отдельного экземпляра ГИС Панорама определенным образом помечаются в журнале изменений. За счет этого каждый экземпляр ГИС Панорама может распознать «свои» изменения. При последующем переносе изменений из БД на карту такие записи пропускаются. Это позволяет избежать повторного редактирования объектов на карте.

Для создания таблицы журнала и объектов БД, необходимых для его ведения, в состав инсталляции включены SQL-скрипт для каждой из поддерживаемых СУБД. Скрипты располагаются в поддиректории setupdb в корневом каталоге программы.

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

При необходимости, скрипт можно изменить любым образом, но с обязательным сохранением логики ведения журнала и его структуры (имен полей и их типов). То есть, допускается изменение скрипта для использования журналирования не всех, а только определенных таблиц с пространственными данными, изменения ключевого поля вместо поля первичного ключа – на любое поле, значением которого можно уникально идентифицировать запись в таблице.

Предопределенные имена таблиц журнала:

­-   для СУБД PostgreSQL – pgis2map_dbchanges_log (создается в схеме public);

­-   для СУБД Oracle – ora2map_dbchanges_log (создается в табличном пространстве пользователя, для которого создается набор таблиц с пространственными данными, изменения в которых надо отслеживать).

 

Структура таблицы журнала изменений в БД:

 

 

Имя поля

Тип данных

Описание

schemaname

name

имя схемы (имя пользователя – для Oracle)

tablename

name

имя таблицы

idrecord

integer*

уникальный идентификатор записи в таблице

changestype

integer

тип редактирования записи (1-INSERT, 2-UPDATE, 3-DELETE)

userid

text

оператор (current_user())

stamp

timestamp

метка времени факта изменений записи

sessionident

text

идентификатор сессии (или приложения)

 

Выполнение обновлений с применением журнала изменений накладывает на таблицы, подлежащие отражению на карте, следующие ограничения:

  1. Наборы данных (таблицы БД) не должны иметь полей со следующими именами:

­-   schemaname;

-   tablename;

-   changestype;

-   userid;

-   stamp;

-   sessionident.

  1. Первичные ключи всех таблиц, регистрирующих свои изменения в журнале, должны иметь один тип данных, совпадающий с типом поля idrecord журнала изменений, то есть иметь тип integer (4-байтное целое), что обусловлено спецификой идентификаторов в формате карт ГИС семейства «Панорама».

 

При первом открытии DBM-карты программа выполняет формирование картографического представления этой БД целиком, то есть на карту наносятся все записи набора данных, указанных в настройках в DBM-файле. Далее, при наличии таблицы журнала изменений в БД, производится отслеживание изменений данных и актуализация картографического представления только в части измененных записей.