Neo4j sharding aspect
J'étais à la recherche sur l'évolutivité de Neo4j, et de lire un document écrit par David Montag en janvier 2013.
Concernant la fragmentation, de l'aspect, il a dit que la 1ère version de 2014 serait venu avec une première solution.
Personne ne sait si cela a été fait ou de son statut si pas?
Merci!
Vous devez vous connecter pour publier un commentaire.
Divulgation: je travaille en tant que vice-président Produit de Neo Technology, le parrain de la Neo4j open source graphique de la base de données.
Maintenant que nous venons de Neo4j 2.0 (en fait 2.0.1 aujourd'hui!) nous nous engageons sur une version 2.1 qui est principalement orienté autour (même plus) de performance & évolutivité. Cela permettra d'augmenter la limite supérieure de la courbe pour un nombre illimité d'entités, et l'amélioration de diverses autres choses.
Permettez-moi de mettre en contexte d'abord, puis de répondre à votre question.
Comme vous l'avez probablement vu de l'étude, Neo4j est horizontale-échelle de l'architecture permet la lecture de mise à l'échelle, avec les écritures de tous les cours de master et de rayonnement. Cela vous arrive illimitée, lire la mise à l'échelle, et dans les dizaines de milliers d'écritures par seconde.
Pratiquement parlant, il y a production de Neo4j clients (y compris les composant logiciel Enfichable Interactive et Glassdoor), avec près d'un milliard de personnes dans leur graphe social... dans tous les cas, derrière une active et très-frappé de site web, géré par relativement assez modeste Neo4j clusters (pas plus de 5 cas). Donc, c'est une caractéristique clé: la Neo4j d'aujourd'hui d'une incroyable calcul de la densité, et donc nous nous voyons régulièrement assez de petits groupes de manipulation considérablement la production à grande charge de travail... avec des temps de réponse très rapides.
Plus sur l'architecture actuelle peut être trouvé ici: http://www.neotechnology.com/neo4j-scales-for-the-enterprise/
Et une liste de clients (qui comprend des entreprises comme Wal-Mart et eBay) peut être trouvé ici: neotechnology.com/customers/ l'Un des plus grands du monde livraison de colis transporteurs utilise Neo4j pour acheminer tous leurs forfaits, en temps réel, avec des sommets de 3000 routage d'opérations par seconde, et sans aucun temps mort. (Ce qui sans doute est le plus grand du monde et le plus vital de l'utilisation d'un graphique de la base de données et d'une base de données NOSQL; mais malheureusement je ne peux pas dire qui c'est).
Donc, en un sens, le tl;dr, c'est que si vous n'êtes pas encore aussi grand que Wal-Mart, eBay, alors vous êtes probablement ok. Qui simplifie outre mesure seulement un peu. Il y a le 1% des cas où vous avez subi transactionnelle écrire des charges de travail dans les 100s de milliers par seconde. Cependant, même dans ces cas, il n'est souvent pas la bonne chose pour charger toutes les données en temps réel graphique. Nous avons l'habitude de conseiller aux gens de faire un certain niveau d'agrégation ou de filtrage, et d'apporter seulement les choses les plus importantes dans le graphe. Intuit a donné un bon d'en parler. Ils filtrent un milliard de transactions B2B dans un beaucoup plus petit nombre de l'ensemble des transactions mensuelles des relations avec agrégé compte et les montants en devise par la direction.
Entrée de fragmentation... Sharding a gagné beaucoup de popularité ces jours-ci. C'est en grande partie grâce aux trois autres catégories de NOSQL, où les jointures sont un anti-modèle. La plupart des requêtes impliquant la lecture ou l'écriture d'une pièce unique de données discrètes. Juste que l'adhésion est un anti-modèle pour la clé-valeur des magasins et des bases de documents, la fragmentation est un anti-modèle pour le graphique de bases de données. Ce que je veux dire par là, c'est... le meilleur de la performance se fera quand l'ensemble de vos données est disponible dans la mémoire sur un seul exemple, en raison de saut en arrière et en avant sur tout le réseau à chaque fois que vous êtes à la lecture et à l'écriture va ralentir les choses de manière significative vers le bas, sauf si vous avez été vraiment très intelligent sur la façon dont vous distribuer vos données... et même alors. Notre approche a été de deux ordres:
Faire comme beaucoup de choses intelligentes que possible afin de soutenir extrêmement élevé en lecture & écrire des volumes, sans avoir à recourir à la fragmentation. Cela vous obtient le meilleur et le plus prévisible de la latence et de l'efficacité. En d'autres termes: si nous pouvons être assez bon pour soutenir votre exigence, sans fragmentation, qui toujours être la meilleure approche. Le lien ci-dessus décrit certains de ces trucs, y compris le déploiement modèle qui vous permet d'éclat de vos données en mémoire sans avoir à éclat sur le disque (un truc que nous appelons cache-sharding). Il y a d'autres trucs du même genre, et plus descendre le brochet...
Ajouter une deuxième architecture motif dans Neo4j que ne soutien de la fragmentation. Pourquoi le faire si la fragmentation est préférable de l'éviter? Comme de plus en plus de gens trouvent plus d'utilisations pour les graphiques, et les volumes de données continuent d'augmenter, nous pensons que par la suite il sera important et inévitable de la chose. Cela vous permettra d'exécuter tous de Facebook par exemple, dans un Neo4j cluster (assez énorme)... et pas seulement la partie sociale du graphique, nous pouvons le supporter aujourd'hui. Nous avons déjà fait beaucoup de travail sur ce sujet, et ont une architecture développée que nous croyons que les soldes de la de nombreuses considérations. C'est un effort sur plusieurs années, et alors qu'on pourrait très facilement sortir une version de Neo4j que des tessons naïvement (qui aurait sans doute être vraiment populaire), nous n'aurons probablement pas le faire. Nous voulons le faire bien, ce qui revient à la science de fusée.
TL;DR Avec 2018 est jours loin
neo4j
encore ne prend pas en chargesharding
comme il est généralement considéré comme.Détails
Neo4j
nécessite encore toutes les données pour tenir sur un seul nœud. Le nœud de contenu peut être reproduit à l'intérieur d'un cluster - mais, concrètement, la fragmentation n'est pas une partie de l'image.Quand neo4j parle de fragmentation, ils font référence à la mise en cache des parties de la base de données en mémoire: les différentes tranches sont mises en cache sur les différents nœuds répliqués. Qui diffère de dire à mysql de fragmentation, dans lequel chaque nœud contient une partie seulement de l'ensemble des données.
Voici un résumé de leur "prendre" sur l'évolutivité: leur produit le terme "Haute Disponibilité" https://neo4j.com/blog/neo4j-scalability-infographic/
. Notez que
High Availability
devrait pas être le même queScalability
: de sorte qu'ils ne sont pas réellement soutenir celle-ci dans le sens traditionnel du terme.