Speichern von XML-Daten in der Datenbank - viele Tabellen vs. Dumping von xml in einer Spalte

7

Ich möchte eine XML-Datei speichern, die ich in meinem Java-Webdienst erhalte. Berichte würden alle 5 Minuten ausgeführt, um einige Daten in den XML-Elementen zu ziehen.

Ich dachte an zwei Ansätze, um dieses Problem zu lösen.

  1. Erstellen Sie mehrere Tabellen in der Datenbank, um die XML-Daten zu erfassen. Grundsätzlich hat jedes Element eine eigene Spalte in der Datenbank.

  2. Dump das gesamte XML in einer Spalte, die XML-Daten speichern kann. Analysieren Sie den Wert für die Berichterstellung in der Abfrage selbst.

Welcher der oben genannten Ansätze ist besser, besonders in Bezug auf die Leistung? Dies ist kritisch, da Berichte in sehr hoher Frequenz (alle 5 Minuten) generiert werden.

Das XML-Schema ist ziemlich kompliziert und nicht einfach.

    
Maximus 13.07.2011, 21:28
quelle

6 Antworten

8

Wenn Daten einmal geschrieben und oft abgefragt werden, ist es mit ziemlicher Sicherheit effizienter, das XML-Dokument einmal zu analysieren, die Daten in einem geeigneten relationalen Schema zu speichern und das relationale Schema abzufragen. Das Analysieren von XML ist nicht billig, so dass der Aufwand für das Parsen potenziell mehrerer XML-Dokumente alle 5 Minuten erheblich sein kann.

Wie bei allen Leistungsfragen kann Ihre Laufleistung natürlich variieren, so dass es sich lohnt, sie zu testen. Wenn Sie Oracle 11.2 verwenden und die Daten als binäres XML speichern (in diesem Fall wird es nach dem Parsen gespeichert), und Sie erstellen geeignete XMLIndexes für die XMLTypes, die Sie speichern, kann dies zu einer Leistungseinbuße für das Verlassen der Daten im XML-Dokument führen ziemlich klein. Es sollte immer noch langsamer als eine richtige relationale Struktur sein, aber der Unterschied ist möglicherweise für Sie nicht sinnvoll.

Persönlich würde ich den relationalen Speicheransatz im Allgemeinen bevorzugen, auch wenn ich die Performance-Probleme ignoriere, da dies es anderen erleichtert, mit den Daten zu interagieren. Es gibt viel mehr Entwickler, die anständiges SQL schreiben können, als anständige XPath-Ausdrücke schreiben können, und es gibt weit mehr Abfragetools, die Berichte aus relationalen Tabellen generieren können, als Berichte aus XML in einer Datenbank erzeugen können.

    
Justin Cave 13.07.2011, 21:42
quelle
5

Maximus, Es hängt wirklich davon ab, was Sie mit den XML-Daten machen wollen.

Wenn ich XML zu Kontrollzwecken verwende, z. B. um zu konfigurieren, wie eine Seite angezeigt wird, speichere ich das gesamte XML in einem einzigen BLOB-Feld. Es ist schnell und extrem einfach. Es ist eine einfache Routine zum Speichern und Laden. Sie können das XML im BLOB-Feld leicht anzeigen und bearbeiten.

Wenn Sie nach Werten innerhalb des XML suchen oder Berichte dazu erstellen müssen, z. B. wie viele Kunden ein bestimmtes Attribut haben, möchten Sie wahrscheinlich einzelne Attribute analysieren. Dies bedeutet im Allgemeinen, dass Sie einige Vor- und Nachbearbeitungen durchführen müssen, aber Sie können schnell zu einzelnen Attributen gelangen.

    
Brian Hoover 13.07.2011 21:43
quelle
4

Adhoc-Zugriff

Wenn Sie effiziente Abfragen für die XML-Daten ad hoc oder auf beliebige Art ausführen müssen, sollten Sie sie in Tables und Columns analysieren, die logisch indexiert und verknüpft sein können.

Eingeschränkter Zugriff

Wenn Sie die Daten nur speichern und basierend auf anderen Kriterien wie einer eindeutigen ID oder einem anderen Schlüssel bereitstellen und das XML im Wesentlichen ein undurchsichtiges BLOB ist, speichern Sie es einfach in einer Spalte BLOB und be damit gemacht.

Hybridmodell

Was Sie wahrscheinlich brauchen, ist etwas dazwischen, wo das XML in einem BLOB gespeichert wird und nur relevante Bits in Tables und Columns gespeichert werden, so dass Sie effektiv nach den XML-Nutzdaten suchen können.

    
Jarrod Roberson 13.07.2011 21:42
quelle
1

Ohne etwas mehr zu wissen, ist es schwer zu sagen, aber höchstwahrscheinlich fehlt Ihnen ein wichtiger Teil, der das Leben sehr vereinfachen kann.

  1. Bindung von XML an POJOs (JAXB, MOXy oder JibX)
  2. Speichern Sie als normalisierte Spalten von POJO (verwenden Sie jDBI, Hibernate oder sogar einfache JDBC-Vorlagen)

Je nachdem, welche Art von Berichten Sie erstellen, sollten Sie auch die Möglichkeit in Betracht ziehen, Daten nur im Speicher zu behalten. Alle fünf Minuten klingt das nicht nach Leistung, aber auch hier ist nicht immer Persistenz gefragt Daten oder Backups).

    
StaxMan 13.07.2011 21:52
quelle
1

Wenn Sie mehr als ein paar XML-Dokumente speichern und abfragen müssen, sollten Sie eine XML-Datenbank verwenden.

eXist ist nett, behalte diese xmls in einer Spalte oder widerspringe sie in vielen Tabellen ist eine schlechte Option, denke ich ..

    
cuq 13.07.2011 22:13
quelle
0

Sie können auch den Spaltentyp XMLData in Sqlserver oder Xml Type in Oracle auschecken Ссылка

Sie könnten berechnete Spalten in Ihrer xml-Datenspalte für die am meisten abgefragten XML-Felder erstellen, die bei schnelleren Abrufen helfen würden. Um einen bestimmten Wert an einem bestimmten xpath abzurufen, müssen Sie den xpath nur an sqlserver übergeben, damit er den Wert an diesem xpath an Sie zurückgibt.

    
vanval 23.07.2014 17:52
quelle

Tags und Links