2011-01-22 19 views
51

¿Qué tipo de base de datos NoSQL es más adecuada para almacenar datos jerárquicos?¿Qué tipo de base de datos NoSQL es más adecuada para almacenar datos jerárquicos?

decir, por ejemplo que quiero para almacenar mensajes de un foro con una estructura de árbol:

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

que tienen un problema análogo en mi modelo de datos. Neo4j funciona bien pero no se escalará horizontalmente. Pensé que MongoDB sería mejor, pero como no puedes recuperar los elementos incrustados de "publicación original" sin conocer el esquema desde el nivel superior, en realidad es inferior a una base de datos de gráficos. –

+2

@ Sridhar-Sarnobat Tal vez el futuro pertenece a bases de datos híbridas como [OrientDB] (http://www.orientdb.org/) o [ArrangoDB] (http://www.arangodb.org/) que combinan bases de datos de documentos y gráficos . Incluso PostgreSQL es compatible con documentos JSON en estos días. – deamon

+0

Gracias por la sugerencia. Echaré un vistazo más de cerca a esos –

Respuesta

7

Esta es la base de datos de gráfico. Se puede usar como base de datos de árbol.

http://neo4j.com/

+3

Además, consulte http://www.orientechnologies.com/ –

+1

Hoy veo las cosas más claramente y estoy de acuerdo con que esta es la estructura gráfica típica. Podría, por supuesto, modelarse como un documento o con un DB relancional también, pero un DB de gráfico parece ser el más adecuado. Y, sí, definitivamente vale la pena echar un vistazo al OrientDB. – deamon

-2

Esto es un no-respuesta para usted. SQLServer 2008 !!!! Es ideal para consultas recursivas. O puede ir a la ruta antigua y almacenar datos de jerarquía en una tabla separada para evitar la recursión.

Creo que las bases de datos relacionales se prestan muy bien a los datos de árbol. Tanto en rendimiento de consulta como en facilidad de uso. Con una advertencia ... lo insertarás en una tabla indexada, y probablemente varias otras tablas indexadas cada vez que alguien haga una publicación. El rendimiento de inserción podría ser un problema en un foro de calibre de Facebook.

+4

Necesita al menos hablar sobre Common Table Expressions y/o las capacidades XML aquí como una razón por la cual SQL Server 2008 es útil. – orangepips

+1

SQL tiene el tipo de datos 'hierarchid'; sin embargo, sql es lento y torpe. – theMayer

17

Lo que posiblemente necesite es una base de datos orientada a documentos como MongoDB o CouchDB.

ver ejemplos de diferentes técnicas que le permiten almacenar datos jerárquicos en MongoDB: http://www.mongodb.org/display/DOCS/Trees+in+MongoDB

+1

+1 enlace útil sobre enfoques para representar los datos. – orangepips

+0

¿Cómo se relaciona esto con 'datos jerárquicos'? –

26

MongoDB y CouchDB soluciones ofrecen, pero no construido en la funcionalidad. Vea esta pregunta SO en representing hierarchy in a relational database ya que la mayoría de las otras soluciones NoSQL que he visto son similares a este respecto; donde tiene que escribir sus propios algoritmos para volver a calcular esa información a medida que se agregan, eliminan y mueven los nodos. En general, está tomando una decisión entre tiempos de lectura rápidos (por ejemplo, nested set) o tiempos de escritura rápidos (adjacency list). Consulte la pregunta SO anteriormente mencionada para obtener más opciones a lo largo de estas líneas: el flat table approach parece estar más alineado con su pregunta.

Un estándar que abstrae estas consideraciones es el Java Content Repository (JCR), ambos Apache JackRabbit y JBoss eXo son implementaciones. Tenga en cuenta que detrás de las escenas, ambos todavía están haciendo algún tipo de cálculos algorítmicos para mantener la jerarquía como se describió anteriormente. Además, el JCR también se encarga de los permisos, el almacenamiento de archivos y varios otros aspectos, por lo que puede ser excesivo para su proyecto.

+0

El enlace "acercamiento de mesa plana" a evolt.org está muerto. –

+0

@MatthewDutton: arreglado. – orangepips

0

Salida MarkLogic. Puede descargar una copia de demostración desde el sitio web. Es una base de datos no estructurados y pertenece a la clasificación de bases de datos NoSQL. Sé que los datos no estructurados son un término bastante cargado, pero solo piensen en ello como datos que no encajan bien en las filas y columnas de un RDBMS (como datos jerárquicos).

2

Exist-db implementado modelo de datos jerárquico para la persistencia XML

2

bases de datos Gráfico probablemente también resolver este problema . Si neo4j no es suficiente para usted en términos de escalado, considere Titan, que se basa en varios back-ends de almacenamiento, incluido HBase, y debe escalar muy bien. No es tan maduro como neo4j, pero es un proyecto muy prometedor.

2

LDAP, obviamente. OpenLDAP haría un breve trabajo.

Cuestiones relacionadas