#xml #database
Вопрос:
У меня есть система, которая ежедневно генерирует большое количество XML-документов (порядка 1 миллиона), и я хотел бы иметь возможность хранить и индексировать их, чтобы я мог, например, искать все документы с определенным полем, установленным на заданное значение.
Я понимаю, что в принципе существует два типа XML-базы данных: те, которые обеспечивают поддержку XML поверх обычной реляционной базы данных, и те, которые являются «родной» базой данных XML. Учитывая, что я открыт для использования любого из них, что бы вы порекомендовали?
Ответ №1:
Microsoft SQL Server поддерживает столбцы XML. Это больше, чем просто поддержка больших двоичных объектов/ТЕКСТА.
Вы можете использовать XML-столбцы неструктурированным образом, где SQL Server просто гарантирует, что они являются правильным XML. Это позволяет хранить произвольные XML-документы внутри SQL Server, но при этом гарантирует, что вы имеете дело с XML, а не только с произвольными байтами/символами. SQL Server позволяет выполнять запросы в дополнение к этому с помощью XQuery.
Вы также можете создавать XML-столбцы, соответствующие схеме, используя XSD. Что еще более интересно, SQL Server позволяет индексировать XML, чтобы ваши запросы XPath могли работать хорошо.
Дополнительные сведения см. в разделе «Что нового для XML в SQL Server 2008«. (Хотя большая часть поддержки XML существует в SQL Server 2005.)
Ответ №2:
Вы также можете захотеть проверить сервер MarkLogic или существовать.
Если у вас есть умеренный объем контента(пара ГБ) , то eXist подойдет. Помимо этого, вы, вероятно, захотите заглянуть в MarkLogic.
Вы можете скачать и проверить их оба, так как eXist бесплатен, а у MarkLogic есть лицензия сообщества, с которой вы можете поиграть.
Ответ №3:
Если вы ищете собственную XML-базу данных, я определенно предлагаю Sedna. Также отличная поддержка разработчиков.
Ответ №4:
Я не могу предложить вам хорошего кандидата, но если вы хотите избежать выбора плохого, избегайте Oracle XmlDB. Это чертовски медленно и глючно. Одно из худших расширений Oracle, внесенных в его СУБД.
Комментарии:
1. Спасибо, я как раз этим занимался.
Ответ №5:
DB2 9.x с поддержкой pureXML-это возможность.
Ответ №6:
По словам людей, которые работали над этим, MonetDB вполне способен обрабатывать xml. В принципе, когда вы хотите выполнить xquery для содержимого, вам нужно что-то, что может сделать это правильно. Структура XML-документа, который является очень гибким и неопределенной длины, принципиально отличается от структуры СУБД. Это означает, что вещи нужно хранить и грамотно индексировать. Для традиционных систем СУБД это простой способ сохранить xml в виде большого двоичного объекта (двоичного объекта). Но большие двоичные объекты, как правило, не индексируются и находятся в основном за пределами основного хранилища данных. Для правильного анализа xml система должна входить в xml при хранении. MonetDB, по-видимому, делает это.
Ответ №7:
Начиная с DB2 Viper, IBM DB2 начала предоставлять встроенную поддержку хранения XML-данных, а также запросов к XML-данным.
DB2 предназначена для оптимизации доступа к XML и реляционным данным, и эти возможности доступны для C , .NET, COBOL, Java и PHP.
XQuery-это новый язык, используемый для запроса xml-данных в DB2
демонстрационный запрос:
create table person(name varchar(20), data xml);
insert into person values('bane', XMLPARSE(DOCUMENT '
<person>
<first-name>Tom</first-name>
<last-name>Hardy</last-name>
<mobile>89898989</mobile>
</person>
' STRIP WHITESPACE))
some simple xQueries
SELECT *
FROM googolplex.person
WHERE xmlexists('$s[person/first-name="bane"]' PASSING person AS "s");
Ответ №8:
Обязательно попробуйте MS-SQL, Oracle и другие существующие системы, поддерживающие XQuery.
Но, если запросы на основе XML, которые вам понадобятся, известны заранее, может быть проще просто сохранить XML в большом двоичном объекте и добавить одно или два индексированных поля с копией соответствующих XML-элементов.