我已经创建了一个利用Neo4J图形数据库(以GrapheneDB作为提供者)的.Net应用程序。保存新的图形对象时出现性能问题。我没有保留图形的历史记录,因此每次保存时,我都会先删除包含节点和关系的旧图表,然后再保存新的图表。我尚未索引节点。我不认为这是问题所在,因为一次加载多个这些图非常快。
我的保存方法逐步遍历每个分支,并合并节点和关系。 (为了保持整洁,我在每个步骤中都忽略了这些关系)。创建完整的查询后,代码将一次性执行。
节点2、4、5、6可以具有100-200个叶节点。我的数据库中大约有100个这些图。这种保存可能会使服务器在生产中花费10到20秒,有时甚至会超时。
我已经尝试过保存另一种方式,它花费的时间更长,但并没有超时。我首先创建节点组。每个节点都存储根ID37。每个组都是在单独的执行中创建的。创建节点后,我通过选择子节点和根节点来创建关系。这会将查询分为多个单独的较小查询。
如何提高此保存的性能?加载其中30张图表需要3-5秒。我还应注意,随着添加了更多数据,保存的性能明显下降。
由于事先删除了所有节点(及其关系),因此根本不应该使用MERGE
,因为这需要进行大量扫描(没有相关索引)以确定每个节点是否已经存在。
尝试改用CREATE
(只要CREATE
避免创建重复项。]