graphgen - le générateur de graphes
TRANSCRIPT
GRAPHGENLe générateur de graphes
#Neo4j Meetup Lyon 18-12-2014
graphgen.neoxygen.io
#whoami
Christophe WillemsenSenior ConsultantExpert Neo4j
World’s #1Neo4j consultancy
@graph_awaregraphaware.com
@ikwattro
POURQUOI GRAPHGEN ?
RETOUR RAPIDE SUR LES FONCTIONSNATIVES A NEO4J POUR CRÉER
SON GRAPHE
A LA MAIN
CREATE (n:Personne {prenom: ‘Roger’, nom:’Laguadec’})
A ECRIRE
100XPour avoir 100 noeuds
AVEC UNE BOUCLE
FOREACH ( i in range(0,99) | CREATE (n:Personne {id:i} ) )
LOAD CSV
USING PERIODIC COMMIT 1000LOAD CSV WITH HEADERS FROM FILE
‘file:///Users/me/docs/import.csv’ AS csvMERGE (n:Personne {prenom: csv.prenom} )
ET AVEC GRAPHGEN ALORS ?
(p:Personne {prenom: firstName, nom: lastName} *100)
(p)-[:CONNAIS *n..n]->(p)
100 NOEUDS
VALEURS REELLES !
RelationsMany To Many
à 80%
DEMO 1
SYNTAXE DES NOEUDSBASEE SUR LE LANGAGE CYPHER !
(p:Personne {prenom: firstName} *100 )
identifiantlabel
propriété du noeud
faker typequantité
SYNTAXE DES RELATIONSBASEE SUR LE LANGAGE CYPHER !
-[:CONNAIS {depuis: unixTime} *n..n ]->
type
propriété de la relation
faker typecardinalité
PARAMETRES DE PROPRIETESExemple: Je veux 100 personnes avec une date de naissance,
mais ces personnes doivent être majeures et pas encore à l’âgeDe la retraite.
(p:Personne {nom: fullName, ddn: { dateTimeBetween: [‘’-65 years’’, ‘’-18 years’’]}} *100)YAML inline
!!!
Le gouvernemen
tpeut modifier cette valeur
sans avis préalable
Les faker types• word• sentence• dateTime• dateTimeBetween• text• unixTime• randomDigit• numberBetween• company• firstName, lastName• country• city• address
• latitude, longitude• url• username• password• creditCardNumber• ip• userAgent• uuid• ean13• fileExtension• hashTag• …… et plein d’autres
DEMO 2
GRAPHGEN ENCORE PLUS FORT !
NŒUDS TYPESECRIRE CA :
(user:User:Person {_id: uuid,login: userName,password: password,email: email,prenom: firstName,nom: lastName,ddn: { dateTimeBetween: [‘’-50 years’’, ‘’-18
years’’]}} *100)
C’EST LOOOOOOOOOOONG !
NŒUDS TYPESCOMME CA C’EST COOL :
(user:#User:#Person *100)
# = Activation du nœud type
NŒUDS TYPES
• #Person• #User• #Tweet• #File• #HashTag• #BlogPost• #Company• … et plein d’autres à venir
TRUCS & ASTUCES
ASTUCE 1Utiliser une propriété avec valeur fixe que je définis pour tous les nœuds
Personne
SOLUTION: randomElement avec 1 seul élément
(p:Personne:Administrateur {groupe: {randomElement:[‘’ADMIN’’]}} *20)
ASTUCE 2Suggestions (groupes de personnes qui ne peuvent pas se connaître)
SOLUTION: Créer deux groupes de nœuds distincts avec le même label
(p:#Person *20)-[:A_TRAVAILLE_POUR *n..1]->(c:#Company *10)(autres:#Person *20)-[:A_TRAVAILLE_POUR *n..1]->(c)
GRAPHGEN LES POINTS FORTS
• BASE SUR LA SPEC CYPHER (PAS DE NOUVELLE SYNTAXE A
APPRENDRE)
• DESTINE A TOUT LE MONDE
• GENERATION DE VALEURS
• VISUALISATION IMMEDIATE DE VOTRE GRAPHE
• IMPORTATION DU GRAPHE DANS VOTRE BASE
• EXPORT
MOINS FORTS
GRAPHGEN LES POINTS FAIBLES
• LE PROJET EST ENCORE JEUNE (10 OCTOBRE)
• S’ADAPTE A +- 75% DE COMPLEXITE
• QUELQUES FONCTIONS CLES AVANT UNE STABLE
RELEASE
• LIMITE A 1000 NŒUDS POUR LA VISUALISATION
Faut pas exagérernon plus !
A VENIR DANS GRAPHGEN
• User Dashboard pour sauver vos graphes
• Définir vos propres nœuds types
• Définir les pourcentages des relations x..n
• Génération GraphGist en 1 clic
• Public API
• Export vers d’autres formats
QUESTIONS ?
MERCI Graphgen : http://graphgen.neoxygen.io
Composants PHP pour Neo4j : https://github.com/neoxygen
Follow me : @ikwattro