Leistung von MySql Xml-Funktionen?

8

Ich bin ziemlich aufgeregt über die neuen Mysql XMl-Funktionen .

Jetzt kann ich endlich etwas wie "objektorientierte" Dokumente in meine relationale Datenbank der alten Schule einbetten.

Betrachten Sie als Beispiel einen Benutzer, der mit facebook connect auf Ihrer Website singt. Sie können ein Objekt für den Benutzer mit dem Graphen API abrufen und nette Informationen erhalten. Diese Information kann jedoch stark variieren. Einige Felder können festgelegt werden oder nicht, einige können im Laufe der Zeit hinzugefügt werden usw.

Wenn Sie nur in sehr speziellen Bereichen interessiert sind (z. B. Beziehungen zu Freunden, Geschlecht, Filme ...), können Sie sie in Ihr relationales Datenbankschema projizieren.

Mit den XMl-Funktionen können Sie jedoch das gesamte Objekt in einem Feld speichern und dann können Ihre verschiedenen Modelle auf die Daten zugreifen, indem Sie ExtractValue Funktion. Sie können alles sofort speichern, ohne sich sorgen zu müssen, was Sie später brauchen.

Aber was wird die Aufführung sein?

Zum Beispiel habe ich eine Tabelle mit 50 000 Einträgen, die Benutzer darstellen. Ich habe ein enum-Feld, das "male", "female "angibt (oder verschiedene andere Geschlechter, um politisch korrekt zu sein).

Die Leistung zum Beispiel, alle Männchen zu holen, wird sehr schnell sein.

  • Aber was ist mit etwas wie WHERE ExtractValue(userdata, '/gender/') = 'male' ?

  • Wie wird die Leistung variieren, wenn das Objekt größer wird?

  • Kann ich irgendwie einen Index auf die angegebenen xpath-Auswahlen setzen?

  • Wie funktionieren Feldtypen mit dieser Funktion / Performance? Varchar / Blob?

  • Brauche ich Volltextindizes?

Um meine Frage zusammenzufassen:

Mysql XML-Funktionen sehen gut aus. Und ich bin sicher, sie sind wirklich großartig, wenn Sie nur strukturierte Daten speichern möchten, die Sie in Ihrer Anwendung abrufen und analysieren.

Aber wie stehen sie in Verfahren, bei denen interne Scans / Sortierungen / Vergleiche / Berechnungen durchgeführt werden?

Kann Mysql dokumentorientierte Datenbanken wie CouchDB / Sesame ersetzen?

Was sind die Vorteile und Kompromisse von XML-Funktionen?

Wie und warum sind sie besser / schlechter als eine dynamische Anwendung, die verschiedene Daten als Attribute speichert?

Zum Beispiel eine Schlüssel / Wert-Tabelle mit einem XPath als Schlüssel und dem Wert als Wert, der mit der Dokumenteinheit verbunden ist.

Hat jemand andere Erfahrungen damit gemacht oder hat etwas Erwähnenswertes bemerkt?

    
The Surrican 12.01.2011, 11:37
quelle

1 Antwort

1

Ich neige dazu, Kommentare zu machen, die Pekka ähnlich sind, aber ich denke, der Grund, warum wir das nicht auslassen können, ist Ihre Aussage "Diese Information kann jedoch sehr variieren." Das bedeutet, dass es nicht realistisch ist, alles zu parsen und in die Datenbank zu projizieren.

Ich kann nicht alle Ihre Fragen beantworten, aber ich kann einige von ihnen beantworten.

Vor allem kann ich Ihnen über die Leistung von MySQL nicht berichten. Ich habe es in SQL Server gesehen, getestet und festgestellt, dass SQL Server im Speicher XML-Extraktionen sehr langsam ausführt, für mich schien es, als ob es von der Festplatte lesen würde, aber das ist ein bisschen ein Übertreibung. Andere mögen das bestreiten, aber das habe ich gefunden.

"Kann Mysql dokumentenorientierte Datenbanken wie CouchDB / Sesame ersetzen?" Diese Frage ist ein wenig zu weit gefasst, aber in Ihrem Fall können Sie bei Verwendung von MySQL die ACID-Konformität für diese XML-Chunks beibehalten, vorausgesetzt, Sie verwenden InnoDB, was für einige dieser dokumentorientierten Datenbanken nicht automatisch angegeben werden kann.

"Wie und warum sind sie besser / schlechter als eine dynamische Anwendung, die verschiedene Daten als Attribute speichert?" Ich denke, das ist wirklich eine Frage des Stils. Sie erhalten XML-Blöcke, die (vermutlich) dokumentiert sind und MySQL kann sie navigieren. Wenn Sie sie einfach behalten, sparen Sie einen Schritt. Was würde gewonnen werden, wenn man sie in etwas anderes umwandelt?

Die MySQL-Dokumentation schlägt vor, dass die XML-Datei in ein Clob-Feld eingefügt wird. Bei größeren Dokumenten kann die Leistung leiden. Vielleicht identifizieren Sie dann Unterdokumente, die Sie regelmäßig ausbrechen und in eine untergeordnete Tabelle einfügen möchten.

Entlang dieser Zeilen können Sie, wenn Sie bestimmte Unterdokumente kennen, über die Sie Bescheid wissen möchten, eine untergeordnete Tabelle erstellen, "HasDocs", eine kleine Vorverarbeitung vornehmen und sie mit Namen von Unterverzeichnissen füllen. dokumentiert mit ihren Zählungen. Dies würde eine schnellere statistische Analyse ermöglichen und es außerdem schneller machen, Dokumente mit bestimmten Unterdokumenten zu finden.

Ich wünschte, ich könnte mehr sagen, hoffe, das hilft.

    
Ken Downs 16.01.2011 02:41
quelle

Tags und Links