Версионные таблицы в базе геоданных в DB2

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

Для выполнения данных требований, компания, рабочая группа и базы геоданных рабочего стола могут быть версионными. Для начала выполните регистрацию классов пространственных объектов, автономных классов объектов и таблиц как версионных объектов. Затем создайте версии баз геоданных, в которых вы будете выполнять редактирование. Данные версии являются виртуальными; копии базы геоданных не выполняются. Версии представляются дельта-таблицами, связанными с каждым версионным набором данных и несколькими системными таблицами, необходимыми для отслеживания версий.

Информацию о версиях см. в разделе Введение в версионное редактирование.

Версионные таблицы в ArcGIS for Desktop

В окне Каталога версионные наборы данных появляются аналогично неверсионным наборам. Проверить, является ли класс пространственного объекта или таблица версионной можно в диалоговом окне Свойства (Properties). В закладке Общие (General) указано, зарегистрирован ли данный касс пространственного объекта или таблица как версионные.

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

Аналогично, при выполнении просмотра версионного класса пространственных объектов в одной версии ArcMap, а затем его просмотре в другой версии ArcMap, он может выглядеть иначе. Это происходит потому, что таблица класса пространственных объектов, просматриваемая в одной версии, содержит определенное число строк, а аналогичный класс объектов в другой версии может содержать другое число строк.

ПодсказкаПодсказка:

Для просмотра версии данных в документе карты щелкните кнопку По источникам (List By Source) в таблице содержания ArcMap.

Приведенные далее примеры показывают класс пространственного объекта пожарных гидрантов (Fire hydrants) в версии DEFAULT базы геоданных в ArcSDE.

Версия по умолчанию класса пространственных объектов пожарных гидрантов (Fire hydrants)

При переключении на другую версию базы геоданных — версию wo2557 — класс пространственных объектов пожарные гидранты содержит дополнительный гидрант и объект lateral. Это означает, что гидрант был добавлен в класс объектов пожарные гидранты (Fire hydrants), а lateral в класс объектов Water laterals при редактировании с использованием версии базы геоданных wo2557.

Версия данных wo2557

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

Версионные таблицы в базе данных IBM DB2

В базе данных работа с версиями управляется несколькими таблицами базы данных — таблицами набора данных, дельта-таблицами и системными таблицами — для отслеживания версий.

Дельта-таблицы

Когда вы регистрируете набор классов, автономный набор классов или таблицу как версионные, в базе данных создаются две дельта-таблицы: таблица добавлений и таблица удалений. Дельта-таблицы хранят данные о вставках, обновлениях или удалениях, выполненных в версионной таблице или классе пространственных объектов, в каждом состоянии базы данных. 

ПримечаниеПримечание:

Только владелец набора данных может зарегистрировать его в качестве версионного.

a<registration_id>

Таблица a<registration_id> (таблица добавлений) поддерживает информацию о каждой вставленной или обновленной записи (объекте) в версионной бизнес-таблице, к ним выполняется запрос определения добавленных или измененных в определенном состоянии базы данных записях. registration_id в имени таблицы добавлений является значением поля REGISTRATION_ID таблицы TABLE_REGISTRY, соответствующей версионной таблице. В приведенном выше примере с гидрантом поле REGISTRATION_ID класса объектов пожарных гидрантов (Fire hydrants) в таблице TABLE_REGISTRY равно 161; поэтому, таблица добавлений для класса пространственных объектов гидрантов имеет имя a161.

Таблица добавлений содержит поля, аналогичные полям версионной бизнес-таблицы, подверженной редактированию, и поле STATE_ID.

Таблица добавлений

Имя поля

Тип поля

Описание

Null?

<все поля из версионной бизнес-таблицы>

<все соответствующие типы полей в версионной бизнес-таблице>

Все атрибуты нового объекта

SDE_STATE_ID

BIGINT

Идентификатор состояния, в котором был добавлен или изменен новый объект

NOT NULL

Например, если вы добавляете гидрант в класс объектов пожарных гидрантов (Fire hydrants) во время сеанса версионного редактирования, то для этого нового гидранта в таблицу добавлений вносится запись.

d<registration_id>

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

Таблица удалений

Имя поля

Тип поля

Описание

Null?

SDE_STATE_ID

