Hi guys, with my colleagues we are comparing two graph databases wich one is neo4j. We have around 100k of nodes and 1m of edges and we need traverse the graph by a start node. While in other db we have no difficult to get the results in few seconds, in neo4j we get several performance issue.
Our problem: Given a start node are considered valid all paths that satisfy a condition: Given a range [1, 10] if a edge "r" has r.property in [1,10] and r.property = x the next edge "r1", of the path, must have r1.property in [x,10] and so on... For small ranges the performance of two dbs are comparable... We use the traversal api: private Traverser getFoF(final Node node, boolean isBackward, Long start, Long end) { TraversalDescription td = graphDb .traversalDescription() .order(BranchOrderingPolicies.PREORDER_DEPTH_FIRST) .relationships(RelTypes.MOVES, Direction.OUTGOING) .evaluator(Evaluators.excludeStartPosition()) .uniqueness(Uniqueness.RELATIONSHIP_PATH) .evaluator(new PathFilter(start, end)); return td.traverse(node); } public class PathFilter implements Evaluator, Predicate { Long lastValue = 0L , start = 0L , end = 0L; public PathFilter(Long start, Long end) { this.start = start; this.end = end; } @SuppressWarnings("unchecked") public Evaluation evaluate(Path path) { List<Relationship> filteredRels = (List<Relationship>) CollectionUtils.select(IteratorUtils.toList(path.relationships().iterator()), new PathFilter(start, end)); if (path.length() == filteredRels.size()) { return Evaluation.INCLUDE_AND_CONTINUE; } return Evaluation.EXCLUDE_AND_PRUNE; } public boolean evaluate(Object arg) { if (!(arg instanceof Relationship)) { return false; } if (lastValue == 0L) { lastValue = start; } Relationship rel = (Relationship) arg; Long property = (Long) rel.getProperty("property"); if (evaluateDate(property, lastValue, end)) { lastValue = property; return true; } return false; } private boolean evaluateDate(Long value, Long start, Long end) { return value >= start && value <= end; } } Another request: exists already a construct that allows cypher to make an assessment of this type? Thanks to all -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to neo4j+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.