c# neo4jclient文件系统表示-如何减少高事务计数?或者优化性能

本文关键字:事务 性能 优化 或者 表示 文件系统 neo4jclient 高事务 何减少 | 更新日期: 2023-09-27 18:15:28

我试图使neo4j db代表我的文件系统。在c#和neo4jclient中尝试过,但是与不发送事务的情况下相比,读取文件系统和写入数据库的过程真的很慢。

递归遍历我的文件系统。对于每个文件夹,创建一个包含其子文件夹的数组,并使用以下方法创建一个密码请求(因此宽度优先遍历):

        public void createFolders(Folder[] folder, Folder rootFolder)
     {
         client.Cypher
            .Match("(root:FOLDER)")
            .Where((Folder root) => root.fullpath == rootFolder.fullpath)
            .Create("(folder:FOLDER {newFolders})")
            .CreateUnique("root -[:CONTAINS]->folder")
            .WithParam("newFolders", folder)
            .ExecuteWithoutResults();
     }

有任何提高性能的提示吗?创建更大的数组是否更好?或者neo4jclient对文件夹[]中的每个文件夹都做请求?

编辑:

在使用wireshark进行一些分析之后,我可以看到以数组作为参数的Cyper.Create()确实创建了一个包含所有子文件夹的参数数组的数据库服务器请求。

我不知道如何深入分析性能,有时脚本创建6000 nodes/min有时只有50个节点/分钟

如果我的c#文件夹遍历运行没有Cypher.ExecuteWithoutResults()脚本快得多。

有什么分析或改进性能的想法吗?

对不起,这是我的第一个Stackoverflow问题,所以请给点提示来改进这个问题

c# neo4jclient文件系统表示-如何减少高事务计数?或者优化性能

不确定要做什么,但是您不想为每个文件夹创建一个节点吗?

然后你需要一个文件夹列表。

你也可以从你的fs中收集所有的父->子对,并将它们作为一个长列表参数发送,然后使用foreach对它们。

或者生成CSV文件,然后使用LOAD CSV