2011-01-22 16 views
51

Jaki rodzaj bazy danych NoSQL najlepiej nadaje się do przechowywania danych hierarchicznych?Jaki rodzaj bazy danych NoSQL najlepiej nadaje się do przechowywania danych hierarchicznych?

Powiedz na przykład chcę, aby przechowywać wiadomości forum o strukturze drzewa:

original post 
+ re: original post 
+ re: original post 
    + re2: original post 
    + re3: original post 
    + re2: original post 
+0

Mam analogiczny problem w moim modelu danych. Neo4j działa ładnie, ale nie skaluje się w poziomie. Myślałem, że MongoDB będzie lepszy, ale skoro nie możesz odzyskać osadzonych elementów "oryginalnego postu" bez znajomości schematu od najwyższego poziomu, jest on faktycznie gorszy od bazy danych wykresów. –

+2

@ Sridhar-Sarnobat Być może przyszłość należy do hybrydowych baz danych, takich jak [OrientDB] (http://www.orientdb.org/) lub [ArrangoDB] (http://www.arangodb.org/), które łączą bazy danych dokumentów i wykresów . Nawet PostgreSQL obsługuje obecnie dokumenty JSON. – deamon

+0

Dzięki za sugestię. Przyjrzę się bliżej tym –

Odpowiedz

7

To jest baza danych wykresów. Może być używany jako baza danych drzewa.

http://neo4j.com/

+3

Ponadto, kasy http://www.orientechnologies.com/ –

+1

Dziś widzę rzeczy wyraźniej i zgadzam się, że jest to typowa struktura wykresu. Mogłoby to oczywiście zostać zamodelowane jako dokument lub z relantional DB, ale wykres DB wydaje się być najlepiej pasuje. I tak, OrientDB jest zdecydowanie warte obejrzenia. – deamon

-2

Oto non-odpowiedź dla Ciebie. SQLServer 2008 !!!! Jest idealny do zapytań rekurencyjnych. Możesz też przejść do starej trasy i przechowywać dane hierarchii w oddzielnej tabeli, aby uniknąć rekursji.

Myślę, że relacyjne bazy danych bardzo dobrze nadają się do danych drzewiastych. Zarówno w wydajności zapytań, jak i łatwości użycia. Z jednym zastrzeżeniem .... będziesz wstawiał do tabeli indeksowanej i prawdopodobnie kilka innych indeksowanych tabel za każdym razem, gdy ktoś tworzy wpis. Wstaw wydajność może być problemem na forum kalibru facebook.

+4

Trzeba przynajmniej mówić o Common Table Expressions i/lub możliwościach XML tutaj, jako powód, dla którego SQL Server 2008 jest przydatny. – orangepips

+1

SQL ma typ danych 'hierarchid'; jednak sql jest powolny i niezgrabny. – theMayer

26

MongoDB i CouchDB oferują rozwiązania, ale nie wbudowanych w funkcjonalność. Zobacz to pytanie SO na temat representing hierarchy in a relational database, ponieważ większość innych rozwiązań NoSQL, które widziałem, jest podobnych pod tym względem; gdzie trzeba napisać własne algorytmy do przeliczania tych informacji, gdy węzły są dodawane, usuwane i przenoszone. Zasadniczo podejmujesz decyzję pomiędzy szybkimi czasami odczytu (np. nested set) lub szybkimi czasami zapisu (adjacency list). Zobacz wyżej wspomniane pytanie dotyczące SO, aby uzyskać więcej opcji zgodnych z tymi liniami - wersja flat table approach wydaje się być najbardziej zgodna z Twoim pytaniem.

Jednym ze standardów, który usuwa te rozważania, są implementacje Java Content Repository (JCR), zarówno Apache JackRabbit, jak i JBoss eXo. Uwaga: za kulisami obie wciąż wykonują jakieś algorytmiczne obliczenia, aby utrzymać hierarchię, jak opisano powyżej. Ponadto JCR obsługuje również uprawnienia, przechowywanie plików i kilka innych aspektów - więc może to być przesada dla twojego projektu.

+0

Link "do płaskiego stołu" do strony evolt.org jest martwy. –

+0

@MatthewDutton: naprawiono. – orangepips

0

Check out MarkLogic. Możesz pobrać kopię demo ze strony internetowej. Jest to baza danych dla niestrukturalnych danych i podlega klasyfikacji NoSQL baz danych. Wiem, że dane niestrukturalne są ładowanym terminem, ale myślą o nim jako o danych, które nie pasują do wierszy i kolumn RDBMS (jak dane hierarchiczne).

2

Graph baz prawdopodobnie również rozwiązać ten problem . Jeśli neo4j nie jest dla ciebie wystarczający pod względem skalowania, rozważ Titan, który opiera się na różnych rozwiązaniach back-endowych, w tym HBase i powinien być bardzo dobrze skalowany. Nie jest tak dojrzały jak neo4j, ale jest to bardzo obiecujący projekt.

2

LDAP, oczywiście. OpenLDAP dokona krótkiej pracy.

Powiązane problemy