Neo4j Cypher批量更新需要花费很长时间

Neo4j Cypher批量更新需要花费很长时间,neo4j,cypher,Neo4j,Cypher,我正在为我们的项目在公开的Twitter数据集上进行POC。我能够使用MichaelHunger的批处理插入器工具为其创建Neo4j数据库,而且速度相对较快(只需2小时53分钟即可完成)。总的来说,有 15203731个节点,具有2个属性(名称、url) 256147121个关系,1个财产 现在我创建了一个Cypher查询来更新Twitter数据库。我在CSV中的节点上添加了一个新属性(Age),在关系上添加了一个新属性(FollowedSince)。现在情况开始变得糟糕起来。用于更新关系的查询

我正在为我们的项目在公开的Twitter数据集上进行POC。我能够使用MichaelHunger的批处理插入器工具为其创建Neo4j数据库,而且速度相对较快(只需2小时53分钟即可完成)。总的来说,有 15203731个节点,具有2个属性(名称、url) 256147121个关系,1个财产

现在我创建了一个Cypher查询来更新Twitter数据库。我在CSV中的节点上添加了一个新属性(Age),在关系上添加了一个新属性(FollowedSince)。现在情况开始变得糟糕起来。用于更新关系的查询(请参见下文)将永远无法运行

USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM {csvfile} AS row FIELDTERMINATOR '\t'
MATCH (u1:USER {name:row.`name:string:user`}), (u2:USER {name:row.`name:string:user2`})
MERGE (u1)-[r:Follows]->(u2)
ON CREATE SET r.Property=row.Property, r.FollowedSince=row.FollowedSince
ON MATCH SET r.Property=row.Property, r.FollowedSince=row.FollowedSince;
我已经通过运行预创建了索引

CREATE INDEX ON :USER(name); 
我的neo4j财产:

allow_store_upgrade=true
dump_configuration=false
cache_type=none
use_memory_mapped_buffers=true
neostore.propertystore.db.index.keys.mapped_memory=260M
neostore.propertystore.db.index.mapped_memory=260M
neostore.nodestore.db.mapped_memory=768M
neostore.relationshipstore.db.mapped_memory=12G
neostore.propertystore.db.mapped_memory=2048M
neostore.propertystore.db.strings.mapped_memory=2048M
neostore.propertystore.db.arrays.mapped_memory=260M

node_auto_indexing=true
我想知道我应该做些什么来加速我的密码查询?在撰写本文时,已经过去了一个半小时,我的关系(10000747)仍未结束。早些时候完成的节点(15203731)计时为34分钟,我认为这太长了。(Batch Inserter实用程序仅在5分钟内处理了整个节点!)

我确实在一个小数据集上测试了我的查询,只是为了在处理更大的数据集之前先尝试一下,它确实起了作用

我的Neo4j生活在服务器级的机器上,所以这里硬件不是问题


有什么建议吗?谢谢。

我不知道这对你有什么帮助,但我相信你可以将创建集上的
和匹配集上的
组合成一个
集,因为它们都做相同的事情。我要试一试那台机器有多少内存?2) 你正在运行哪个操作系统?3) 您在
neo4j wrapper.conf
中的
initmemory
maxmemory
设置是什么?我的服务器有32 GB内存。initmemory和maxmemory在neo4j-wrapper.conf中被禁用。我刚刚接受了开箱即用的默认配置。我只是通过属性文件将我自己的配置传递给我的应用程序。忘记添加上面的内容,我的操作系统是Centos 6.6