Le stockage d'un graphique dans mongodb
J'ai un graphe non-dirigé, où chaque nœud contient un tableau. Les données peuvent être ajoutés/supprimés à partir du tableau. Quelle est la meilleure façon de les stocker dans Mongodb et être en mesure de faire cette requête de manière efficace: étant donné Un nœud, sélectionnez toutes les données contenues dans les nœuds adjacents de A.
En relationnel, vous pouvez créer un tableau représentant les bords et une autre table pour stocker les données dans chaque nœud de cette sorte.
table 1
NodeA, NodeB
NodeA, NodeC
table 2
NodeA, item1
NodeA, item2
NodeB, item3
Et puis vous rejoignez les tables lors d'une requête pour les données des nœuds adjacents. Mais jointure n'est pas possible dans MongoDB, alors quelle est la meilleure façon pour l'installation de cette base de données et efficacement les requêtes de données dans les nœuds adjacents (favorisant légèrement les performances dans l'espace).
- Deux requêtes, l'une pour obtenir la liste des nœuds adjacents, et un pour obtenir les données dans ces nœuds?
Vous devez vous connecter pour publier un commentaire.
Je vais chercher des mongo, à la recherche dans ce genre de schéma ainsi (non orienté, les graphiques, la recherche de l'information à partir de pays voisins) je pense que la façon que je préfère donc de loin ressemble à quelque chose comme ceci:
Chaque nœud contient un tableau de voisin touches, comme si.
De trouver des données à partir de pays voisins, l'utilisation de la $en "opérateur":
Vous pouvez utiliser champ de sélection pour limiter les résultats aux données pertinentes.
$push
ou$addToSet
pour la création de nouvelles arêtes entre les noeuds et de$pull
pour enlever les arêtes. Toutes sont documentées sur la mise à jour de la page de la MongoDB docs Vous aurez envie de faire attention à toujours mettre à jour les nœuds aux deux extrémités d'une arête.Spécialisés Distribués Graphique De Bases De Données
Je sais que cela semble un peu loin de la Fpo question à propos de Mongo, mais ces jours, il ya de plus en plus spécialisée graphique de bases de données excel à ce genre de travail et peut être beaucoup plus facile pour vous d'utiliser, en particulier sur de grands graphes.
Il y a une comparaison de 7 à ces offres ici: https://docs.google.com/spreadsheet/ccc?key=0AlHPKx74VyC5dERyMHlLQ2lMY3dFQS1JRExYQUNhdVE#gid=0
Des trois plus importants open source offrandes (Titan, OrientDB, et Neo4J), tous à l'appui de la Tinkerpop Plans de l'interface. Donc, pour un graphique qui ressemble à...
... une requête pour "tous les gens que Juno admire beaucoup ceux qu'elle a connus depuis l'année 2011" devrait ressembler à ceci:
Cela, bien sûr, est que la pointe de l'iceberg. Assez puissant!
Si vous devez rester avec Mongo
Pense Tinkerpop des Modèles comme le "JDBC de stocker le graphe structures" dans différentes bases de données. Le Tinkerpop Plans de l'API a un MongoDB mise en œuvre qui serait travailler pour vous, j'en suis sûr. Ensuite, à l'aide de Tinkerpop Gremlin, vous avez toutes sortes de pointe de la traversée et des méthodes de recherche à votre disposition.
Voir http://www.mongodb.org/display/DOCS/Trees+en+MongoDB pour l'inspiration.
MongoDB présentera natif graphique capacités dans version 3.4 et il pourrait être utilisé pour stocker graphique stuctures et de faire des analyses sur eux, bien que la performance pourrait ne pas être que bonne par rapport aux natifs graphique de bases de données comme Neo4j selon le cas, mais il est trop tôt pour juger de.
Vérifier ces liens pour plus d'informations:
MongoDB peut simuler un graphe à l'aide d'un flexible de l'arborescence. Vous pourriez envisager de neo4j strict graphique besoins.