Hierarchische Daten in Datenbank abspeichern
-
Hallo,
ich bin gerade in der Evaluationsphase wie ich am besten (relativ) generische, hierarchische Datensätze abspeichere. Im Grunde ist es sowas wie "Zeitstempel, paar Metadaten, ein Baum". Den Baum kann man sich durchaus als XML-Datei vorstellen. Die Daten lassen sich leider nicht so direkt in ein festes Schema klopfen (jedes Element kann andere Attribute haben) und da ich sicher nicht der erste bin, der sowas machen will, frage ich einfach mal euch: wie macht man das? Gibt da ja inzwischen auch die ganzen neuen DBMS der NoSQL Bewegung. Wäre mir damit evtl. eher geholfen? So wie ich es derzeit sehe könnte ich höchstens von der effizienten Datenspeicherung des traditionellen DBMS Gebrauch machen (im Vergleich zum Speichern der Daten in einer XML-Datei). Das Einfügen und Auslesen müsste weitestgehend im Code geschehen, da die Datenbank darüber ja nichts weiß und ich nicht jedes mal die Tabellen anpassen will, oder neue hinzufügen, falls etwas dazu kommt.
-
Du kannst ein DBMS verwenden das XML Spalten kann, und dann direkt XML abspeichern. Und mit "XML Spalten können" meine ich dass man auch XML Indexe auf die XML Spalten machen kann, und da drinnen dann mit XQuery (performant) suchen. MS SQL Server kann das z.B. (spätestens ab der 2005er Version).
Das funktioniert richtig gut.
Ausgenommen vielleicht wenn man sehr oft auf irgendwelche Werte JOINen muss die in diesem XML vorkommen - das könnte nämlich langsam werden.Du kannst ne Tabelle mit Spalten ala (ID int, Parent_ID int NULL, Name varchar, Value varchar) machen, und über die Parent_ID Spalte deinen Baum aufziehen.
Das funktioniert richtig schlecht
Also es geht natürlich perfekt was Relational Integrity und das alles angeht, macht auch keine Fehler, aber es wird recht schnell recht langsam.
Kann man noch etwas optimieren indem man z.B. redundanterweise die ID der Root-Node in jeder Zeile abspeichert, aber bei vielen Abfragen wird das auch nicht oder nicht genug helfen.Oder du kannst alles in eine String-Splate (varchar/text) stopfen, und dann dein Programm selbst diese Strings formatieren/parsen lassen. Dabei kannst du als Format natürlich auch XML nehmen, nur dass du dann keinen Support von der DB mehr bekommst. Bzw. keinen vernünftigen.
Das kann auch richtig gut funktionieren, SO LANGE man nie in dieser Spalte suchen muss/nicht danach filtern muss, bzw. die Daten darin sonstwie "interpretieren".Das sind die Möglichkeiten die ich dir mit klassischen relationalen Datenbanken anbieten kann.
Mit "nosql" Systemen hab ich keine Erfahrung.