2011-01-08 12 views
5

Estoy desarrollando una aplicación web que utiliza una base de datos no relacional como backend (django-nonrel + AppEngine). Necesito almacenar algunos datos jerárquicos (projects/subproject_1/subproject_N/tasks), y me pregunto qué patrón debería usar. Por ahora pensé:¿Recomendaciones con datos jerárquicos en bases de datos no relacionales?

  • lista de adyacencia (guardar la identificación padre del elemento)
  • conjuntos anidados (tienda de izquierda y los valores adecuados para el artículo)

En mi caso, la profundidad de anidamiento para un usuario normal no excederá de 4 a 5 niveles. Además, en la interfaz de usuario, me gustaría tener una paginación para los elementos en el primer nivel, para evitar cargar demasiados elementos en la primera carga de la página.

Por lo que entiendo hasta ahora, los conjuntos anidados son geniales cuando la jerarquía se usa más para mostrar. Las listas de adyacencia son excelentes cuando la edición en el árbol se realiza con frecuencia. En mi caso, creo que necesito mostrar más que la edición (cuando se usan conjuntos anidados, incluso si la pantalla funcionara bien, la paginación anterior podría complicar las cosas en la edición).

¿Tiene alguna idea y consejo, en función de su experiencia con las bases de datos no relacionales?

Respuesta

1

Cómo los almacena puede depender de cómo necesite consultarlos. Por ejemplo, si solo necesita encontrar los hijos directos de un padre, un modelo de lista de adyacencia es probablemente el más simple. Si desea enumerar subárboles enteros, una lista de ancestros o conjuntos anidados funcionan bien, aunque evitaría los conjuntos anidados en App Engine.

Si necesita integridad transaccional sobre todos los objetos de un árbol y no va a actualizar el árbol como un todo más de unas pocas veces por segundo, debe consultar el soporte de App Engine para grupos de entidades y ancestros.

0

He utilizado SQL Server para alojar datos no relacionales. SQL Server tiene estas cosas llamadas hierarchyID .. que hacen que la mayor parte de esto sea transparente.

¿Cuál es el problema exacto que está teniendo?

Cuestiones relacionadas