133 votes

Quelqu'un at-il utilisé des bases de données basées sur des graphiques (http://neo4j.org/)?

J'ai beaucoup utilisé Relational DB et j'ai décidé de me lancer dans d'autres types disponibles.

Ce produit particulier semble bon et prometteur: http://neo4j.org/

Quelqu'un at-il utilisé des bases de données basées sur un graphique? Quels sont les avantages et les inconvénients d'une perspective de convivialité?

Les avez-vous utilisés dans un environnement de production? Quelle était l'exigence qui vous a incité à les utiliser?

193voto

Will Harris Points 17002

J'ai utilisé un graphique de la base de données dans un emploi précédent. Nous n'étions pas à l'aide de neo4j, c'était une chose la maison construite sur le toit de Berkeley DB, mais il a été similaire. Il a été utilisé dans la production (c'est toujours).

La raison nous avons utilisé un graphique de la base de données a été que les données stockées par le système et les opérations que le système était en train de faire avec les données ont été exactement le point faible de bases de données relationnelles et ont exactement la forte place de graphique de bases de données. Le système a besoin de stocker des collections d'objets que l'absence d'un schéma fixe et sont liés par des relations. Pour raisonner sur les données, le système a besoin de faire beaucoup d'opérations qui seraient un couple de traversals dans un graphique de la base de données, mais qui serait assez complexe requêtes en SQL.

Les principaux avantages du modèle des graphes ont été le développement rapide de temps et de souplesse. Nous pourrions ajouter rapidement de nouvelles fonctionnalités sans impact sur les déploiements existants. Si un client potentiel voulu pour importer certains de leurs propres données et de la greffe sur le dessus de notre modèle, il peut généralement être effectué sur place par le représentant des ventes. La flexibilité a également aidé lors de la conception d'une nouvelle fonctionnalité, nous sauver de tenter de tirer de nouvelles données dans un modèle de données rigide.

Avoir un bizarre de la base de données permettez-nous de construire un grand nombre de nos étranges technologies, nous donnant beaucoup de secret de sauce de distinguer nos produits de ceux de nos concurrents.

Le principal inconvénient était que nous n'étions pas à l'aide de la base de données relationnelle standard de la technologie, qui peut être un problème lorsque vos clients sont enterprisey. Nos clients nous demandent pourquoi nous nous ne pouvions pas accueillir nos données sur leurs géant Oracle clusters (nos clients ont souvent eu de grands centres de données). L'un de l'équipe a en fait réécriture de la couche de base de données pour utiliser Oracle (ou PostgreSQL ou MySQL), mais il est un peu plus lent que l'original. Au moins une grande entreprise, même s'il avait un Oracle seulement politique, mais heureusement, Oracle a acheté Berkeley DB. Nous avons également eu à écrire beaucoup d'outils supplémentaires - nous ne pouvions pas utiliser Crystal Reports pour exemple.

L'autre inconvénient de notre graphe de la base de données a été que nous avons construit nous-mêmes, ce qui signifiait que lorsque nous sommes arrivés à un problème (en général avec de l'évolutivité) nous avons dû nous résoudre à nous-mêmes. Si nous avions utilisé une base de données relationnelle, le vendeur aurait déjà résolu le problème il y a dix ans.

Si vous êtes à la création d'un produit pour enterprisey clients et de vos données s'inscrit dans le modèle relationnel, l'utilisation d'une base de données relationnelle si vous le pouvez. Si votre demande ne correspond pas au modèle relationnel, mais il ne fit le modèle des graphes, un graphique de la base de données. Si elle ne correspond à quelque chose d'autre, utilisez-le.

Si votre application n'a pas besoin de s'insérer dans le courant blub de l'architecture, de l'utilisation d'un graphe de base de données, ou CouchDB, ou de BigTable, ou que ce soit adapté à votre application et vous pensez que c'est cool. Il peut vous donner un avantage, et son plaisir à essayer de nouvelles choses.

Tout ce que vous avez choisi, essayez de ne pas construire le moteur de base de données vous-même, sauf si vous avez vraiment comme la construction de moteurs de base de données.

34voto

DataRiot Points 378

Nous avons travaillé avec les Néo de l'équipe depuis plus d'un an maintenant et ont été très heureux. Nous avons modèle d'érudition d'artefacts et de leurs relations, qui est sur place pour un graphe db, et d'exécuter des algorithmes de recommandation sur le réseau.

Si vous travaillez déjà en Java, je pense que la modélisation à l'aide de Neo4j est très simple et il a le plus plat / performance la plus rapide pour R/W de toutes les autres solutions que nous avons essayé.

