天儿真好,
我在Clojure中编写了一个小程序,使用neocons将大量数据插入到Neo4J v1.9.4中,并且在使用它之后一直在修改性能。
在大数据集上,瓶颈是将关系插入到Neo4j中,考虑到它们必须一次一个地完成,这并不奇怪。所以我的想法是在它上面撒上一些pmap魔法,看看是否有一些天真的并行性有帮助。
出乎意料地(至少对我来说),导致neocons抛出“java.net.ConnectException:Connection refused”异常,这似乎很奇怪,因为客户端将默认为10个线程(pmap创建的不超过numberOfProcessors + 2个线程),而Neo4j将默认为80个线程(numberOfProcessors * 10,至少如果我正在读the docs右)。上次我检查时,10小于80,所以Neo4j应该......<脱鞋> ...需要很多线程。
有问题的代码行是here - 唯一的变化是将“地图”调用切换为“pmap”调用。
有任何想法/建议吗?
提前致谢,
彼得
答案 0 :(得分:1)
彼得,
我建议使用批处理模式来创建关系。我看到你已经为节点使用了批量创建。
确保您的批量大小大致在20k到50k之间,才能最有效。
否则你最终会遇到两个问题:
你应该通过对neo4j服务器发出kill -3(或jstack)来看到这些锁定的线程。
对这些关系创建进行批处理并按子图对它们进行分组,以便批次之间尽可能少的重叠应该会有很大的帮助。
与您的问题无关,但仍值得稍后调查。
不确定neocons在底层使用了什么,但你可能会更好地使用neo4j 2.0中的事务端点和密码。