gpt4 book ai didi

java - 对自定义插件的并发调用一次处理 1 个

转载 作者:行者123 更新时间:2023-12-01 14:19:29 28 4
gpt4 key购买 nike

我在 Neo4j 中开发了自己的插件,以加快插入节点的过程。主要是因为我只需要在节点和关系不存在的情况下插入它们,而使用 REST API 可能会太慢。

如果我尝试调用我的插件 100 次,每次插入大约 100 个节点和 100 个关系,则每次调用大约需要 350 毫秒。每次调用都会插入不同的节点,以排除锁定原因。

但是,如果我并行化我的调用(一次 2、3、4...),响应时间会根据并行度相应下降。当我一次执行 2 个调用时,插入 200 个对象需要 750 毫秒,当我执行 3 个调用时,需要 1000 毫秒,等等。

我正在使用 HttpWebRequest 从 .NET MVC Controller 调用我的插件。我将 maxConnection 设置为 10000,我可以看到所有打开的 TCP 连接。

我对这个问题进行了一些调查,但似乎非常错误。我一定是在我的 neo4j 配置中或者在我的插件代码中做错了什么。使用 VisualVM,我发现 Neo4j 启动来处理我的调用的线程正在按顺序工作。请参阅链接的图片。

/image/5IJ8s.png

我的 session :Windows 8,2 核8G内存Neo4j 2.0M03 作为服务安装,无需配置调整

希望有人能够帮助我。事实上,我将无法在生产中使用 Neo4j,其中将有数十个并发调用,并且无法按顺序完成。

最佳答案

Neo4j 是事务性的。每次提交都会触发文件系统上的 IO 操作,该操作需要在同步块(synchronized block)中运行 - 这解释了您所附的图片。因此,最佳实践是单线程运行写入。当然,任何预处理都可以从并行化中受益。

一般来说,为了获得最佳性能,请使用稳定版本(截至目前为 1.9.2)。早期里程碑构建尚未优化,因此您可能会得到错误的图片。

另一件需要考虑的事情是插件中使用的交易大小。单笔交易 10k 到 50k 应该会给您带来最佳结果。如果您的事务非常小,则事务开销会很大,如果事务很大,则需要大量内存。

写入性能很大程度上取决于底层 IO 子系统的性能。如果可能的话,使用快速 SSD 驱动器,甚至更好的 strip 化。

关于java - 对自定义插件的并发调用一次处理 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742303/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com