Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在neo4j数据库中获取三阶连接时,如何提高性能?_Ruby On Rails_Performance_Graph_Neo4j_Cypher - Fatal编程技术网

Ruby on rails 在neo4j数据库中获取三阶连接时,如何提高性能?

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

我正在使用neo4j数据库跟踪人与人之间的联系。我需要跟踪三阶连接(类似于linkedin的做法),但我在性能方面遇到了一些问题。在我的测试数据库中,我有大约3000个用户,其中有3到8个一级连接(联系人)。在获取二阶连接时,性能似乎都很好。但是获取三阶连接需要很长时间。我使用CYPHER查询来获取数据。数据库中只存储配置文件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
条款。