Announcement

Collapse
No announcement yet.

Wie optimiert wird xml in einem DB-Feld abgelegt?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie optimiert wird xml in einem DB-Feld abgelegt?

    hallo,
    ich habe da etwas verständnisprobleme zu xml in einem Datenbankfeld. Wenn ich mir ein einfaches xml-File anschaue dann habe ich, wenn ich meine relationale Datenbankbrille auf habe, das Gefühl dass die Tags unnötig oft aufgeführt werden. Wenn das 1:1 in der Datenbank liegen würde, hätte ich um ein vielfaches mehr Daten als wenn ich die Daten normalisiert über mehrere Tabellen verteilt ablegen würde.

    a) werden xml-Files intern nochmal optimiert in der Tabelle abgelegt?
    b) Falls a) zutrifft, gibt es dann Probleme wenn man in einem xml-Feld einer Tabelle viele verschiedenartige, also vom Aufbau und Struktur unterschiedliche xml-Daten ablegt? Beispielsweise ein xml für Fahrzeuge und dann eines für Adressen und dann wieder für Artikel.

  • #2
    Hallo openshinok,
    Originally posted by openshinok View Post
    a) werden xml-Files intern nochmal optimiert in der Tabelle abgelegt?
    Nein, es wird nur geparsed und es werden z.B. Leertags wie "<xml></xml>" in "<xml />" umgewandelt.

    Originally posted by openshinok View Post
    b) Falls a) zutrifft, gibt es dann Probleme wenn man in einem xml-Feld einer Tabelle viele verschiedenartige, also vom Aufbau und Struktur unterschiedliche xml-Daten ablegt? Beispielsweise ein xml für Fahrzeuge und dann eines für Adressen und dann wieder für Artikel.
    Wieso nur wenn a) zutrifft? Auch wenn es nicht optimiert wird ist diese Frage interessant.
    Was meinst du hier mit Problemen?
    Speichern: Du kannst in der XML-Spalte alles speichern was du möchtest. Es muss nur ein gültiges XML sein.
    Performance: Man sollte nicht über eine XML-Spalte suchen. In den meisten Fällen ist es besser beim Speichern des XMLs die Daten zu extrahieren die für Suchen relevant sind und diese in einem eigenen Feld abzulegen und ggf. dort einen Index drüber legen. Das kostet auch weniger Platz als z.B. ein Index über das ganze XML.

    lg chapster

    Comment


    • #3
      hallo,
      nahmen wir an ich habe nur eine Tabelle in folgender Form:
      tbl_xmldaten
      id mit int autoincrement und PK
      Spalte xml mit Datentyp xml

      Datensätze:
      1,'<mitarbeiter><name>Müller</name><name>Meier</name></mitarbeiter>'
      2, '<auftrag><id>123</id><datum>12.12.2010</datum></auftrag>'

      In diesem Fall, so nehme ich an, kann der SQL-Server die Daten nicht optimieren über mehrere Datensätze hinweg, da die xml-Struktur unterschiedlich ist. Die Frage ist ob xml tatsächlich 1:1 so im Feld steht mit allen Redundanzen. Beispielsweise bei Mitarbeiter wird der "name"-Tag für alle Mitarbeiter wiederholt was ja Speicherplatz kostet wenn es viele Mitarbeiter im XML gibt....

      Ich entnehme deiner Aussage dass man mit dem xml-Datentyp die Daten am SQL-Server ablegen kann, für performante Abfrage innerhalb des xmls sich jedoch etwas einfallen lassen muss. Bzw. der Where-Teil nicht wie normales T-SQL aussieht wenn man im xml sucht.

      Für mein Beispielfall könnte? ich evtl gar nicht richtig in xml suchen da die xml-Struktur unterschiedlich ist????

      Comment


      • #4
        Hallo,
        Originally posted by openshinok View Post
        In diesem Fall, so nehme ich an, kann der SQL-Server die Daten nicht optimieren über mehrere Datensätze hinweg, da die xml-Struktur unterschiedlich ist.
        Auch wenn der Inhalt jeder XML-Spalte gleich ist kann der Server nicht optimieren. Die Daten werden logisch als BLOB abgespeichert und Zeile für Zeile beim Lesen ausgepackt und geprüft.

        Originally posted by openshinok View Post
        Die Frage ist ob xml tatsächlich 1:1 so im Feld steht mit allen Redundanzen. Beispielsweise bei Mitarbeiter wird der "name"-Tag für alle Mitarbeiter wiederholt was ja Speicherplatz kostet wenn es viele Mitarbeiter im XML gibt....
        Wie der Server intern die Daten komprimiert weiß ich nicht genau, aber ich glaube, dass das wirklich so gespeichert wird wie es nach dem parsen aussieht.
        Originally posted by openshinok View Post
        Ich entnehme deiner Aussage dass man mit dem xml-Datentyp die Daten am SQL-Server ablegen kann, für performante Abfrage innerhalb des xmls sich jedoch etwas einfallen lassen muss. Bzw. der Where-Teil nicht wie normales T-SQL aussieht wenn man im xml sucht.
        z.B. könnte ein Select in deinem Beispiel so aussehen:[highlight=sql]select [xml]
        from tbl_xmldaten
        where xml.exist('//auftrag[id="123"]')=1[/highlight]
        Das durchsuchen eines XMLs kann sehr zeitintensiv sein. Es kommt allerdings immer darauf an wie schnell deine Maschine ist, wie viele Datensätze in der Tabelle sind und wie groß die XML-Spalte ist. Empfehlenswert ist es meiner Meinung nach nicht, in einem XML zu suchen. Wenn möglich extrahiere die Daten nach denen du suchen möchtest oder zumindest diejenigen nach denen oft gesucht wird.

        Originally posted by openshinok View Post
        Für mein Beispielfall könnte? ich evtl gar nicht richtig in xml suchen da die xml-Struktur unterschiedlich ist????
        doch, siehe beispiel oben. SQL-Server muss wie schon gesagt Zeile für Zeile das XML öffnen und prüfen

        lg chapster

        Comment

        Working...
        X