2011-10-10 17 views
8

Ho un xml piuttosto grande (> 10mb nella dimensione & 40+ elementi). Attualmente memorizziamo tale xml in Oracle db e usiamo xquery per interrogare e recuperare parti di xml. Questo processo è lento e richiede molte chiamate db. Stiamo esplorando mongodb per memorizzare questo xml e interrogarlo. Ho appena convertito il xml in json e caricato in una raccolta di mongo e ha memorizzato i dati enormi di JSON in un attimo. E memorizza i nodi xml come documenti nidificati. Ma quando interrogo (usando find) per un elemento interno più, restituisce sempre l'intero documento, contenente anche i nodi con valori di elementi non corrispondenti. Mi aspetto solo pochi nodi che corrispondono al valore del nodo dato. Fammi sapere se esiste un modo migliore per archiviare file xml di grandi dimensioni in mongo db. E fammi sapere come recuperare i nodi interni con valori esatti specificati nella query. Grazie in anticipo.Memorizzazione di XML di grandi dimensioni in MongoDB

risposta

3

Ci sono diversi fatti che si dovrebbe tenere a mente:

Numero 1- MongoDB restituisce solo l'intero documento a seconda che ha colpito o no, non v'è alcuna funzione per restituire solo una parte di essa (10 Ottobre 2011) e se hai bisogno di filtri devi implementarlo con il tuo codice personale.

Numero 2- prestare attenzione a elemmatch parola chiave. Indica di cercare alcuni hit solo nello stesso documento secondario ma non htourghout sull'intero documento, quindi potresti essere confuso qui.

numero 3 - non c'è la giusta strategia per dividere il vostro aggregato in collezione in mongo rispetto a RDBMS-s. Quindi una diversa rappresentazione dei dati potrebbe risolvere il tuo caso.

Numero 4 - nonostante il numero 3 un'osservazione circa il "modo giusto", v'è una raccomandazione generale per mantenere i vostri documenti dimensione inferiore a 10 MB

+0

È possibile utilizzare le proiezioni per ottenere una parte di un documento: https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/ –

10

Hai mai pensato di provare un database XML aggiornato, come BaseX (http://basex.org)? Potrebbe darti risultati migliori, in particolare se hai già usato XQuery.

5

Ho avuto lo stesso problema. Nel mio caso il nodo di primo livello in ogni file XML conteneva sempre un enorme elenco di nodi più piccoli, quindi alla fine ho archiviato questi elementi. Per farlo, ho scritto il mio strumento da riga di comando xml-to-json. L'ho usato per convertire 10 GB di dati XML in JSON, in un formato che può contenere mongoimport.

Problemi correlati