Neo4J 保存查询性能(GrapheneDB)

Neo4J save query performance (GrapheneDB)

我创建了一个使用 Neo4J 图形数据库(以 GrapheneDB 作为提供者)的 .Net 应用程序。保存新图形对象时出现性能问题。我没有保留图表的历史记录,所以每次保存时,我都会先删除旧的,包括节点和关系,然后再保存新的。我还没有索引我的节点。我不认为这是问题所在,因为一次加载多个这些图表非常快。

我的保存方法遍历每个分支并合并节点和关系。 (为了清洁起见,我将关系排除在每一步之外)。创建完整查询后,一次性执行代码。

  1. 合并根节点37和节点4
  2. 将 type1 节点 12-17 与 4 合并
  3. 将 type2 节点 18-22 与 4 合并
  4. 合并 2 和 37
  5. 合并 7-11 与 2
  6. 将 5 与 37 合并(建立关系)
  7. 将 23-26 与 5 合并
  8. 将 6 与 37 合并(建立关系)
  9. 合并 30-27 与 6

节点 2、4、5、6 可以有 100-200 个叶节点。我的数据库中大约有 100 张这样的图表。此保存可能需要服务器 10 - 20 秒的生产时间,有时会超时。

我尝试过另一种保存方式,它需要更长的时间,但不会经常超时。我首先创建节点组。每个节点存储根 ID 37。每个组都是在单独的执行中创建的。创建节点后,我通过选择子节点和根节点来创建关系。这会将查询拆分为单独的较小查询。

我怎样才能提高这个保存的性能?加载 30 个这样的图表需要 3-5 秒。我还应该注意到,随着添加更多数据,保存的性能明显降低。

由于事先删除了所有节点(及其关系),因此根本不应该使用 MERGE,因为这需要大量扫描(没有相关索引)以确定每个节点是否已经存在。

尝试使用 CREATE(只要 CREATE 避免创建重复)。