Полное обновление карты по информации базы данных

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

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

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

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

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

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

Таблица журнала для БД PostgreSQL имеет предопределенное имя - pgis2map_dbchanges_log и создается в схеме public.

Таблица журнала для БД MS SQL Server имеет предопределенное имя - mssql2map_dbchanges_log и создается в схеме dbo.

 

Таблица журнала имеет следующую структуру:

 

Имя поля

Тип данных

Описание

schemaname

name

имя схемы

tablename

name

имя таблицы

idrecord

integer*

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

changestype

integer

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

userid

text

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

stamp

timestamp

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

 

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

 

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

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

- schemaname;

- tablename;

- changestype;

- userid;

- stamp.

- Первичные ключи всех таблиц, регистрирующих свои изменения в журнале, должны иметь один тип данных, совпадающий с типом поля idrecord журнала изменений. Допускается использование «совместимых» типов для первичных ключей: например, поле idrecord журнала изменений может иметь тип bigint (8-байтное целое), а ключи отдельных таблиц – тип integer (4-байтное целое).

 

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

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

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

Для выполнения полного нанесения всех записей  всех наборов данных, указанных в настройках программы, на карту достаточно выполнить очистку карты вручную (например, подключившись к ней с помощью ГИС «Карта 2011»). В этом случае программа выполнит нанесение объектов на карту «с нуля» и пересоздаст свои индексные файлы.