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问题,所以请给点提示来改进这个问题
不确定要做什么,但是您不想为每个文件夹创建一个节点吗?
然后你需要一个文件夹列表。
你也可以从你的fs中收集所有的父->子对,并将它们作为一个长列表参数发送,然后使用foreach
对它们。
或者生成CSV文件,然后使用LOAD CSV