Yes definitely, I recently generated a tree of 10bn nodes/relationships for a prospect and then we ran deep aggregation queries in a few ms to seconds.
The basic query is:
MATCH path = (start:File {id: $startId })<-[:PARENT*20]-(child)
RETURN nodes(path)
Data import is also straightforward if you have two lists, one for the files and one for the parent relationship, then you can use the LOAD CSV command.
CREATE CONSTRAINT ON (f:File) ASSERT
f.id IS UNIQUE;
USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:///files.csv" AS row
CREATE (file:File {id:
row.id}) // or MERGE
SET
file.name =
row.name, file.size = toInteger(row.size), file.created = toInteger(row.created);
USING PERIODIC COMMIT 10000
LOAD CSV WITH HEADERS FROM "file:///parents.csv" AS row
MATCH (parent:File {id:row.parent})
MATCH (child:File {id:row.child})
CREATE (parent)<-[:PARENT]-(child);
Feel free to join
neo4j.com/slack and ask there for more concrete bits of help.
Michael