我正在使用 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
在我的本地机器上需要 48 秒。所以问题是 - 我如何提高性能或更改查询以在适当的时间获得三阶连接?