4

Je veux stocker un graphique de millions de nœuds où chaque nœud est relié de façon non dirigée à un autre (points A à B, automatiquement B à A). J'ai examiné Neo4j, OrientDB comme des solutions possibles mais elles semblent être orientées dans des graphes orientés, et Neo4j n'étant pas gratuit pour> 1 million de nœuds n'est pas une solution pour moi.DB Nosql pour les graphes non orientés?

Pouvez-vous m'aider à savoir quelles autres bases de données NoSQL (Redis, CouchDB, MongoDB, ...) conviendraient le mieux pour quelque chose comme ceci et comment pourrait-il être implémenté? Je veux faire un non-propriété (juste me donner les éléments liés) requêtes de largeur-première avec 2 niveaux de profondeur (ayant A < -> B, B < -> C, C < -> D, interroger A devrait me donner B et C, mais pas D).

+0

Le bit d'interrogation est intéressant! Je pensais à cela d'un point de vue Cassandra et alors que le stockage peut être réalisé avec une famille de colonnes unique, je ne suis pas sûr de savoir comment traiter la condition d'interrogation de niveau en profondeur. Besoin de plus de temps :) –

Répondre

4

Neo4j Toujours stocke les relations/arêtes comme indiqué, mais lorsque vous parcourez/interrogez, vous pouvez facilement traiter le graphique comme non dirigé en utilisant Direction.BOTH ou, dans certains cas, en ne définissant aucune direction. (De cette façon, il n'y a pas besoin de "double" pour couvrir les deux directions, vous ignorez simplement la direction - et il n'y a pas de pénalité de performance lorsque vous déplacez les bords ".)

La limite de 1 million de" primitives "a été supprimée un moment maintenant. Si votre code est open source, vous pouvez utiliser la version communautaire pour n'importe quelle taille de la base de données. Pour les autres cas, il y a le commercial versions qui comprend un free alternative.

+0

Existe-t-il une pénalité de performance pour aller dans les directions des relations dans les traversées? – JohnnyM

5

OrientDB n'a aucune limitation sur le nombre de nœuds. De plus, le modèle par défaut est bidirectionnel. Vous pouvez l'utiliser GRATUITEMENT aussi à des fins commerciales, puisque la licence appliquée est Apache 2.

Le GraphDB est documenté ici: http://code.google.com/p/orient/wiki/GraphDatabase. Basilary vous pouvez utiliser l'API native ou l'implémentation de Blueprints. Les API natives ont une évolution du langage SQL avec des opérateurs spéciaux pour les graphiques. Exemple:

SELECT du compte où les amis TRAVERSE (1,7) (address.city.country.name = 'Nouvelle-Zélande)

Cela signifie me donner tous les comptes avec un tel ami qui vit en Nouvelle-Zélande . Les amis sont pris au septième niveau de profondeur.

La seconde permet d'utiliser la pile Blueprint complète telle que le langage Gremlin pour créer vos requêtes super-complexes.

Questions connexes