我正在为我的图形结构运行一些可伸缩性测试(如下所示),并使用neo4j浏览器界面来创建和查询图形。运行以下命令适用于500,000个节点,大于2M的图形,不仅最大化CPU使用率,而且还失去与本地服务器的连接(假设它超时,因为它需要很长时间?)。
FOREACH (r IN range(1,50000000) | CREATE (:entity {id:r})-[:IN_ASSOCIATION]->(iassoc:association{id:r})<-[:IN_ASSOCIATION]-(:entity{id:r+50000000}), (iassoc)-[:IN_DOC]->(:doc{id:r}))
是否有更好的替代方法来生成和填充具有大量节点的neo4j?
答案 0 :(得分:2)
安装APOC procedures并尝试使用apoc.periodic.iterate
程序:
CALL apoc.periodic.iterate(
"WITH range(1, 50000000) AS rs UNWIND rs AS r RETURN r",
"CREATE (:entity {id:r})-[:IN_ASSOCIATION]->(iassoc:association{id:r})<-[:IN_ASSOCIATION]-(:entity{id:r+50000000}), (iassoc)-[:IN_DOC]->(:doc{id:r})",
{batchSize:10000, parallel:true})
关于此程序的文档说:
使用
apoc.periodic.iterate
,您提供2个语句,第一个外部 声明提供了要处理的值流。第二, 内部语句一次处理一个元素(...)。
因此,第一个语句返回r
从1到50000000.第二个语句接收r
作为参数并根据需要创建节点和关系。
注意:请记住根据您使用的Neo4j版本安装APOC程序。请查看version compatibility matrix.
注意(2):plugins文件夹需要位于数据库文件夹而不是安装文件夹中(除非手动更改配置文件以指向安装文件夹)。