2010-03-09 3 views
10

Hierarchische Datenstrukturen werden oft in relationalen Datenbanken gespeichert. Diese Art von Speicher ist flexibel, aber flach, daher muss die Baumstruktur mit jeder Abfrage erstellt werden. Ich möchte Forumsbeiträge als Baumstruktur speichern, aber es sollte möglich sein, effizient nachzufragen, zum Beispiel Posts nach Datum oder Autor auszuwählen.Wie speichert man Baumstrukturen in Java?

Ich hätte gerne eine Open-Source-Datenbank, die von Java zugänglich ist.

Was ist der beste Weg? CouchDB? neo4j? ...?

+1

Wie wäre es mit einem ORM? –

+1

Ein ORM würde die Handhabung erleichtern, aber die zugrunde liegende Datenstruktur würde immer noch relational bleiben und wahrscheinlich wäre die Leistung nicht so gut. – deamon

+0

Siehe auch: [Was sind die Optionen zum Speichern hierarchischer Daten in einer relationalen Datenbank?] (Http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in- a-relationale Datenbank) – cbare

Antwort

7

Als ich das erste Mal auf dieses Problem stieß, habe ich den großartigen Artikel gefunden (link).

In tho Worten: in RDBMS Welt gibt es zwei Hauptbaummodell-Speicheransätze:

  • Die Adjazenzliste Modell
  • Das Nested Set
+0

Der Artikel ist nur mit Oracle-Login verfügbar. – zellus

+0

Link wurde aktualisiert (denselben Artikel an einem anderen Ort gefunden) –

+0

danke für die schnelle Reaktion. – zellus

4

hier ein great article auf Neo4j ist. Im Allgemeinen sieht es so aus, als wäre neo4j die beste Option, da Dokumentdatenbanken immer noch relativ flach sind und zu einigen awkward setup führen können (immer noch machbar).

Neo4j, eine Graphdatenbank zu sein, sollte eine solide Passform für die Speicherung Ihrer Struktur sein. Ich habe es nie benutzt, aber angesichts Ihrer Problemdomäne scheint es die beste Option zu sein (zumindest diejenige, die zuerst untersucht wird).

Soweit was der "beste Weg" ist, denke ich, dass hängt von Ihrer Implementierung und Anforderungen ab. Ich denke, Sie sollten einen einfachen Test gegen eine Graphdatenbank, eine Dokumentendatenbank, eine object database und eine relationale Datenbank (oder nicht) schreiben und sehen, welche zu dem Problem passt, das Sie zu lösen versuchen.