【发布时间】:2014-07-01 11:14:52
【问题描述】:
通过不同的控制台执行相同的密码查询需要不同的时间:
通过 spring-data-neo4j 执行:(耗时 8 秒)
@Query(
"MATCH (user:User {uid:{0}})-[:FRIEND]-(friend:User)" +
"RETURN friend"
)
public List<User> getFriends(String userId);
通过 http://localhost:7474/browser/ 执行:(耗时 250 毫秒)
通过 http://localhost:7474/webadmin/#/console/ 执行:(耗时 18 毫秒)
即使通过控制台执行的查询速度非常快,并且花费的时间在可接受的范围内,但对于生产,我必须从我的 java 应用程序执行这些查询,在这种情况下,查询所花费的时间是完全不可接受的。
编辑:
@NodeEntity
public class User extends AbstractEntity {
@RelatedToVia(elementClass = Friendship.class, type = FRIEND, direction = BOTH)
private Set<Friendship> friendships;
...
}
【问题讨论】:
-
如果重复查询怎么办?可能第一个查询很慢(250 毫秒)而从控制台它很快?如果您先从控制台运行查询会怎样?
-
你是如何为实体建模的?用户中是否包含使用@Fetch 注释的朋友集?在那种情况下,从 SDN 花费很长时间的原因可能是将对象加载到内存中。高级映射也比简单映射更快。
-
@remigio 是对的,尤其是如果您使用 rest 数据库,这对于此类查询仍然非常无效
-
@frant.hartm 我多次交替执行相同的查询,每次都经历相同的行为
-
查看this link,了解简单映射和高级映射之间的区别。它可以有所作为。此外@frant.hartm 指出了一个很好的说法:你使用的是 REST 服务器还是 Neo4j 的嵌入式版本?