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

Проблемы многопользовательских систем

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

Но не все проблемы конкурентного доступа можно обойти программно за счет транзакций и дополнительных проверок. Основная проблема — человеческий фактор. Каждый пользователь работает не напрямую с данными в СУБД, а с некоторой их локальной копией, загруженной в клиентское приложение. Кроме того, программно невозможно выделить последовательность чтений и записей пользователем данных, составляющих атомарную операцию. Следовательно, нельзя и «откатить» такую транзакцию при изменении данных чтения — система просто не в состоянии определить, какое количество последних действий пользователя образуют единое целое и какие из прочитанных им данных пользователь учел при принятии решения.

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

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

Данные с историей

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

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

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

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

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

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

Способы управления данными

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

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

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

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

Технология хранения

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

Используя термины SQL, можно говорить, что для отражения прекращения существования объектов и изменения их характеристик недопустимо применение операторов delete и update. Эти операторы являются служебными и должны использоваться исключительно в служебных целях: для перемещения, архивации и утилизации массивов данных. Для того чтобы это стало возможным, необходимо, чтобы каждая запись базы данных представляла собой сведения о некотором событии (или его части): создании класса, разделении атрибутов, удалении объекта, изменении атрибута и т. д. Поскольку каждое такое событие будет относиться к одному из четырех перечисленных жизненных циклов, то и хранить сведения о них также имеет смысл в соответствующих четырех таблицах: Классы, Атрибуты, Объекты, Значения.

События, отражаемые в первых трех таблицах, — это сведения о переходе сущностей из одного состояния в другое. Запись, отражающая каждое такое событие, представляет собой вектор, описываемый двумя точками: предшествующим состоянием и текущим. Еще одним неотъемлемым элементом является штамп времени события, то есть это время, начиная с которого переход считается совершенным.

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

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

Описанная технология позволяет упростить решение проблемы модернизации информационных систем, в частности — проблемы изменения используемых схем (структур) данных. Сегодня при их изменении существовавшие ранее данные, по сути, конвертируются в новый формат. Но, во-первых, конвертация не всегда достаточно простой процесс, а во-вторых, возникает проблема отсутствующей информации: при добавлении столбцов в таблицу, для ранее созданных записей соответствующие поля будут не заполнены, а прекращение использования столбца приводит к тому, что незаполненным данное поле будет для всех новых записей. Все это может приводить к нарушению заданных разработчиком ограничений целостности. Особенность предложенной технологии заключается в обеспечении возможности работы с данными прошлых периодов в соответствующей им схеме данных.

Управление доступом к данным

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

Следует отметить, что с учетом сказанного откат транзакций, так же как и все другие исправления, не должен проходить посредством изменения или удаления существующих записей. Для отражения операций исправления посредством операций вставки в дополнение ко времени актуальности данных (действительному времени), указываемому в записях таблиц Классы, Атрибуты, Объекты и Значения, необходимо использовать время записи данных (транзакционное время записи). Исправления фиксируются посредством добавления к существующей записи с неправильным значением новой записи с тем же временем актуальности, но с текущим временем записи данных (в связанной записи таблицы Транзакции) и исправленными значениями. Таким образом, при чтении используется запись с более поздним временем создания.

В многопользовательской среде для обеспечения полноценного отслеживания некорректных операций необходимо знать содержание данных локального кэша, то есть содержание данных на момент начала транзакции. Здесь существенной проблемой является временной разрыв между началом транзакции и ее окончанием. Под началом транзакции подразумевается чтение данных из СУБД в локальный кэш, а под ее окончанием — запись изменений. При использовании предложенной модели организации данных, для решения данной проблемы достаточно знать время чтения данных из СУБД в локальный кэш. Его целесообразно хранить в отдельном поле таблицы Транзакции.

Хранение данных в режиме «только вставка» позволяет также решить проблему отслеживания авторства всех изменений. Для этого соответствующие сведения аналогичным образом вносятся в записи таблицы Транзакции. Если при этом для всех связанных с записью транзакции на ключе пользователя рассчитать ЭЦП и сохранить ее в отдельное поле таблицы Транзакции, то можно придать юридическую значимость образуемого таким образом информационного массива, обеспечив при этом разделение ответственности между пользователями.

***

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

Сергей Лизин (sergey.lizin@gmail.com)  – автономная некоммерческая организация «Информационная Мордовия» (Саранск).

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

Колонки, SSD и облака

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

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

Разработка приложений и баз данных: точки соприкосновения
Реляционные базы данных проникли практически во все информационные системы, и, казалось бы, СУБД стали наиболее устоявшейся областью ИТ, где уже мало что можно изобрести, однако реальное положение дел далеко от идеального. В разработке приложений для работы с базами данных есть ряд проблем, для решения которых компания Embarcadero Technologies предлагает свои подходы.


Универсальные коммерческие СУБД: есть ли перспективы?

Сегодня к универсальным коммерческим СУБД с легкой руки некоторых видных представителей западных научных кругов прилепилось словечко legacy.