2012-04-14 3 views
1

Мне нужно объяснить, почему нам нужно хранить XML-документы в базе данных.Обоснование хранения XML в реляционной базе данных

На сторона:

  1. усилия, чтобы резаная отдельные элементы таблиц и atrribute столбцов
  2. Никаких усилий, чтобы поддерживать отношения между таблицами, поскольку они являются самодостаточными в XML
  3. Переносные через систему которые разделяют XML
  4. Если есть необходимость, буквально все СУБД поддерживают операции XML для запроса XML как реляционного объекта.

На нижней стороне:

  1. Сеть полезной нагрузки значительно больше, чем счетчик части RDBMS.
  2. Требовать, чтобы клиентские приложения разбивали их на используемые компоненты.

Насколько обоснованы эти обоснования? Может ли кто-нибудь еще подумать?

ответ

4

На самом деле нет окончательного списка pro con - его зависит от того, что вы пытаетесь сделать. Но вот еще пара для вас:

  1. Не все базы данных SQL поддерживают XML xpath (за пределами blob like '%xxx%'). Возможно, вы застряли в старой версии базы данных, которая не имеет функций поддержки XML (т. Е. Mysql 4). Более легкие базы данных SQL, такие как Sqlite и hsql, также попадают в этот лагерь.
  2. Даже когда XML можно искать в базе данных, он не является оптимальным. SQL-запросы XML не могут использовать встроенный оптимизатор поиска SQL-запросов (т. Е. Индексы).
  3. В зависимости от базы данных, которую вы используете в документе XML в базе данных, также нельзя использовать возможности проверки и типа SQL-сервера.Например, Oracle может выполнять проверку схемы XML, и я не вижу, что Mysql может.
  4. Производительность для запросов, которые вы можете выполнить, не будет сравниваться со стандартными запросами столбцов.
  5. Размер базы данных. Если вы храните XML в своей базе данных, он будет больше. Вы могли бы сжать его, но тогда его запрос был бы трудным/невозможным.
  6. Normalization вопросы могут стать актуальными проблемами - возможно, вы не ожидаете использовать SQL для запроса XML в какой-то момент, но затем в более позднем пункте оно решило, что какое-то поле действительно необходимо. Возможно, вам придется вытащить это поле из XML и заполнить фактический столбец, чтобы получить желаемую производительность ... в этом случае у вас теперь есть избыточная информация в вашей базе данных.

Плюсы и минусы действительно зависят от того, что вы собираетесь хранить и для чего это необходимо.

  1. Если его по существу двоичная/конфигурационная информация, которую вам просто нужно вставить в какое-либо место, и по какой-либо причине предпочитает придерживаться в вашей базе данных SQL ... ну, соображения относительно запросов не имеют отношения к делу. В этом случае важные вопросы коснутся пространства и того, как минимизировать его (т. Е. Сжатие).
  2. Если есть вероятность, что XML необходимо регулярно искать, вы рискуете получить медленные запросы и проблемы избыточности, о которых я упоминал выше. В этом случае вы должны тщательно рассмотреть свой дизайн: вам действительно нужно хранить эти данные в формате XML? Было бы лучше построить XML из этих данных?
3

В обоих случаях есть про и минусы, и это зависит от вашего сценария использования.

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

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

3

Обсуждая Ваши комментарии:

  1. Не хранить отдельные элементы и средства, не исполнившие ограничение на них
  2. Опять же, ограничение между таблицами не сохраняется
  3. только переносимый, если целевая система подтверждает то же самое схемы.
  4. Да, но производительность будет отличаться.
Смежные вопросы