有没有办法加快Neo4j图的更新?

时间:2019-01-22 22:21:21

标签: neo4j cypher

我在Neo4j(3.5)中有一个图形,其中包含大约12m个节点和16m个边。该图在具有8个vCPU内核和8gb内存的RHEL VM上运行。

在下图所示的图形上执行更新时,我看到更新大约需要15秒钟才能完成。

我已经查看了Neo4j索引建议,但找不到任何表明它将完全加快更新速度的内容。该图的模式显示我已经在match属性上创建了一个索引; :Liability(Liability ID) ONLINE

MATCH (n {`Liability ID`: {liability_id}}) 
SET n.`Creditor Reference`= {reference},
n.`Liability Type`= {liability_type}, 
n.`Liability Sub-Type`= {liability_subtype}
RETURN n.`Liability ID`

感谢您的帮助。

编辑:我还尝试过使用以下架构的约束替换索引::Liability(Liability ID) ONLINE (for uniqueness constraint),这没有加快更新速度,反而使更新速度慢了1秒。

1 个答案:

答案 0 :(得分:3)

由于索引与 label 属性名称相关联,因此要使用索引,您必须指定 label 和您的MATCH模式中的属性名称。如果您未在模式中指定标签,则Cypher将被迫扫描所有节点,从而阻止其使用索引。

例如,这将使Cypher计划者生成使用您的索引的计划(唯一的实际更改是在MATCH子句中):

MATCH (n:Liability {`Liability ID`: {liability_id}}) 
SET
  n.`Creditor Reference` = {reference},
  n.`Liability Type` = {liability_type}, 
  n.`Liability Sub-Type` = {liability_subtype}
RETURN n.`Liability ID`;