web-dev-qa-db-fra.com

MongoDB + Neo4J vs OrientDB vs ArangoDB

Je suis actuellement en phase de conception d'un jeu de navigateur MMO, le jeu inclura des tilemaps pour certains emplacements en temps réel (donc des données de tuile pour chaque cellule) et une carte du monde générale. Le moteur de jeu que je préfère utilise MongoDB pour le monde des données persistantes.

Je vais également implémenter une simulation d'expédition (que j'expliquerai plus loin) qui est essentiellement un module Dijkstra, j'avais décidé d'utiliser une base de données graphique en espérant que cela faciliterait les choses, a trouvé Neo4j car il est assez populaire.

J'étais satisfait de la configuration de MongoDB + Neo4J mais j'ai remarqué OrientDB, qui apparemment agit à la fois comme MongoDB et Neo4J (le meilleur des deux mondes?), Ils ont même des pages VS pour MongoDB et Neo4J.

Le fait est que j'ai entendu des histoires d'horreur sur la perte de données de MongoDB (mais je ne suis pas sûr que ce soit toujours le cas) et je n'ai pas un tel luxe. Et pour Neo4J, je ne suis pas un grand fan de 12K € par an de coût "startup friendly" même si je n'aurai probablement pas une BD de millions de vertex. OrientDB semble une option viable car il peut également y avoir des opportunités d'utiliser une solution de base de données.

Dans ce cas, une décision logique pourrait être de passer à OrientDB mais il a une petite communauté et tbh n'a pas trouvé beaucoup d'avis à ce sujet, MongoDB et Neo4J sont des outils populaires largement utilisés, j'ai des inquiétudes si OrientDB est une aventure.

Ma première question le serait si vous avez une expérience/une opinion concernant ces bases de données.

Et deuxième question serait quelle base de données graphique est la meilleure pour une simulation d'expédition. La base de données utilisée est censée calculer l'itinéraire le moins cher de n'importe quel sommet à n'importe quel sommet et le parcourir (Dijkstra classique). Mais il faut aussi changer les poids en fonction de situations comme "le pays B a un embargo sur le pays A, donc tout article provenant du pays A ne peut pas passer par B, il y a des inondations dans la région XYZ donc aucun transport terrestre n'est possible" etc. devrait mettre en cache les résultats. Je n'attends pas plus de 1000 sommets mais beaucoup d'arêtes.

Merci à l'avance et excuses à l'avance si les questions sont un peu ambiguës

PS: J'ai ajouté ArangoDB au titre mais tbh, je n'ai pas eu beaucoup de chance d'y jeter un œil.


Édition tardive au 18 avril 2016: Après avoir évalué les réponses à mes questions et les stratégies de développement, j'ai décidé d'utiliser ArangoDB car leur feuille de route est plus prometteuse pour moi car ils n'essaient apparemment pas d'ajouter des tonnes de fonctionnalités hype à moitié cuites.

45
projectUnduli

Avertissement: je suis l'auteur et le propriétaire d'OrientDB.

En tant que développeur, en général, je n'aime pas les entreprises qui cachent les coûts et vous permettent de jouer avec leur technologie pendant un certain temps et dès que vous êtes au courant, commencez à demander de l'argent. En fait, une fois que vous avez investi des mois pour développer votre application qui utilise un langage ou une API non standard, vous êtes foutu: payez ou migrez l'application avec des coûts énormes.

Vous savez, OrientDB est [~ # ~] gratuit [~ # ~] pour toute utilisation, même commerciale. De plus, OrientDB prend en charge des normes telles que SQL (avec extensions) et la principale Java est le TinkerPop Blueprints, la norme "JDBC" pour les bases de données graphiques. De plus, OrientDB prend également en charge Gremlin .

Le projet OrientDB se développe chaque jour avec de nouveaux contributeurs et utilisateurs. Le groupe communautaire (canal gratuit pour demander de l'aide) est la communauté la plus active sur le marché GraphDB .

Si vous avez des doutes avec la GraphDB à utiliser, ma suggestion est d'obtenir ce qui est le plus proche de vos besoins, mais ensuite d'utiliser les standards autant que vous le pouvez. De cette façon, un éventuel changement aurait un faible impact.

43
Lvca

Il semble que votre cas d'utilisation soit exactement ce pour quoi ArangoDB est conçu: vous semblez avoir besoin de différents modèles de données (documents et graphiques) dans la même application et vous pourriez même vouloir les mélanger dans une seule requête. C'est là que brille une base de données multimodèle comme ArangoDB.

Si MongoDB vous a bien servi jusqu'à présent, vous vous sentirez immédiatement à l'aise avec ArangoDB, car il est très similaire en apparence. De plus, vous pouvez modéliser des graphiques en stockant vos sommets dans une (ou plusieurs) collections, et vos bords dans une ou plusieurs soi-disant "collections de bords". Cela signifie que les bords individuels sont simplement des documents à part entière et peuvent contenir des données JSON arbitraires. La base de données propose ensuite des parcours, personnalisables avec JavaScript pour répondre à tous vos besoins.

Pour vos variations des requêtes, vous pouvez par exemple ajouter des attributs sur ces embargos à vos sommets et programmer les requêtes/traversées pour en tenir compte.

La base de données ArangoDB est sous licence Apache 2 et la communauté ainsi qu'un support professionnel sont facilement disponibles.

Si vous avez des questions plus spécifiques n'hésitez pas à les poser dans le groupe google

https://groups.google.com/forum/#!forum/arangodb

ou contactez

pirates (at) arangodb.org

directement.

39
Max Neunhöffer

Les prix de Neo4j sont en fait assez flexibles, alors ne soyez pas mis de côté par les prix sur le site Web. Vous pouvez également commencer longtemps avec l'édition communautaire ou l'édition personnelle.

La communauté Neo4j est très active et utile et fournit rapidement un soutien et une aide pour vos questions. Je pense que c'est le plus gros avantage en plus des performances et de la commodité. En général, en utilisant un modèle graphique

Concernant votre cas d'utilisation:

Neo4j est utilisé exactement pour ce scénario de calcul d'itinéraire par l'une des plus grandes sociétés logistiques au monde où il achemine jusqu'à 4000 colis par seconde à travers le pays.

Et il est utilisé dans d'autres moteurs de jeu, comme ici sur GameSys pour la simulation d'économie de jeu et dans un autre pour le routage (pas en coordonnées terrestres mais en coordonnées de jeu-monde en utilisant Neo4j-Spatial).

Je suis curieux de savoir pourquoi vous n'avez que quelques nœuds? S'agit-il de portails de transport? Je me demande où vous stockez les détails et la dynamique des itinéraires (comme les critères que vous avez mentionnés) proviennent-ils de l'extérieur - dans l'état de mémoire du moteur de jeu?

Vous devriez probablement partager plus de détails sur votre modèle et le cas d'utilisation concret.

Et il pourrait être utile de savoir qu'Emil, l'un des fondateurs de Neo4j et moi, sommes d'anciens joueurs de donjons multi-utilisateurs (MUD), il s'agit donc certainement d'un cas d'utilisation qui nous tient à cœur :)

13
Michael Hunger