Almacenar un gráfico en mongodb


Tengo un gráfico no dirigido donde cada nodo contiene una matriz. Los datos se pueden agregar / eliminar de la matriz. Cuál es la mejor manera de almacenar esto en Mongodb y poder hacer esta consulta de manera efectiva: dado nodo A, seleccione todos los datos contenidos en los nodos adyacentes de A.

En la base de datos relacional, puede crear una tabla que represente los bordes y otra tabla para almacenar los datos en cada nodo de esta manera.

table 1 
NodeA, NodeB
NodeA, NodeC

table 2 
NodeA, item1
NodeA, item2
NodeB, item3 

Y luego se unen las tablas cuando se consulta los datos en adyacente nodo. Pero unirse no es posible en MongoDB, así que cuál es la mejor manera de configurar esta base de datos y consultar de manera eficiente los datos en nodos adyacentes (favoreciendo el rendimiento ligeramente sobre el espacio).

Author: Community, 2011-02-26

5 answers

Estoy recogiendo mongo, buscando en este tipo de esquema, así (gráficos no dirigidos, la consulta de información de los vecinos) Creo que la forma en que estoy a favor hasta ahora se ve algo como esto:

Cada nodo contiene una matriz de claves vecinas, como así.

{
 nodeIndex: 4
 myData: "data"
 neighbors: [8,15,16,23,42]
}

Para encontrar datos de vecinos, utilice el operador in in "":

db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}});

Puede usar selección de campo para limitar los resultados a los datos relevantes.

db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}}, {myData:1});
 14
Author: Chuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-21 21:55:02

Bases de Datos Especializadas de Gráficos Distribuidos

Sé que esto suena un poco lejos de la pregunta de OPs sobre Mongo, pero en estos días hay bases de datos de gráficos más especializadas que sobresalen en este tipo de trabajo y pueden ser mucho más fáciles de usar, especialmente en gráficos grandes.

Hay una comparación de 7 tales ofrendas aquí: https://docs.google.com/spreadsheet/ccc?key=0AlHPKx74VyC5dERyMHlLQ2lMY3dFQS1JRExYQUNhdVE#gid=0

De los tres más significativos las ofertas de código abierto (Titan, OrientDB y Neo4J), todas ellas son compatibles con la interfaz de Tinkerpop Blueprints. Así que para un gráfico que se parece a esto...

introduzca la descripción de la imagen aquí

... una pregunta para "todas las personas que Juno admira mucho a quienes ha conocido desde el año 2011" se vería así:

Iterable<Vertex> results = juno.query().labels("knows").has("since",2011).has("stars",5).vertices()

Esto, por supuesto, es solo la punta del iceberg. ¡Cosas muy poderosas!

Si tienes que quedarte con Mongo

Piense en los planos de Tinkerpop como el " JDBC de almacenar graph structures " en varias bases de datos. La API de Tinkerpop Blueprints tiene una implementación específica de MongoDB que funcionaría para usted, estoy seguro. Luego, utilizando Tinkerpop Gremlin, tienes todo tipo de métodos avanzados de recorrido y búsqueda a tu disposición.

 14
Author: jkschneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-19 15:46:21
 8
Author: Andreas Jung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-26 09:55:45

MongoDB introducirá capacidades de gráficos nativos en versión 3.4 y podría usarse para almacenar estructuras de gráficos y hacer análisis sobre ellos, aunque el rendimiento podría no ser tan bueno en comparación con las bases de datos de gráficos nativos como Neo4j dependiendo de los casos, pero es demasiado pronto para juzgar.

Revisa esos enlaces para más información:

 2
Author: Michail Michailidis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-06 09:29:22

MongoDB puede simular un gráfico usando una jerarquía de árbol flexible. Es posible que desee considerar neo4j para necesidades de gráficos estrictas.

 1
Author: Rohit Sood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-15 14:59:27