了解 Neo4j 索引的使用以实现快速数据摄取,而不管数据库大小

Understanding Neo4j index usage for fast data ingestion regardless of DB size

我正在尝试为 psudo 实时事件管道构建一个 Neo4j 摄取框架。每个事件在摄取之前都被分配了一个 UUID4,并且正是这个 UUID4 字段用于标签 :Entity 的唯一性约束。所有事件都被赋予标签 :Entity 以及它们的其他相关标签。对 Neo4j 的任何摄取都以此 UUID 字段上的合并为前缀,以创建 node/edge(如果它不存在)但防止创建重复事件。我目前的理解是,由于在该字段上创建了 INDEX,此唯一性约束应允许在此 UUID 字段上进行匹配(通过合并),其速度与 neo4j 中已有的 nodes/edges 的数量不变。

不幸的是,这不是我在测试中看到的结果。随着 neo4j 中 nodes/edges 数量的增加,摄取速度按比例减慢。

我是否错误地使用了 Neo4j INDEX 来实现持续快速摄取的目标?还是我只是误解了 Neo4j INDEX?

非常感谢对此问题的任何见解!

作为参考,这是摄取查询的一般形式:

     UNWIND [...] as params
     WITH params.meta as meta, params.props as props
     MERGE (a :Entity {unique_id: meta.unique_id})
     SET a += props

UNWIND 用于在一个事务中执行批量摄取多个事件。

编辑: 这是个人资料的屏幕截图

看来增加页面缓存大小可以解决问题。我相信我正在将数据交换到磁盘。