2012-05-25 31 views
12

Quiero usar una base de datos de gráficos para una aplicación web (que involucra una red de usuarios, publicaciones, comentarios, votos, respuestas, documentos y fusiones de documentos y algunas otras relaciones transitivas en usuarios y documentos). Entonces, me pregunto si hay algo así como una metodología de diseño para las bases de datos Graph, es decir, una especie de analogía con los principios de diseño recomendados para las bases de datos relacionales (como esas formas normales).Metodologías de diseño de base de datos de gráficos

Ejemplos de preguntas (de las muchas preguntas que surgen):

  • ¿Es una buena idea, para crear un usuario nodo superior, tener relaciones ("existir") en cualquier usuario de nodo en la base de datos?
  • ¿Es una buena idea construir en la gestión de versiones (es decir, crear relaciones (algo así como "sigue")) apuntando a versiones actualizadas de un Documento/Publicación de manera que revertir esta relación significa ver los cambios por los que pasó el documento .
  • etc ...

Por lo tanto, qué necesitamos una base de datos Gráfico Diseño libro de cocina?

Respuesta

5

El grupo de usuarios de Gremlin (http://tinkerpop.com/) y el grupo de usuarios de Neo4j (https://groups.google.com/forum/?fromgroups#!forum/neo4j) son buenos lugares para analizar el modelado gráfico-base de datos.

Puede crear supernodos como "Usuarios", pero puede ser mejor y más eficaz usar índices y crear una entrada de índice para cada usuario con una clave = element_type, value = "user", id = user_node_id.

Una relación de "seguimiento" se usa a menudo para personas/amigos como en Facebook y Twitter, así que no lo usaría para versionar. Puede construir un sistema de control de versiones en Neo4j que marca el tiempo en cada entrada y utiliza un algoritmo de última escritura, y hay otros sistemas de bases de datos como Datomic que tienen esto incorporado.

Vea el modelo de Lightbulb (https://github.com/espeed/lightbulb/blob/master/lightbulb/model.py) para ver un ejemplo de blog modelo en Bulbs/Python (http://bulbflow.com).

Cuestiones relacionadas