У меня есть система, которая генерирует большое количество XML-документов каждый день (порядка 1 миллиона), и я хотел бы иметь возможность хранить и индексировать их, чтобы я мог, например, искать все документы с определенным полем. установить на заданное значение.
Я понимаю, что существует два основных типа баз данных XML: те, которые обеспечивают поддержку XML поверх обычной реляционной базы данных, и те, которые являются «родной» базой данных XML. Что бы вы порекомендовали, учитывая, что я готов использовать любой из них?





Я не могу предложить вам хорошего кандидата, но если вы хотите избежать выбора плохого, избегайте Oracle XmlDB. Он медленный и чертовски глючный. Одно из худших расширений Oracle для своей СУБД.
По словам людей, которые работали над этим, monetDB вполне может обрабатывать xml. По сути, когда вы хотите выполнить xquery для содержимого, вам нужно иметь что-то, что может делать это правильно. Структура XML-документа, который является очень гибким и неопределенной длины, в корне отличается от структуры rdbms. Это означает, что вещи нужно хранить и индексировать с умом. Для традиционных систем dbms это простой ярлык для хранения xml как BLOB (двоичного объекта). Но большие двоичные объекты обычно не индексируются и находятся в основном вне основного хранилища данных. Чтобы правильно проанализировать xml, система должна войти в xml при сохранении. MonetDB, по-видимому, делает это.
Microsoft SQL Server поддерживает столбцы XML. Это больше, чем просто поддержка BLOB / TEXT.
Вы можете использовать столбцы 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.)
Обязательно попробуйте MS-SQL, Oracle и другие существующие системы, поддерживающие XQuery.
Но если запросы на основе XML, которые вам понадобятся, известны заранее, может быть проще просто сохранить XML в BLOB и добавить одно или два индексированных поля с копией соответствующих элементов XML.
Возможна версия DB2 9.x с поддержкой PureXML.
Вы также можете проверить Сервер MarkLogic или существовать.
Если у вас средний объем контента (пара ГБ), то подойдет eXist. Помимо этого, вы, вероятно, захотите изучить MarkLogic.
Вы можете скачать и проверить оба из них, поскольку eXist бесплатен, а у MarkLogic есть лицензия сообщества, с которой вы можете поиграть.
Если вы ищете собственный XML db, я определенно рекомендую Sedna. Блестящая поддержка разработчиков.
Начиная с 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");
Спасибо, я только что изучал это.