Skip to content

Instantly share code, notes, and snippets.

@jexp
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jexp/4c2601d68d54d8a9c939 to your computer and use it in GitHub Desktop.
Save jexp/4c2601d68d54d8a9c939 to your computer and use it in GitHub Desktop.
Long Chains in Cypher
cypher 2.1
FOREACH (id in range(1,10000) | CREATE (:Event {id:id}))
WITH 1 as dummy
MATCH (e:Event) WITH e ORDER BY e.id ASC
WITH collect(e) as events
FOREACH (i in range(0,length(events)-2) | FOREACH (a in [events[i]] | FOREACH (b in [events[i+1]] | CREATE (a)-[:NEXT]->(b) )));
CREATE INDEX ON :Event(id);
MATCH (n:Event {id:1})
match path = (n)-[:NEXT*]->()
RETURN n.id AS id, length(path) AS length
ORDER BY length DESC
LIMIT 1;
// 36 seconds
cypher 2.1.experimental
MATCH (n:Event {id:1})
match path = (n)-[:NEXT*]->()
RETURN n.id AS id, length(path) AS length
ORDER BY length DESC
LIMIT 1;
// 9 seconds
cypher 2.1.experimental
MATCH (n:Event {id:1})
match path = (n)-[:NEXT*]->()
RETURN count(*);
// 2 seconds
eval
importPackage(org.neo4j.helpers.collection);
importPackage(org.neo4j.tooling);
importPackage(org.neo4j.graphdb);
var node = IteratorUtil.single(db.findNodesByLabelAndProperty(DynamicLabel.label("Event"),"id",1));
var NEXT = DynamicRelationshipType.withName("NEXT");
var start = Date.now()
for (var count = 0;count < 10000; count++) {
var rel = node.getSingleRelationship(NEXT,Direction.OUTGOING);
if (rel == null) break;
node = rel.getEndNode();
}
out.println(""+node+ " time "+(Date.now()-start)+" ms")
// 60 ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment