Neo4J保存查询性能(GrapheneDB)

问题描述 投票:0回答:1

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

我的保存方法逐步遍历每个分支,并合并节点和关系。 (为了保持整洁,我在每个步骤中都忽略了这些关系)。创建完整的查询后,代码将一次性执行。

  1. 合并根节点37和节点4
  2. 将类型1的节点12-17与4合并
  3. 将类型2的节点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秒,有时甚至会超时。

enter image description here

我已经尝试过保存另一种方式,它花费的时间更长,但并没有超时。我首先创建节点组。每个节点都存储根ID37。每个组都是在单独的执行中创建的。创建节点后,我通过选择子节点和根节点来创建关系。这会将查询分为多个单独的较小查询。

如何提高此保存的性能?加载其中30张图表需要3-5秒。我还应注意,随着添加了更多数据,保存的性能明显下降。

neo4j graph-databases database-performance graphenedb
1个回答
1
投票

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

尝试改用CREATE(只要CREATE避免创建重复项。]

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.