BIGINT

Идентификатор состояния, в котором был удален объект

NOT NULL

SDE_DELETES_ROW_ID

INTEGER

Уникальный идентификатор удаленного или обновленного объекта

NOT NULL

DELETED_AT

BIGINT

Состояние, в котором был удален объект

NOT NULL

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

Системные таблицы

Помимо дельта-таблиц, системные таблицы отслеживают версионные таблицы и редактирования. К ним относятся таблицы STATES, STATE_LINEAGES, VERSIONS и MVTABLES_MODIFIED.

Версионные базы данных, помимо версии DEFAULT содержат, обычно, несколько версий. Эти дополнительные версии могут представлять такие элементы, как порядок работы, альтернативную конструкцию, сеанс автономного редактирования или исторические снимки. Таблица VERSIONS содержит описание данных версий, каждая версия идентифицируется уникальным именем и ID (ID автоматически создаются ArcGIS). Кроме того, каждая версия имеет владельца, описание, родительскую версию, связанное состояние базы данных и уровень доступа пользователя.

При создании таблицы VERSIONS в нее автоматически вносится подробная информация о версии DEFAULT. Администратор базы геоданных владеет версией DEFAULT, исходные ID соответствующего состояния базы данных равны 0. Далее приведен пример поля DEFAULT в таблице VERSIONS:

Name

Владелец

Version_ID

Status

State_ID

Описание

Parent_name

Parent_owner

Parent_version_ID

Creation_time

DEFAULT

SDE

1

1

0

Версия экземпляра по умолчанию

NULL

NULL

NULL

2009-02-12 08:40:26

Запись DEFAULT

Для управления редактированием данных, версионные базы геоданных содержат коллекцию состояний базы данных или единицы изменения в базе данных. Состояние представляет собой дискретный снимок базы данных при каждом внесении в нее изменения: каждая операция редактирования создает новое состояние базы данных. (Операцией редактирования является любая задача или набор задач [добавления, удаления или изменения], выполненные над объектами и строками.) Все версии базы геоданных ссылаются на одно из таких состояний базы данных и изменяются, с течением времени, последовательностью состояний.

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

Вся информация, относящаяся к состояниям, управляется в таблице STATES. Для определения состояния базы данных, ссылающихся на каждую версию, выполняется запрос таблиц VERSIONS и STATE_LINEAGES.

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

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

Вместе с таблицей STATES таблица MVTABLES_MODIFIED поддерживает перечень всех таблиц, которые были изменены в каждом состоянии базы данных.

При каждом изменении класса объектов или таблицы в состоянии создается новая запись в таблице MVTABLES_MODIFIED. При согласовании двух версий первым шагом процесса является идентификация состояний, на которые ссылаются эти версии – состояние текущей версии редактирования и состояние целевой версии. На основании данных состояний выводится общий предок состояния – это происходит в процессе обратного отслеживания происхождения состояний двух версий. Затем происходит запрос таблицы MVTABLES_MODIFIED для идентификации всех таблиц, которые были изменены между состоянием общего предка и состоянием целевой версии. Из полученного перечня измененных таблиц создается второй перечень таблиц, которые являются общими для обоих состояний. Для всех общих таблиц из второго списка выполняется несколько запросов на разность версий — INSERT, UPDATE, DELETE, UPDATE_UPDATE и UPDATE_DELETE.

Таблицы, участвующие в присвоении версии классу пространственных объектов, можно увидеть на следующей схеме:

Версионные таблицы класса пространственных объектов в DB2

Штриховые линии определяют неявные отношения между столбцами.

Номер в имени таблиц добавления и удаления соответствует REGISTRATION_ID бизнес-таблицы из таблицы TABLE_REGISTRY.

Версионные таблицы в XML-документе

Поле в XML-документе указывает, являются ли данный класс пространственного объекта или таблица версионными. Он сопровождается тегами версий. Для версионного класса объектов или таблицы значение данного параметра равно true.

ПодсказкаПодсказка:

Тег версии, несмотря на то, что он задан в наборах классов, не обязательно отражает значение версии классов объектов в них Для определения, являются ли классы объектов набора классов версионными, выполните запрос отдельного класса пространственных объектов.

<Versioned>true</Versioned>
5/10/2014