Хранение большого XML в MongoDB - PullRequest
8 голосов
/ 10 октября 2011

У меня довольно большой XML (размером> 10 МБ и более 40 элементов). В настоящее время мы храним такой XML в Oracle db и используем xquery для запроса и извлечения частей XML. Этот процесс медленный и требует много вызовов дб. Мы изучаем mongodb, чтобы сохранить этот XML и запросить его. Я просто преобразовал xml в json и загрузил в коллекцию mongo, и он мгновенно сохранил огромные данные json. И он хранит узлы XML как вложенные документы. Но когда я запрашиваю (используя find) самый внутренний элемент, он всегда возвращает весь документ, содержащий также узлы с несоответствующими значениями элемента. Я ожидаю только несколько узлов, которые соответствуют данному значению узла. Дайте мне знать, если есть лучший способ хранить такие большие XML-файлы в Mongo DB. А также дайте мне знать, как получить внутренние узлы, имеющие точные значения, указанные в запросе. Заранее спасибо.

Ответы [ 5 ]

10 голосов
/ 17 октября 2011

Задумывались ли вы о том, чтобы попробовать обновленную базу данных XML, такую ​​как BaseX (http://basex.org)? Это может дать вам гораздо лучшие результаты, в частности, если вы уже использовали XQuery.

5 голосов
/ 01 ноября 2012

У меня была такая же проблема. В моем случае узел верхнего уровня в каждом XML-файле всегда содержал огромный список меньших узлов, поэтому я вместо этого сохранил эти элементы. Для этого я написал собственный инструмент командной строки xml-to-json . Я использовал его для преобразования 10 ГБ данных XML в формат JSON в формате, который может mongoimport .

3 голосов
/ 10 октября 2011

Есть несколько фактов, которые вы должны иметь в виду:

Номер 1- MongoDB возвращает только весь документ в зависимости от того, попал он или нет, нет возможности вернуть только его часть (10 октября 2011 г.), и если вам нужна фильтрация, у вас есть реализовать его с вашим собственным кодом.

Номер 2- обратите внимание на ключевое слово elemmatch . Это указывает на поиск некоторых совпадений только в одном и том же под-документе, но не во всем документе, так что вы можете быть смущены здесь.

Номер 3 - неверная стратегия разделения вашего агрегата на коллекцию в монго по сравнению с СУБД. Такое разное представление данных может решить ваш случай.

Номер 4 - несмотря на замечание № 3 о «неправильном пути», существует общая рекомендация хранить ваши документы размером менее 10 МБ

2 голосов
/ 12 октября 2011

Вы должны взглянуть на базу данных Sausalito XML: http://www.28msec.com. Она использует MongoDB в качестве хранилища данных.

1 голос
/ 10 октября 2011

Это поведение фильтрации многоуровневого внедренного документа, обычно соответствующий фильтр возвращает весь документ, а не подмножества.

Проверьте мои ответы для mongodb-querying-array-elements-in-a-document и как найти соответствующую запись в mongodb для больше информации

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...