2011-10-10 12 views
8

Mam dość duży xml (> 10mb w rozmiarze & 40+ elementów). Obecnie przechowujemy taki xml w Oracle db i wykorzystujemy xquery do wysyłania zapytań i pobierania części xml. Ten proces jest powolny i wymaga wielu wywołań db. Badamy mongodb, aby zapisać ten xml i zapytać go. Po prostu przekonwertowałem xml na json i wczytałem do kolekcji mongo i szybko zapisałem ogromne dane json. I przechowuje węzły XML jako zagnieżdżone dokumenty. Ale kiedy zapytanie (przy użyciu find) dla najbardziej wewnętrznego elementu, zawsze zwraca cały dokument, zawierający również węzły o nieodpowiednich wartościach elementów. Oczekuję tylko kilku węzłów, które pasują do podanej wartości węzła. Daj mi znać, jeśli istnieje jakikolwiek najlepszy sposób przechowywania tak dużych plików xml w Mongo db. A także daj mi znać, jak odzyskać wewnętrzne węzły o dokładnych wartościach określonych w zapytaniu. Z góry dziękuję.Przechowywanie dużych plików XML w MongoDB

Odpowiedz

3

Istnieje kilka faktów należy pamiętać:

numer 1- MongoDB zwraca tylko cały dokument w zależności od tego, czy to hit, czy nie, nie ma funkcji, aby wrócić tylko jego część (10 Październik 2011) i jeśli potrzebujesz filtrowania, musisz go zaimplementować za pomocą własnego kodu.

Numer 2- należy zwrócić uwagę na słowo kluczowe elemmatch. Wskazuje, aby wyszukiwać niektóre trafienia tylko w tym samym poddokumentu, ale nie htourghout całego dokumentu, więc możesz być zdezorientowany tutaj.

Numer 3 - nie ma właściwej strategii dzielenia agregatu na kolekcję w mongo w porównaniu do RDBMS-ów. Tak więc inna reprezentacja danych może rozwiązać twoją sprawę.

Number 4 - mimo numer 3 uwagą o „braku właściwej drodze”, istnieje ogólne zalecenie, aby zachować dokumenty rozmiar mniejszy niż 10 MB

+0

Możesz użyć prognoz, aby uzyskać część dokumentu: https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/ –

10

Czy zastanawiałeś się nad wypróbowaniem aktualnej bazy danych XML, takiej jak BaseX (http://basex.org)? Może to dać lepsze wyniki, w szczególności, jeśli i tak użyłeś XQuery.

5

Miałem ten sam problem. W moim przypadku węzeł najwyższego poziomu w każdym pliku XML zawsze zawierał olbrzymią listę mniejszych węzłów, więc ostatecznie zapisałem te elementy. Aby to zrobić, napisałem własne narzędzie wiersza poleceń xml-to-json. Użyłem go do konwersji 10 GB danych XML do JSON, w formacie, który może jeść mongoimport.

Powiązane problemy