Ruby on rails 在neo4j数据库中获取三阶连接时,如何提高性能?
我正在使用neo4j数据库跟踪人与人之间的联系。我需要跟踪三阶连接(类似于linkedin的做法),但我在性能方面遇到了一些问题。在我的测试数据库中,我有大约3000个用户,其中有3到8个一级连接(联系人)。在获取二阶连接时,性能似乎都很好。但是获取三阶连接需要很长时间。我使用CYPHER查询来获取数据。数据库中只存储配置文件ID及其之间的连接 以下是查询本身:Ruby on rails 在neo4j数据库中获取三阶连接时,如何提高性能?,ruby-on-rails,performance,graph,neo4j,cypher,Ruby On Rails,Performance,Graph,Neo4j,Cypher,我正在使用neo4j数据库跟踪人与人之间的联系。我需要跟踪三阶连接(类似于linkedin的做法),但我在性能方面遇到了一些问题。在我的测试数据库中,我有大约3000个用户,其中有3到8个一级连接(联系人)。在获取二阶连接时,性能似乎都很好。但是获取三阶连接需要很长时间。我使用CYPHER查询来获取数据。数据库中只存储配置文件ID及其之间的连接 以下是查询本身: THIRD_ORDER_CONNECTIONS = <<-CYPHER START n=node:profile(id
THIRD_ORDER_CONNECTIONS = <<-CYPHER
START n=node:profile(id='%{id}')
MATCH n-[:contacts]-common_contact_1-[:contacts]-common_contact_2-[:contacts]-profile
WHERE common_contact.id <> %{exclude_id} AND common_contact_1.id <> common_contact_2.id
RETURN COLLECT(DISTINCT profile.id)
CYPHER
THIRD_ORDER_CONNECTIONS=您尝试过neo4j版本1.9.M01吗?对于像这样的直接模式,有更高的性能改进,这可能会产生巨大的差异,它会将更多的工作卸载到遍历框架。您的查询无效:common\u contact.id
不会解析为标识符
- 你得到了多少结果李>
- 如果在查询中添加方向
-->
t,查询时间会如何变化李>
- 请使用参数而不是ruby替换
- 尝试
返回profile.id
(独特的需要将所有内容保留在内存中以进行唯一筛选)
- 通常cypher会考虑唯一性,因此可能不需要
common\u contact\u 1.id common\u contact\u 2.id
如果省略整个WHERE子句,它会更快吗?@ulkas省略WHERE
子句使neo4j执行查询的速度几乎慢了两倍。(39.240216)无WHERE
条款,而(22.606653)有WHERE
条款。