Pour être honnête, j'ai du mal à ne pas penser en termes de Graphe/Réseau, car il est beaucoup plus simple que la conception de alambiqué structures de la table pour tenir les propriétés des objets et les relations.

Cela étant dit, nous ne stocker de l'information dans MySQL tout simplement parce qu'il est plus facile pour l'Entreprise de côté à l'exécution rapide des requêtes SQL. Pour effectuer les mêmes fonctions avec Neo, nous aurions besoin d'écrire du code que nous n'avons tout simplement pas la bande passante pour l'instant. Dès que l'on ne bien que, je me déplace toutes les données de Neo!

Bonne chance.

24voto

Turbo Points 789

Deux points:

Tout d'abord, sur les données que j'ai travaillé avec les 5 dernières années dans SQL Server, j'ai récemment frappé l'extensibilité de la paroi avec SQL pour le type de questions que nous devons exécuter (nested relationhsips...vous savez...les graphiques). J'ai été jouer avec neo4j, et mon temps de recherche sont de plusieurs ordres de grandeur plus rapide quand j'ai besoin de ce type de recherche.

Deuxièmement, au point que le graphique de bases de données sont obsolètes. Euh...non. Dès le début, que les gens ont été à essayer de comprendre comment stocker et de recherche de données de manière efficace, ils ont créé et joué avec le graphique de réseau et le style de modèles de base de données. Ces ont été conçus de sorte que le modèle physique reflète la logique du modèle, de sorte que leur efficacité n'était pas si grande. Ce type de structure de données a été bonne pour les données semi-structurées, mais pas aussi bien structuré dense de données. Donc, ce IBM mec nommé Codd a été la recherche de moyens efficaces pour organiser et stocker des données structurées et est venu avec l'idée pour le modèle de base de données relationnelle. Et c'était bon, et les gens étaient heureux.

Qu'avons-nous ici? Deux outils pour deux raisons différentes. Graphique de la base de données de modèles sont de très bonne qualité pour représenter les données semi-structurées et les relations entre les entités (qui peut ou peut ne pas exister). Les bases de données relationnelles sont bons pour les données structurées qui a un très statique schéma, et où rejoindre les profondeurs de ne pas aller très profond. On est bon pour un type de données, l'autre est bon pour les autres types de données.

Pour reprendre la phrase, il n'y a pas de solution miracle. Son très myope-à-dire que le graphe de modèles de base de données de la date et de l'utilisation d'un donne à 40 ans de progrès. C'est comme dire à l'aide de C est de donner à tous les progrès technologiques que nous avons traversé pour obtenir des choses comme Java et C#. Ce n'est pas vrai. C est un outil qui est nécessaire pour certaines tâches. Et Java est un outil pour d'autres tâches.

15voto

Craig Taverner Points 396

J'ai été en utilisant MySQL pour les années à gérer les données d'ingénierie, et il a bien fonctionné, mais l'un des problèmes que nous avions (mais ne savais pas que nous avions) est que nous avons toujours eu à planifier le schéma initial. Un autre problème que nous savions que nous avions était de cartographie des données jusqu'à des objets du domaine et à l'arrière.

Maintenant, nous avons juste commencé à essayer de neo4j et il semble que c'est la résolution de ces deux problèmes pour nous. La possibilité d'ajouter des propriétés différentes à chaque nœud (et lien) nous a permis de repenser l'ensemble de notre approche à des données. C'est comme dynamique versus statique langages (Ruby rapport à Java), mais pour les bases de données. La construction du modèle de données dans la base de données peut être fait d'une manière beaucoup plus agile et dynamique, et qui est considérablement simplifier notre code.

Et puisque le modèle d'objet du code est généralement une structure graphique, la cartographie de la base de données est également plus simple, avec moins de code et, par conséquent, de moins en moins de bugs.

Et comme un bonus supplémentaire, de notre premier prototype de code pour le chargement de nos données dans neo4j est effectivement plus rapide que la précédente version de MySQL. Je n'ai pas de solides chiffres sur cette (encore), mais c'était une belle fonctionnalité supplémentaire.

Mais à la fin de la journée, le choix devrait probablement être basé principalement sur la nature de votre modèle de domaine. Est-il mieux les cartes de tableaux ou de graphiques? Décider en faisant quelques prototypes, charger les données et de jouer avec elle. Utilisation neoclipse de regarder les différentes vues de données. Une fois que vous avez fait cela, nous espérons que vous connaissez si vous êtes sur une bonne chose ou pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X