2010-03-09 24 views
10

Las estructuras de datos jerárquicos a menudo se almacenan en bases de datos relacionales. Este tipo de almacenamiento es flexible pero plano, por lo que la estructura del árbol debe compilarse con cada consulta. Quiero almacenar publicaciones en el foro como una estructura en árbol, pero debería ser posible consultar de manera eficiente, por ejemplo, seleccionando publicaciones por fecha o autor.¿Cómo almacenar estructuras de árbol en Java?

Me gustaría tener una base de datos de código abierto a la que se pueda acceder desde Java.

¿Cuál es la mejor manera de hacerlo? CouchDB? neo4j? ...?

+1

¿Qué tal un ORM? –

+1

Un ORM haría el manejo más conveniente, pero la estructura de datos subyacente seguiría siendo relacional y probablemente el rendimiento no sería tan bueno. – deamon

+0

Vea también: [¿Cuáles son las opciones para almacenar datos jerárquicos en una base de datos relacional?] (Http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in- a-relational-database) – cbare

Respuesta

7

Cuando encontré este problema por primera vez, encontré el excelente artículo (link).

En palabras Tho: en RDBMS mundo hay aproxima 2 de almacenamiento principal modelo de árbol:

  • la adyacencia Lista Modelo
  • El Conjunto Modelo anidada
+0

El artículo solo está disponible con el inicio de sesión de Oracle. – zellus

+0

El enlace se actualizó (encontró el mismo artículo en otra ubicación) –

+0

gracias por la rápida reacción. – zellus

4

Aquí hay una great article en Neo4j. En general, parece que neo4j es su mejor opción, ya que las bases de datos de documentos todavía son relativamente planas y pueden dar como resultado un poco de awkward setup (aún posible).

Neo4j, al ser una base de datos de gráficos, debería ser una buena opción para almacenar su árbol. Nunca lo he usado, pero dado el dominio de tu problema, parece ser la mejor opción (al menos la que hay que investigar primero).

En cuanto a cuál es la "mejor manera", creo que eso depende de su implementación y requisitos. Creo que debería escribir una prueba simple en una base de datos de gráficos, una base de datos de documentos, un object database y una base de datos relacional (o no) y ver cuál encaja con el problema que está tratando de resolver.

Cuestiones relacionadas