加载neo4j DB w/Cypher的最快方法-如何集成新的子图?

加载neo4j DB w/Cypher的最快方法-如何集成新的子图?,neo4j,cypher,Neo4j,Cypher,我正在加载一个Neo4j数据库,使用直接导入Neo4j shell的Cypher命令。一些实验表明,大约1000行的子图批次可以提供最佳吞吐量(大约3.2ms/行,300行/秒(慢!),Neo4j 2.0.1)。我使用MATCH语句将现有节点绑定到加载子图。下面是一个简单的例子: begin ... MATCH (domain75ea8a4da9d65189999d895f536acfa5:SubDomain { shorturl: "threeboysandanoldlady.blogspot

我正在加载一个Neo4j数据库,使用直接导入Neo4j shell的Cypher命令。一些实验表明,大约1000行的子图批次可以提供最佳吞吐量(大约3.2ms/行,300行/秒(慢!),Neo4j 2.0.1)。我使用MATCH语句将现有节点绑定到加载子图。下面是一个简单的例子:

begin
...
MATCH (domain75ea8a4da9d65189999d895f536acfa5:SubDomain { shorturl: "threeboysandanoldlady.blogspot.com" })
MATCH (domainf47c8afacb0346a5d7c4b8b0e968bb74:SubDomain { shorturl: "myweeview.com" })
MATCH (domainf431704fab917205a54b2477d00a3511:SubDomain { shorturl: "www.computershopper.com" })
CREATE
(article1641203:Article { id: "1641203", url: "http://www.coolsocial.net/sites/www/blackhawknetwork.com.html", type: 4, timestamp: 1342549270, datetime: "2012-07-17 18:21:10"}),
(article1641203)-[:PUBLISHED_IN]->(domaina9b3ed6f4bc801731351b913dfc3f35a),(author104675)-[:WROTE]->(article1641203),
....
commit
使用这种(速度慢得离谱)的方法,加载200K个节点(约370K个关系)需要几个小时,此时,加载速度甚至更慢。我认为渐进的减速是由于匹配语句的开销造成的。当图到达200K个节点时,它们占子图load语句的1/2。必须有更好的方法来做这件事,它只是不能扩展

我将尝试用参数重写这些语句(参考文献:AND)。我希望这会有所帮助,但似乎我在建立子图连接时仍然会遇到问题。使用MERGE或CREATE UNIQUE而不是MATCH语句会是一种方法吗?必须有最佳实践方法来做到这一点,我错过了。还有其他加速的想法吗


非常感谢

使用MERGE,并进行较小的事务处理——我发现50-100批处理的结果最好(在进行索引查找时)。如果只创建不匹配项,则批量越大越好。另外,我建议使用驱动程序通过事务性API(带参数)而不是通过neo4j shell发送命令,这样会更快一些


或者(可能不适用于所有用例),保留您创建的节点ID的本地“索引”。对于仅200k项,这应该很容易适应字符串->长的普通映射/dict。这将防止您需要对数据库中的索引征税,并且您只能执行基于节点ID的查找和创建语句,然后再创建索引。

load2neo插件对我来说效果很好。安装速度快且无痛苦,它具有非常类似密码的命令结构,可以轻松支持唯一性要求。适用于neo4j 2.0标签

load2neo安装+curl使用示例:

load2neo Geoff语法:

它比通过neo4j shell使用Cypher快得多(>>10倍)


我无法通过neo4j shell获得Cypher中的参数,尽管我尝试了通过互联网搜索可以找到的一切

谢谢你的留言,但是链接现在返回404,你能修复它吗?谢谢