Disponibilité de Neo4j 2 .2.0

30/03/2015
Logo Neo4j

La société Neo technology a annoncé la disponibilité de la mise à jour majeure de sa solution de base de données orientée graphes : Neo4j 2.2.0. Cette version embarque de nombreuses améliorations comme le support des charges massives en écrire et lecture, une performance améliorée des requêtes Cypher et des outils pour améliorer la productivité des développeurs.

Neo4j 2.2, est une mise à jour majeure de la base de données. La charge de travail pour aboutir à la succession de Neo4j 2.1 est colossale : elle représente plus de 20 hommes/année. L’équipe de développement l’annonce comme un grand pas en avant non seulement pour le produit Neo4j, mais aussi pour l’industrie des bases de données orientées graphes.

Cette nouvelle version est la plus rapide livrée à ce jour, notamment par l’amélioration du débit opérationnel en lecture et écriture tout en optimisant les capacités d’évolutivité et de montée en charge. Pour réussir ce pari, l’équipe a pris en considération la taille des données, la forme des données et les cadres d’utilisations qui en sont l’objet.

Écritures massives

Un flux d’écriture jusqu’à 100 fois plus rapide

Neo4j ne péchait pas nécessairement par son manque de rapidité jusqu’à maintenant, mais que faire lorsque l’on doit gérer des centaines ou des milliers de transactions concurrentes voulant écrire sur la base de données ?

L’équipe a répondu à ce challenge en bâtissant une nouvelle architecture de tampon en particulier, qui a permis une augmentation drastique de la performance. Elle affecte à la fois le temps de chargement initial d’un graphe, mais aussi la performance des applications serveur concurrentes.

Dans Neo4j, les écritures concurrentes sont maintenant empaquetées ensemble, optimisant ainsi le flux par la réduction du nombre d’opérations sur le disque et amortissant le coup d’une transaction. Le résultat est une augmentation très importante du nombre de transactions traitées par seconde.

Requêtes d’écritures avant la version 2.2
neo4j-pre-2-2
Requêtes d’écritures depuis la version 2.2
neo4j-post-2-2

 

 

L’équipe a aussi éliminé les commits en deux temps qui se produisent à chaque opération d’écriture, grâce à l’unification des logs de transactions pour le graphe de données et les index relatifs, les reconnaissant comme un événement unique. Cela bénéficie immédiatement à toutes le transactions.

Amélioration de l’import des données

Pour l’import des données, l’équipe a aussi fait un pas en avant, permettant l’import en vrac d’être exécuter comme une opération mécanique très efficace. Le nouvel outil neo4j-import écrit directement le graphe sur le disque, court-circuitant l’écriture de base transactionnelle pour les bases de données hors ligne. La conséquence est un flux d’écriture soutenable pour des millions d’enregistrements par seconde, pour les graphes de toutes les tailles, jusqu’à 10 milliards de nœuds et de relations.

Lectures massives

Un flux de lecture jusqu’à 10 fois plus rapide

Du côté des lectures, avec l’analyse de la montée en charge sur des centaines ou milliers de threads, un benchmark interne a révélé un intéressant goulot d’étranglement. Le sous-système de gestion de la mémoire se reposait sur le système d’exploitation pour les caches de bas niveau. Ce mécanisme fonctionnait correctement jusqu’à un certain point, mais s’effondrait devant une très grande demande, puisque le système d’exploitation est optimisé pour une demande générique de mise en cache, différente des graphes.

Neo4j 2.2 a donc inclut un tout nouveau modèle de gestion des pages mémoire pour fournir une performance extrême et supporter la montée en charge des tâches concurrentes. Fondé sur un algorithme LRU-K bien connu, le cache de page mémoire utilise une stratégie statistique optimale pour peupler le cache avec les données les plus fréquemment utilisées, qui minimise le besoin d’accès disque plus lents. La mise en place de ce nouveau mécanisme a grandement amélioré les performances pour les charges concurrentes, multipliant la performance en lecteur jusque 10 fois, en fournissant un support de montée en charge uniforme pour les environnements multicœurs.

Le nouveau cache de page permet la mise en mémoire pure de la base de données, évitant la perte soudaine de données tout en conservant le support d’une grande granularité au niveau des nœuds ou des relations.

Optimisation des requêtes Cypher

Des requêtes 100 fois plus rapides

Pour l’équipe Neo4j les requêtes Cypher représentent le moyen le plus efficace d’écrire des requêtes. Cependant, comme tout nouveau langage, le fardeau des développeurs de requêtes est de fournir des astuces et structures pour rendre les requêtes les plus efficientes possible. Pour permettre aux requêtes de délivrer les meilleures performances Neo4j 2.2 introduit un optimiseur basé sur le coût.

Optimisation basée sur le coût

Le nouvel optimiseur est plus intelligent sur la planification des requêtes et plus transparent sur son fonctionnent. Les nouvelles capacités de collecte des statistiques traque l’échelle et la forme du graphe. Neo4j utilise cette nouvelle information sur l’utilisation des données pour uniformiser l’optimisation des requêtes, afin de déterminer le meilleur plan d’exécution.

Le résultat est que de nombreuses requêtes Cypher sont maintenant 100 fois plus rapides que dans les précédentes versions, bénéficiant à tous les développeurs, quels que soient leurs niveaux de compétence.

 

neo4j-2-2-optimizer

 

L’équipe a aussi pris en compte la capacité des utilisateurs à mieux comprendre l’usage de leurs requêtes que le système. Pour ces utilisateurs, l’optimiseur basé sur les règles est toujours disponible dans les « astuces ». L’équipe a même introduit une fonction de profilage pour fournir une meilleure connaissance dans l’exécution des requêtes pour aider les développeurs à écrire des requêtes plus rapides. Il suffit d’ajouter la commande PROFILE à n’importe quelle requête pour recevoir une visualisation du plan de requête. Pour obtenir le plan de visualisation sans exécuter la requête, il suffit d’utiliser la commande EXPLAIN.

Cette fonctionnalité permet aux utilisateurs de discerner les plus grandes séries du graphe, lorsqu’une faible partie de celle-ci est utile. Cela peut-être très informatif et permet de repérer les opportunités de réécriture des requêtes afin d’optimiser les performances.

Visualisation du plan de requête

neo4j-2-2queryplan-274x300

 

Amélioration de la productivité pour les développeurs

L’équipe de Neo4j insiste sur les améliorations portées sur cette nouvelle version, qui facilitent la vie des développeurs au quotidien par la l’ajout de nouvelles fonctionnalités :

  • Un nouveau guide de démarrage rapide avec des exemples construits directement dans le navigateur Neo4j
  • Un guide expliquant la migration d’un système de base de données RDBMS via l’utilisation du nouveau Northwind Graph en exemple
  • Un nouveau bouton de commande dans le navigateur Neo4j pour exécuter une requête Cypher
  • La visualisation du plan de requête pour identifier les goulets d’étranglement
  • L’export des modèles de graphe dans des formats d’image embarquée (SVG, PNG) pour partager les visualisations
  • Un feedback du produit intégré

 

Source : http://neo4j.com

Solutions

comments powered by Disqus
top