Neo4j 3.0

Benoit Simard (@logisima)

introduction

Benoit Simard, consultant

me

Les prochains évènements

calendar
  • 1er juin : Les graphes dans les projets industriels orientés data, par Kernix

  • 15 juin : Venue sur Paris de Andres Taylor (le créateur de Cypher)

  • 28 juin: Graphes & Finance - Plongée dans les Panama Papers

  • 21 septembre : Graph day Paris

L’histoire de Neo4j

Neo4j 0.X - 2000 à 2010

voiture 1
  • API Java

  • JAR de petite taille

  • Indexation basique

Neo4j 1.X - 2010 à 2014

voiture 2
  • API REST

  • Serveur Neo4j

  • Mode cluster

  • Cypher dans la 1.4

Neo4j 2.X - 2014 à 2016

voiture 3
  • Cypher par defaut (ajout de l’écriture)

  • Ajout des Labels

  • Schema

  • Neo4j Browser

  • Page Cache

Neo4j 3.0

Les fondements

daft punk

Permettre à tout le monde de développer des applications graphes

  • Simplement

  • Rapidement

  • Sans contrainte de volumétrie

Les fondements

fondements

Du coté des architectes

Jusqu’au bout de l’extrême limite !

EE : Un nouveau moteur de stockage qui abolit les limites de Neo4j (> 1 quadrillion) !

big graph

Les indexes, c’est majeur

lucene
  • Mise à jour de lucene en version 5

  • Indexation en parallèle (meilleure performance en écriture)

  • Partitonnement des indexes lucene (suppression de la limitation de 2 milliards)

Pour les ops !

Cloud , virtualisation, containers

  • Amélioration des performances sur les environnements virtualisés (Optimisation du page-cache)

  • Image docker officielle

docker

Refactoring : la structure

Modification de la structure

Refactoring : la configuration

Un seul fichier de conf conf/neo4j.conf, avec les propriétés namespacés

/!\ Les noms des propriétés ont donc changé !

Refactoring : les logs

Tous les fichiers de logs sont à présent dans le répertoire logs

Le coin des développeurs

Bolt

bolt
  • Protocole binaire

  • Transport : TCP & Websocket

  • Sécurisé : TLS & authentification par défaut

  • Versionné

  • bolt://localhost:7687

Bolt: drivers officiels

bolt drivers

Bolt

Les procédures stockées

procedures

Ecrivez du code personnalisé :

  • En Java (compatible JVM)

  • Stocké sur le serveur (un jar à déployer)

  • Accessible en Cypher

Les procédures stockées : built-in

procedure built in

APOC

  • Obtenir le meta-graph : CALL apoc.meta.graph()

  • Charger des données en JDBC :

    • CALL apoc.load.driver('com.mysql.jdbc.Driver')

    • CALL apoc.load.jdbc('jdbc:mysql:localhost/mysql', 'SELECT * FROM user') YIELD row CREATE (:User {name:row.User})

  • Charger des données JSON

  • Des fonctions spatiales

  • …​

Neo4j Browser Sync

Synchronisez vos scripts, configuration, style sur tous vos navigateurs

neo4j sync

Cypher

cypher engine
  • ENDS WITH et CONTAINS se basent maintenant sur les indexes (tout comme STARTS WITH en 2.3)

  • Amélioration globale des performances sur les aggregations (ex: count sur les labels)

  • Amélioration des performances d’écritures / écritures

    • Upgrade de lucene

    • Planneur basé sur les coûts pour les écritures

Cypher : planneur basé sur les coûts

  • Basé sur la connaissance des données en base (ie. des statistiques)

  • A été introduit en 2.2 pour les requêtes en lecture seule

  • Est disponible à présent aussi pour les requêtes d’écritures

  • Planneur par défaut

cypher planner

Cypher : example

Cypher version: CYPHER 3.0, planner: RULE. 3060001 total db hits in 7197 ms.

Cypher version: CYPHER 3.0, planner: COST. 50003 total db hits in 3280 ms.

Cypher : shortestpath

Les prédicats utilisés dans la clause WHERE sont maintenant évalués pendant l’algorithme !

Comment upgrader ?

Upgrader en 3.X

  • Java 8

  • Mise à jour du store : dbms.allow_format_migration=true

  • Mise à jour de lucene : reconstruction des indexes

  • Mise à jour de la configuration : java -jar config-migrator.jar path/to/neo4j2.3 path/to/neo4j3.0

Merci

Des questions ?

questions