2011-01-12 16 views
8

Ich bin ziemlich aufgeregt über die neue Mysql XMl Functions.Leistung von MySql Xml-Funktionen?

Jetzt kann ich endlich etwas wie "objektorientierte" Dokumente in meine oldschool relationale Datenbank einbetten.

Betrachten Sie als Beispiel einen Benutzer, der auf Ihrer Website mit facebook connect singt. Sie können ein Objekt für den Benutzer mit der Grafik 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 usw. hinzugefügt werden.

Nun, wenn Sie gerade in sehr speziellen Bereichen interessiert sind (zum Beispiel Freunde Beziehungen, Geschlecht, Filme ...), können Sie sie in Ihre relationale Datenbank Schema projizieren.

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

Aber was wird die Leistung sein?

Zum Beispiel habe ich eine Tabelle mit 50 000 Einträge, die Benutzer darstellen. Ich habe eine Enum-Feld, das "male", "female "(oder verschiedene andere Geschlechter politisch korrekt sein) heißt.

Die Leistung von zum Beispiel alle Männer holen sehr schnell sein wird.

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

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

  • Kann ich einen Index maby irgendwie auf spezifi setzen Ed XPath Auswahlen?

  • Wie arbeiten Feldtypen mit dieser Funktion/Leistung zusammen? Varchar/Blob?

  • Benötige ich Volltextindizes?

Auf meine Frage zusammenzufassen:

Mysql XML functins groß. 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, in denen interne Scans/Sortierung/Vergleich/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?

+0

Ich bin immer noch total verrückt, dass diese in erster Linie existieren. Als ich Ihren Link sah, dachte ich, das wäre ein alter Aprilscherz Witz :) –

+0

tröstliche Tatsache, dass nicht einmal Sie alle wissen;) –

+0

Ich bin eigentlich nicht so toll in mySQL darüber hinaus, was ein Web-Entwickler jeden Tag braucht. Ich bin immer noch ratlos darüber, wie * ich * der # 6 Benutzer im Tag wurde :) –

Antwort

1

Ich neige dazu, ähnliche Kommentare wie Pekka zu machen, aber ich denke, der Grund, warum wir das nicht auslachen 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 nicht über die Leistung auf MySQL erzählen. Ich habe es in SQL Server gesehen, getestet und festgestellt, dass SQL Server führt im Speicher XML-Extraktionen sehr langsam, für mich schien es, als ob es von der Festplatte lesen würde, aber das ist ein bisschen übertrieben. Andere mögen das bestreiten, aber das habe ich gefunden.

"Kann Mysql Dokument orientierte 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 dokumentenorientierten 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.

Wenn es bestimmte Unterdokumente gibt, von denen Sie wissen möchten, dass Sie darüber Bescheid wissen möchten, können Sie eine untergeordnete Tabelle "HasDocs" erstellen, eine kleine Vorverarbeitung durchführen und sie mit Namen von sub füllen -Docs mit ihren Zählungen. Dies würde eine schnellere statistische Analyse ermöglichen und das Auffinden von Dokumenten mit bestimmten Unterdokumenten beschleunigen.

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