为了加快插入节点的过程,我在 Neo4j 中开发了自己的插件。主要是因为我需要插入节点和关系,前提是它们之前不存在,使用 REST API 可能会太慢。
如果我尝试调用我的插件 100 次,每次插入大约 100 个节点和 100 个关系,每次调用大约需要 350 毫秒。每个调用都插入不同的节点,以排除锁定原因。
但是,如果我并行化我的调用(每次 2、3、4...),响应时间会随着并行度的增加而下降。当我一次调用 2 个时插入我的 200 个对象需要 750 毫秒,当我调用 3 个时需要 1000 毫秒等等。
我正在使用 HttpWebRequest 从 .NET MVC 控制器调用我的插件。我将 maxConnection 设置为 10000,我可以看到所有 TCP 连接都打开了。
我对这个问题进行了一些调查,但似乎非常错误。我一定做错了什么,无论是在我的 neo4j 配置中,还是在我的插件代码中。使用 VisualVM,我发现 Neo4j 启动的用于处理我的调用的线程正在按顺序工作。看图片链接。
http://i.imgur.com/vPWofTh.png
我的配置:Windows 8、2 核 8G RAM Neo4j 2.0M03 作为服务安装,没有配置调整
希望有人能帮助我。事实上,我将无法在生产中使用 Neo4j,那里会有数十个并发调用,不能按顺序完成。