2010-03-09 11 views
10

Hierarchiczne struktury danych są często przechowywane w relacyjnych bazach danych. Ten rodzaj pamięci jest elastyczny, ale płaski, więc struktura drzewa musi być budowana przy każdym zapytaniu. Chcę przechowywać posty na forum jako strukturę drzewa, ale powinno być możliwe wydajne wysyłanie zapytań, np. Wybór postów według daty lub autora.Jak przechowywać struktury drzewiaste w Javie?

Chciałbym mieć bazę danych open source, która jest dostępna z poziomu Java.

Jaki jest najlepszy sposób na zrobienie tego? CouchDB? neo4j? ...?

+1

Co powiesz na ORM? –

+1

ORM sprawiłoby, że obsługa byłaby wygodniejsza, ale podstawowa struktura danych nadal byłaby relacyjna i prawdopodobnie wydajność nie byłaby tak dobra. – deamon

+0

Zobacz też: [Jakie są opcje przechowywania danych hierarchicznych w relacyjnej bazie danych?] (Http://stackoverflow.com/questions/4048151/what-are-the-options- for-storing-hierarchical-data-in- a-relacyjna-baza danych) – cbare

Odpowiedz

7

Kiedy po raz pierwszy napotkałem ten problem, znalazłem świetny artykuł (link).

W tho słowy: w RDBMS świecie istnieją 2 główne przechowywanie modelu drzewo zbliża:

  • przylegania listy Model
  • zagnieżdżonego Set model
+0

Artykuł dostępny jest tylko z loginem oracle. – zellus

+0

Link został zaktualizowany (znajdował ten sam artykuł w innym miejscu) –

+0

dzięki za szybką reakcję. – zellus

4

Oto great article na Neo4j. Ogólnie wygląda na to, że neo4j jest najlepszą opcją, ponieważ bazy danych dokumentów są nadal stosunkowo płaskie i mogą powodować, że niektóre z nich będą miały wartość awkward setup (nadal możliwe do wykonania).

Neo4j, będący bazą danych wykresów, powinien dobrze pasować do przechowywania Twojego drzewa. Nigdy go nie używałem, ale biorąc pod uwagę domenę problemową, wydaje się najlepszą opcją (przynajmniej tą, którą najpierw należy zbadać).

Jeśli chodzi o "najlepszy sposób", myślę, że zależy to od wdrożenia i wymagań. Myślę, że powinieneś napisać prosty test przeciwko bazie danych wykresów, bazy danych dokumentów, object database i relacyjnej bazie danych (lub nie) i zobaczyć, który z nich pasuje do problemu, który próbujesz rozwiązać.

Powiązane problemy