Phanor Coll menu

100k Neo4j

Si queremos probar y experimentar con Neo4j pero no tenemos un conjunto de datos para importar (CVS,GraphML), podemos crear nuestro modelo de datos usando Cypher de una manera simple.

El dominio es simple pero claro para realizar analisis

(:Usuario)-[:Tiene]->(:Producto)

Nodos: Usuario y Productos

Vamos a iniciar con los Usuarios, crearemos 100k nodos:

Creamos un arreglo de nombres y lo recorremos con el FOREACH, tomando el contador como el ID y un nombre del arreglo.


WITH ["Andres","Wes","Rik","Mark","Peter","Kenny","Michael","Stefan","Max","Chris"] AS names
FOREACH (r IN range(0,100000) | CREATE (:Usuario {id:r, name:names[r % size(names)]+" "+r}));

este comando se debe ejecutar en corto tiempo y regresaria lo siguiente:


+-------------------+
| No data returned. |
+-------------------+
Nodes created: 100001
Properties set: 200002
Labels added: 100001
5788 ms

Haremos lo mismo para los Productos


with ["Mac","iPhone","Das Keyboard","Kymera Wand","HyperJuice Battery","Peachy Printer",
"HexaAirBot","AR-Drone","Sonic Screwdriver","Zentable","PowerUp"] as names
foreach (r in range(0,50) | create (:Producto {id:r, name:names[r % size(names)]+" "+r}));

Hay que tomar en cuenta que solo se crearon 50 productos, esto se debe a que si creamos por ejemplo 3000, terminariamos con 300M de relaciones entre productos y usarios.


+-------------------+
| No data returned. |
+-------------------+
Nodes created: 51
Properties set: 102
Labels added: 51
46 ms

Relación: Tiene

La idea general es de crear relaciones entre usuarios y productos.


match (u:Usuario),(p:Producto)
with u,p
limit 5000000
where rand() < 0.1
create (u)-[:TIENE]->(p);

+-------------------+
| No data returned. |
+-------------------+
Relationships created: 509898
11684 ms

de esta manera podremos crear un dataset de 100k nodos con sus relaciones.

Traducido del articulo original escrito por Michael Hunger.

Aqui esta el articulo original.

Aqui tambien lo podran ver y experimentar, usando graphgist