public List<Errand> interestFeed(Person person, int skip, int limit)
throws ControllerException {
person = validatePerson(person);
String query = String
.format("START n=node:ErrandLocation('withinDistance:[%.2f, %.2f, %.2f]') RETURN n ORDER BY n.added DESC SKIP %s LIMIT %S",
person.getLongitude(), person.getLatitude(),
person.getWidth(), skip, limit);
String queryFast = String
.format("START n=node:ErrandLocation('withinDistance:[%.2f, %.2f, %.2f]') RETURN n SKIP %s LIMIT %S",
person.getLongitude(), person.getLatitude(),
person.getWidth(), skip, limit);
Set<Errand> errands = new TreeSet<Errand>();
System.out.println(queryFast);
Result<Map<String, Object>> results = template.query(queryFast, null);
Iterator<Errand> objects = results.to(Errand.class).iterator();
return copyIterator (objects);
}
public List<Errand> copyIterator(Iterator<Errand> iter) {
Long start = System.currentTimeMillis();
Double startD = start.doubleValue();
List<Errand> copy = new ArrayList<Errand>();
while (iter.hasNext()) {
Errand e = iter.next();
copy.add(e);
System.out.println(e.getType());
}
Long end = System.currentTimeMillis();
Double endD = end.doubleValue();
p ((endD - startD)/1000);
return copy;
}
当我剖析copyIterator函数时,大约需要6秒钟才能获取10个结果。我使用Spring Data Neo4j Rest来连接运行在本地机器上的Neo4j服务器。我甚至放了一个打印函数来查看迭代器转换为列表的速度有多快,并且看起来确实很慢。每个iterator.next()是否会创建一个新的Http调用?Spring Data Neo4j Ridiculously Slow Over Rest
谢谢您的回答,但以纪念它,我用的是neo4jtemplate.query()函数,因为空间查询不支持的参数。那么如何使用@QueryResult template.query(queryFast,null)来映射结果; – 2015-01-22 23:09:15
好主意谢谢。 – 2015-01-24 16:50:55