Neo4J 保存查询性能(GrapheneDB)
Neo4J save query performance (GrapheneDB)
我创建了一个使用 Neo4J 图形数据库(以 GrapheneDB 作为提供者)的 .Net 应用程序。保存新图形对象时出现性能问题。我没有保留图表的历史记录,所以每次保存时,我都会先删除旧的,包括节点和关系,然后再保存新的。我还没有索引我的节点。我不认为这是问题所在,因为一次加载多个这些图表非常快。
我的保存方法遍历每个分支并合并节点和关系。 (为了清洁起见,我将关系排除在每一步之外)。创建完整查询后,一次性执行代码。
- 合并根节点37和节点4
- 将 type1 节点 12-17 与 4 合并
- 将 type2 节点 18-22 与 4 合并
- 合并 2 和 37
- 合并 7-11 与 2
- 将 5 与 37 合并(建立关系)
- 将 23-26 与 5 合并
- 将 6 与 37 合并(建立关系)
- 合并 30-27 与 6
节点 2、4、5、6 可以有 100-200 个叶节点。我的数据库中大约有 100 张这样的图表。此保存可能需要服务器 10 - 20 秒的生产时间,有时会超时。
我尝试过另一种保存方式,它需要更长的时间,但不会经常超时。我首先创建节点组。每个节点存储根 ID 37。每个组都是在单独的执行中创建的。创建节点后,我通过选择子节点和根节点来创建关系。这会将查询拆分为单独的较小查询。
我怎样才能提高这个保存的性能?加载 30 个这样的图表需要 3-5 秒。我还应该注意到,随着添加更多数据,保存的性能明显降低。
由于事先删除了所有节点(及其关系),因此根本不应该使用 MERGE
,因为这需要大量扫描(没有相关索引)以确定每个节点是否已经存在。
尝试使用 CREATE
(只要 CREATE
避免创建重复)。
我创建了一个使用 Neo4J 图形数据库(以 GrapheneDB 作为提供者)的 .Net 应用程序。保存新图形对象时出现性能问题。我没有保留图表的历史记录,所以每次保存时,我都会先删除旧的,包括节点和关系,然后再保存新的。我还没有索引我的节点。我不认为这是问题所在,因为一次加载多个这些图表非常快。
我的保存方法遍历每个分支并合并节点和关系。 (为了清洁起见,我将关系排除在每一步之外)。创建完整查询后,一次性执行代码。
- 合并根节点37和节点4
- 将 type1 节点 12-17 与 4 合并
- 将 type2 节点 18-22 与 4 合并
- 合并 2 和 37
- 合并 7-11 与 2
- 将 5 与 37 合并(建立关系)
- 将 23-26 与 5 合并
- 将 6 与 37 合并(建立关系)
- 合并 30-27 与 6
节点 2、4、5、6 可以有 100-200 个叶节点。我的数据库中大约有 100 张这样的图表。此保存可能需要服务器 10 - 20 秒的生产时间,有时会超时。
我尝试过另一种保存方式,它需要更长的时间,但不会经常超时。我首先创建节点组。每个节点存储根 ID 37。每个组都是在单独的执行中创建的。创建节点后,我通过选择子节点和根节点来创建关系。这会将查询拆分为单独的较小查询。
我怎样才能提高这个保存的性能?加载 30 个这样的图表需要 3-5 秒。我还应该注意到,随着添加更多数据,保存的性能明显降低。
由于事先删除了所有节点(及其关系),因此根本不应该使用 MERGE
,因为这需要大量扫描(没有相关索引)以确定每个节点是否已经存在。
尝试使用 CREATE
(只要 CREATE
避免创建重复)。