我已经创建了一个.Net应用程序,该应用程序利用了Neo4J图形数据库(以GrapheneDB作为提供程序)。当我保存一个新的图形对象时,我出现了性能问题。我没有保存图表的历史记录,所以每次保存时,我首先删除包含节点和关系的旧图,然后保存新的。我还没有索引我的节点。我不认为这是个问题,因为一次加载多个这些图是非常快的。
我的save方法遍历每个分支并合并节点和关系。(为了保持清洁,我把人际关系放在每一步之外)。创建完整查询后,代码将一次性执行。
relationships)
H19合并7-11与2H 210H 111合并5与37 (创建 23-26与5H 214H 115与37合并6(创建relationships)
merge 30-27与6H 218/code>G 219)节点2,4,5,6可有100~200个叶节.我的数据库里有大约100张这样的图表。此保存可以在生产中花费服务器10-20秒的时间,有时会超时。

我尝试了一种不同的方法,它需要更长的时间,但没有那么频繁的超时。我首先创建一组节点。每个节点存储根id 37。每个组都是在单独的执行中创建的。在创建节点之后,我通过选择子节点和根节点来创建关系。这将将查询拆分为单独的更小的查询。
如何提高此保存的性能?加载这些图表需要3到5秒。我还应该注意到,随着数据的增加,保存的性能明显降低。
发布于 2020-03-10 23:36:32
因为您事先删除了所有节点(及其关系),所以根本不应该使用MERGE,因为这需要进行大量扫描(没有相关的索引)来确定每个节点是否已经存在。
尝试使用CREATE (只要CREATE避免创建重复项)。
https://stackoverflow.com/questions/60619702
复制相似问题