Speichern großer XML-Dateien in MongoDB

8

Ich habe ein ziemlich großes xml (& gt; 10 MB groß und 40+ Elemente). Derzeit speichern wir solche XML-Dateien in Oracle db und verwenden xquery, um Teile der XML-Datei abzufragen und abzurufen. Dieser Prozess ist langsam und benötigt viele db-Aufrufe. Wir untersuchen mongodb, um dieses XML zu speichern und abzufragen. Ich justed konvertierte das XML in JSON und geladen in eine Mongo-Sammlung und es speicherte die riesigen JSON-Daten in einem Flash. Und es speichert die XML-Knoten als verschachtelte Dokumente. Aber wenn ich (mit find) nach einem innersten Element abfrage, gibt es immer das gesamte Dokument zurück, das auch Knoten mit nicht übereinstimmenden Elementwerten enthält. Ich erwarte nur wenige Knoten, die dem angegebenen Knotenwert entsprechen. Lassen Sie mich wissen, ob es am besten ist, solche großen XML-Dateien in Mongo Db zu speichern. Und lassen Sie mich wissen, wie Sie die inneren Knoten mit genauen Werten in der Abfrage abrufen können. Vielen Dank im Voraus.

    
Venkiram 10.10.2011, 10:59
quelle

5 Antworten

10

Haben Sie darüber nachgedacht, eine aktuelle XML-Datenbank wie BaseX (http://basex.org) auszuprobieren? Es kann Ihnen viel bessere Ergebnisse geben, insbesondere wenn Sie XQuery schon einmal benutzt haben.

    
Hannes Bauer 17.10.2011 00:06
quelle
5

Ich hatte das gleiche Problem. In meinem Fall enthielt der Knoten der obersten Ebene in jeder XML-Datei immer eine riesige Liste von kleineren Knoten, so dass ich diese Elemente stattdessen speicherte. Um dies zu tun, schrieb ich mein eigenes xml-to-json Befehlszeilenwerkzeug. Ich habe es verwendet, um 10 GB XML-Daten in JSON zu konvertieren, in einem Format, das mongoimport essen kann.

    
sinelaw 01.11.2012 02:33
quelle
3

Es gibt mehrere Fakten, die Sie beachten sollten:

Nummer 1 - MongoDB gibt nur das gesamte Dokument zurück, je nachdem, ob es getroffen wurde oder nicht, es gibt keine Funktion, die nur einen Teil davon zurückgibt (10. Oktober 2011) und wenn Sie gefiltert werden müssen muss es mit Ihrem eigenen Code implementieren.

Nummer 2 - Achten Sie auf das Schlüsselwort elemmatch . Es gibt an, nur im selben Filialdokument nach einigen Treffern zu suchen, aber nicht das gesamte Dokument zu durchsuchen, so dass Sie hier möglicherweise verwirrt sind.

Nummer 3 - Es gibt keine richtige Strategie, um Ihr Aggregat in Mongo im Vergleich zu RDBMS-s in eine Sammlung zu unterteilen. So könnte eine andere Datendarstellung Ihren Fall lösen.

Nummer 4 - Trotz der Bemerkung von Nummer 3 über den "nicht richtigen Weg" gibt es eine generelle Empfehlung, Ihre Dokumente auf weniger als 10 MB zu beschränken

    
Yurii Hohan 10.10.2011 13:03
quelle
2

Sie sollten sich die Sausalito XML-Datenbank ansehen: Ссылка . Es verwendet MongoDB als Datenspeicher.

    
wcandillon 12.10.2011 07:19
quelle
1

Dies ist das Verhalten beim Filtern von eingebetteten Dokumenten mit mehreren Ebenen. Normalerweise würde der passende Filter das gesamte Dokument und nicht die Teilmengen zurückgeben.

Sehen Sie sich meine Antworten für mongodb-querying-array- an. elements-in-a-document und how-to-find-the-matched-record-in-mongodb für weitere Informationen

Vielleicht können Sie das Beispiel-XML-Schema hinzufügen, das Sie gerade haben. Jemand wird Ihnen helfen, die App zu strukturieren.

    
RameshVel 10.10.2011 12:16
quelle

Tags und Links