Graphgen - le générateur de graphes

Preview:

Citation preview

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

Recommended