Emacs для начинающих

Дилемма 2.Как обеспечить устойчивость?


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

Третий вариант — так называемые объектные базы данных — представляют собой некоторые прикладные пакеты ограниченного хождения. Фактически «объектная БД» — это промежуточный программный уровень, который скрывает от пользователя метод хранения XML, то есть именно то, что вы и должны реализовать.

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

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

Конечно, многие попытаются совместить оба варианта. Можно предложить несколько комбинированных подходов, основанных на избыточности и предварительном анализе задачи. Так, если нас интересуют, в основном, только ребра (связи) определеного типа (например, поиск e-mail по нику), то можно составить таблицу отношений для этого типа связей. При этом в другом месте можно хранить полный XML текст для менее частых запросов.

Недостаток комбинирования методов — ваша программа сможет работать только с документами определенного типа, а это не совсем то, для чего создан XML. Кроме того, в условиях избыточности вам придется гарантировать согласованность параллельных вхождений. То есть, если изменяется документ, то должны измениться и все производные отношения. Или, напротив, при изменении отношения должен измениться и документ XML (возможно, такое поведение вообще следует запретить). Иными словами — вам придется скрывать используемый метод доступа (например, SQL) и реализовать свою версию «объектной базы данных», отслеживая целостность данных вручную.



Содержание раздела