Neo4j 图结构和性能问题

Neo4j graph structure and performance issue

在我的 Neo4j/SDN 应用程序中,我 运行 遇到了获取 VoteGroup 节点的性能问题,该节点包含与节点的关系 - DecisionCriterion

此处描述的详细信息 -

在我的应用程序中,每对 DecisionCriterion 都有一个 Vote 的列表。每个 Voteweight(double).

我需要根据每对 DecisionCriterion 上所有 Vote 的平均值执行一些数学运算。

以前每个 Vote 都包含对节点的引用 - DecisionCriterion(现在像 VoteGroup)。

为了提高在每对 DecisionCriterion 上获取所有 Vote 的平均值的性能,我引入了包含关系的新中间节点 VoteGroup到节点 - DecisionCriterion,为此 DecisionCriterion 预先计算的 avgWeight 所有 Vote 并且还包含对所有这些 [= =14=]。

现在我在获取 VoteGroup:

时遇到了性能问题
MATCH (d:Decision)<-[:VOTED_FOR]-(vg:VoteGroup)-[:VOTED_ON]->(c:Criterion)
WHERE id(d) = {decisionId} AND id(c) = {criterionId} 
RETURN vg

我不知道哪里出了问题..可能是我创建了错误的图形结构或其他东西..

请帮我解决这个问题。

首先 - 使用内部 id 不是个好主意。考虑使用您自己的 id 属性(并且不要忘记在其上添加索引)。

其次 - 您可以尝试分析查询以找出查询中的弱点 (info)。
长话短说;博士; - 在查询前添加 PROFILE

第三 - 您可以重写查询以帮助数据库以更优化的方式工作。 示例:

MATCH (d:Decision) WHERE id(d) = {decisionId}
MATCH (c:Criterion) WHERE id(c) = {criterionId}
WITH d, c
MATCH (d)<-[:VOTED_FOR]-(vg:VoteGroup)-[:VOTED_ON]->(c)
RETURN vg

此处的关键部分是 WITH 关键字 (info)。

希望对您有所帮助。

我已转移到新的 Neo4j 2.2.4 和 SDN 3.4.0.RC1,问题消失了