2011-01-22 18 views
51

Quale tipo di database NoSQL è più adatto per memorizzare i dati gerarchici?Quale tipo di database NoSQL è più adatto per memorizzare i dati gerarchici?

Dire per esempio che voglio archiviare i messaggi di un forum con una struttura ad albero:

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

Ho un problema analogo nel mio modello di dati. Neo4j funziona bene ma non scalerà orizzontalmente. Pensavo che MongoDB sarebbe stato migliore, ma dal momento che non è possibile recuperare elementi "post originale" incorporati senza conoscere lo schema dal livello più alto, in realtà è inferiore a un database grafico. –

+2

@ Sridhar-Sarnobat Forse il futuro appartiene ai database ibridi come [OrientDB] (http://www.orientdb.org/) o [ArrangoDB] (http://www.arangodb.org/) che combinano database di documenti e grafici . Persino PostgreSQL supporta i documenti JSON in questi giorni. – deamon

+0

Grazie per il suggerimento. Daremo un'occhiata più da vicino a quelli –

risposta

7

Questo è un database grafico. Può essere utilizzato come database ad albero.

http://neo4j.com/

+3

Inoltre, checkout http://www.orientechnologies.com/ –

+1

Oggi vedo le cose in modo più chiaro e concordo sul fatto che questa è la tipica struttura del grafico. Naturalmente potrebbe anche essere modellato come un documento o con un DB relazionale, ma un DB grafico sembra essere la soluzione migliore. E, sì, OrientDB merita sicuramente una visita. – deamon

-2

Ecco una non-risposta per voi. SQLServer 2008 !!!! È ottimo per le domande ricorsive. Oppure puoi andare alla vecchia rotta e memorizzare i dati della gerarchia in una tabella separata per evitare la ricorsione.

Penso che i database relazionali si prestino molto bene ai dati dell'albero. Sia in termini di prestazioni di query e facilità d'uso. Con un avvertimento ... ti inserirai in una tabella indicizzata e probabilmente in diverse altre tabelle indicizzate ogni volta che qualcuno farà un post. Inserire le prestazioni potrebbe essere un problema su un forum di Facebook Calibre.

+4

È necessario parlare almeno di Common Table Expressions e/o XML qui come motivo per cui SQL Server 2008 è utile. – orangepips

+1

SQL ha il tipo di dati 'hierarchid'; tuttavia, sql è lento e goffo. – theMayer

26

MongoDB e CouchDB offrire soluzioni, ma non costruito in funzione. Vedere questa domanda SO su representing hierarchy in a relational database poiché la maggior parte delle altre soluzioni NoSQL che ho visto sono simili a questo proposito; dove devi scrivere i tuoi algoritmi per ricalcolare tali informazioni quando i nodi vengono aggiunti, cancellati e spostati. In generale, stai prendendo una decisione tra tempi di lettura rapidi (ad esempio nested set) o tempi di scrittura rapidi (adjacency list). Vedi la domanda SO di cui sopra per ulteriori opzioni lungo queste linee: la flat table approach appare più allineata alla tua domanda.

Uno standard che elimina queste considerazioni è lo Java Content Repository (JCR), sia Apache JackRabbit sia JBoss eXo sono implementazioni. Nota, dietro le quinte entrambi stanno ancora facendo una sorta di calcoli algoritmici per mantenere la gerarchia come descritto sopra. Inoltre, JCR gestisce anche le autorizzazioni, l'archiviazione dei file e molti altri aspetti, quindi potrebbe essere eccessivo per il progetto.

+0

link "table approach approach" a evolt.org è morto. –

+0

@MatthewDutton: corretto. – orangepips

0

Partenza MarkLogic. È possibile scaricare una copia demo dal sito Web. È un database per i dati non strutturati e rientra nella classificazione NoSQL dei database. So che i dati non strutturati sono un termine piuttosto carico, ma considerarli semplicemente come dati che non si adattano bene alle righe e alle colonne di un RDBMS (come i dati gerarchici).

2

Exist-db implementato modello di dati gerarchica per xml persistenza

2

database Grafico probabilmente anche risolvere questo problema . Se neo4j non è abbastanza per te in termini di ridimensionamento, prendere in considerazione Titan, che è basato su vari back-end di archiviazione incluso HBase e dovrebbe scalare molto bene. Non è maturo come neo4j, ma è un progetto molto promettente.

0

Appena trascorso il fine settimana in un corso di formazione utilizzando MUMUPS db come back-end per un framework di sviluppo di applicazioni javascript per browser stack completo. Grandi cose! Consiglierei la distribuzione GT.M di MUMPS sotto GPL. Oppure prova http://sourceforge.net/projects/mumps/?source=recommended per VANUM MUMPS. Dai un'occhiata a http://robtweed.wordpress.com/ per il framework ewd.js js e maggiori informazioni su MUMPS.

2

LDAP, ovviamente. OpenLDAP ne farebbe un breve lavoro.

Problemi correlati