|
| ||||||||||||
| ||||||||||||
|
2004 г
Модели хранения XML-данных:
Марк Скардина, Oracle Magazine RE Январь/Февраль 2004
|
|
Какая модель для каких приложений? Приложения для XMLType CLOB
Приложения для XMLType View
Приложения для XML DB Repository
|
В некотором смысле, использование некоторого XMLType CLOB – это простейший способ хранения XML-файла. При этом документы в формате XML интерпретируются именно как документы. XML-файл сохраняется в структуре внешней памяти как полный текстовый документ (с пробелами (whitespace), комментариями и т.д. в нетронутом виде), при этом он запоминается просто как одна запись (строка символов) в базе данных. Следовательно, файлы любого размера и глубины (уровня вложенности, depth) могут быть сохранены, если они сформированы в формате XML.
Однако, хотя вы можете определить типы данных (datatypes) в документе для проверки по схеме (базы данных), этими данными нельзя манипулировать или выбирать их с применением SQL-запросов.
Из-за этого ограничения для поиска данных в документе нужно использовать механизм текстового поиска (text search engine), а не SQL-запросы, в которых можно воспользоваться функциональностью query rewrites, функциональными индексами и т.д. Эффективное изменение документа ограничено, так как оно требует выборки всего файла, совершения изменений и замены документа (в базе данных). Если, однако, основным назначением ваших XML-документов заключается инкапсуляция контента в некоторую структуру для преобразования (это прежде всего относится к публикации в Web, управлению контентом, архивированию документов и т.д.) и большинство изменений контента совершаются на уровне документа (в целом), тогда XMLType CLOB – это ваш оптимальный выбор для структур хранения XML-данных. В этих случаях, вряд ли вам нужен SQL-контекст для ваших данных и у вас будет гарантия побайтной сохранности (byte-by-byte fidelity). (См. во врезке примеры таких приложений.)
Альтернативой для CLOB XML Type является создание виртуального XML-документа “поверх” набора реляционных таблиц как "XML view." Такой подход позволяет пользователю вставлять, изменять и уничтожать данные в XML-файле таким же образом, как если бы это были SQL-данные. Так как вы определяете виртуальный XML-документ “поверх” структуры хранения данных, то вы не ограничены только одним представлением данных как с CLOB; наоборот, вы можете иметь множество XML-"документов".
Хранение данных в реляционных таблицах также означает, что вы можете изменять отдельные элементы без выборки всего документа. В целом, с XMLType Views вы получите все преимущества и эффективность, связанные с операциями SQL, так как “движок” реляционной базы данных оптимизирован для такого рода выборок. Наконец, вы можете использовать операции SQL с типами данных для обработки типов данных XML вместо интерпретации их как текста. (Например, дата может быть интерпретирована именно как дата с точки зрения SQL, а не как строка симолов.)
Однако, этому подходу присущи некоторые недостатки. Определение XMLType views, в которых уровень вложенности структур велик (то есть, больше 8-10 уровней) может првести к значительной деградации производительности. Вставка и изменение представлений (views) требует применения тирггеров типа instead-of-triggers, и эти операции трудны в сопровождении, так как вы должны включить код приложения в эти тригерры.
Большим преимуществом применения CLOB является полное сохранение структуры документа и гарантия его сохранности на уровне байтов. Но с XMLType View вы теряете гарантию сохранения упорядоченности документа, так как многие элементы (такие как комментарии и инструкции по обработке) исчезнут при размещении (shredding) данных документа в таблицы (базы данных).
Но это все не имеет значения, конечно, если вы размещаете (в базе данных) ваши данные для использования приложениями, ориентированными на работу с отдельными данными (data-centric applications), и для которых не имеет значения структура документа (в целом). Если вам нужно размещать/выбирать данные в/из базы данных и сохранить метаданные нетронутыми (в качестве единственного контекста) и вы хотите воспользоваться все преимуществами операций DML, то применение XMLType Views – это наилучшее решение: Начните со схемы базы данных и сгенерируйте соответствующую XML-схему. В этом случае, следовательно, нет нужды в упорядоченности документа; любая требуемая упорядоченность секций может быть явно определена через ROWIDs или другие специфичные для приложения методы. В состав СУБД и XDK включены функции для создания XML-схем автоматически из XMLType Views.
Этот метод особенно полезен, если вы работаете с несколькими XML Schemas с различными именами тэгов и структурой и не хотите их определять в схеме вашей базы данных (как в случае, когда от существующих “унаследованных” приложений баз данных требуется поддержка XML и при этом их функциональность должна быть сохранена). В типичном случае, вы можете перенацелить одно и то же хранилище данных для использования рядом заказчиков, которые диктуют форматы и шаблоны вам. Вы просто определяете некоторый XML view для каждого заказчика и когда вы выбираете или вставляете данные, используя этот view, они будут иметь формат, подходящий соответствующему заказчику. (Еще раз см. врезку).
Но можно и приготовить торт, и съесть его, хотя бы до некоторой степени: Вы можете хранить ваш документ как некоторый Native XML Type (см. ниже) в репозитории XML DB (Oracle's XML DB repository), который целиком побайтно сохранит весь документ, а также “разнесет” его в SQL-таблицы. Такой подход предоставляет вам полную достоверность и в то же время позволяет вам выполнять все DML-операции с документом, которые доступны через XML Views. У вас по-прежнему сохраняется детализированное управление данными, и можно создавать множество представлений и документов на основе этих SQL-данных. После регистрации вашей XML-схемы вы запоминаете свои XML-данные в своей базе данных, просто вставляя файл XML-документа с применением SQL, PL/SQL, Java, FTP, HTTP или WebDAV. Выборка XML-данных из базы данных совершается выполнением SQL-запроса или чтением файла одним из стандартных протоколов Internet. Эта функциональность реализована благодаря поддержке встроенной перезаписи запросов (query re-write), которая снимает необходимость в триггерах типа instead-of-triggers.
Помимо легкости работы с XML в форме документа (в целом) или (отдельных) данных, вы получите расширение интерфейсов прикладного программирования объектной модели документа (Document Object Model (DOM) APIs) стандарта косорциума W3C при программном доступе. При разборе XML из файла вы можете построить в оперативной памяти представление в виде дерева всего файла для того чтобы манипулировать с ним. (Такой подход используют и другие XML-процессоры, такие как XSLT.) С возможностью “виртуальная DOM-модель” ("virtual DOM") собственного XMLType, описанной ниже, вы строите такое дерево по требованию: не только сохраняя ресурсы при применении интерфейсов DOM (DOM APIs) и XSLT, но в случае больших документов или наборов строк ваше приложение просто работает (а не падает).
Применение репозитория XML DB дает немало преимуществ, но это неверно для каждого приложения. Могут быть велики накладные расходы при поддержке отношения между полным документом и его “разложенными” (по таблицам) данными. Однако, основная проблема связана с эволюцией схемы. Так как документ (его структура) определяет процесс запоминания (отображение (mapping), какие данные в какие таблицы), то тогда, когда вы хотите изменить схему документа, этот процесс уже не абстракция, он “тонко” привязан к схеме базы данных, чья структура влияет на него. Это означает, что вы не можете выполнить большинство нетривиальных изменений схемы базы данных или документа, если не выполните экспорт всех данных и затем их импорт в базу данных.
Это обстоятельство могло бы быть настоящим ночным кошмаром, если бы вы работали со многими отраслевыми схемами и должны разгружать ваши данные каждый раз, когда они меняются. Если же нет необходимости в побайтной сохранности документа, эти изменения могут быть вынесены из схемы вашей базы данных благодаря использованию модели хранения XMLType View, описанной ранее.
XML DB в СУБД Oracle вводит собственный (native - “родной”) XMLType как объектный тип Oracle и новый, определяемый пользователем, тип данных, который позволяет абстрагироваться от используемой модели хранения. Он предлагает вам как CLOB, так и объектно-реляционное представление “разложенного” (по базе данных) XML-документа. Это единственный, совместимый с XML Schema 1.0 тип, который может использовать команды как SQL, так и SQL-XML с расширенной функциональностью, включая использование встроенных в базу данных PL/SQL и Java.
Этот тип данных XML предоставляет следующие возможности для управления структурами хранения XML:
В будущем Oracle предполагает добавить несколько новых возможностей к этому списку, включая дополнительную функциональность базы данных и XML, такие как XQuery, который будет языком специально разработанным для запросов XML-данных в контексте документа, а а не в контексте строк и таблиц SQL. (Прототип языка XQuery доступен для загрузки на OTN.) XQuery подобен SQL в том, что он обладает специфической грамматикой и использует ключевые слова, но в этом случае предикаты и функции базируются на XPath.
|
Следующие шаги Посетите и сделайте закладки XML Technology Center сети OTN: Скачайте Oracle XDK: Прочитайте техническую статью "Oracle XML DB": |
XML DB в СУБД Oracle – это наиболее продвинутая реализация XML в СУБД и предлагает широкую функциональность, сравнимую с моделями хранения CLOB или XMLType Views. Для приложений подобных тем, которые перечислены в верхней врезке, XML DB предлагает разработчикам мощное и эффективное решение для хранения, запрашивания и манипулирования XML-данных таким способами, которые ранее были невозможны.
Я сравнил и выявил особенности трех различных моделей хранения для XML-данных в СУБД, реализованных в Oracle9i Database Rel 2 чтобы дать вам лучшее представление о том, что лучше соответствует вашим целям. Тщательно выбирайте, исходя из потребностей ваших приложений; и не ориентируйтесь на последние новинки других компаний, преподносимых как полные решения для интеграции XML-документов и баз данных – это очень важно. Такой выбор буквально может означать разницу между созданием успешного прототипа и его внедрением в производство.
Марк Скардина (Mark Scardina), проповедник (Evangelist) XML для серверных продуктов Oracle. Он менеджер группы продуктов в подразделении CORE and XML Development Group, его задачи – обеспечение компонентов XML-инфраструктуры, используемых во всех продуктах Oracle, включая XML Developer's Kits. Марк возглавляет комитет Oracle XML Standards и является редактором рабочей группы по W3C XSL. Он часто выступает на отраслевых форумах и конференциях и является соавтором книги The Oracle9i XML Handbook (Oracle Press, 2001).
|
CITForum © 1997–2025