我通过BatchInserter将关系插入到Neo4j中(作为初始数据插入的一部分)。这个过程迅速减慢到每1小时1,000,000。剩下的数据(12,390,251个关系,600万个节点,7400万个属性)在不到一个小时的时间内完成。
我已经确定了罪魁祸首,因为RelationshipGroupStore一次只增加几个字节。虽然它以2megs的文件大小增加开始,但最终一次只减慢到几个字节。
我很好奇这是否与memory_mappnig有关,但是对于BatchInserter似乎没有关于RelationshipGroupStore的选项(也可能是内核的其余部分)。
我已尝试将以下内容放入配置中,但似乎没有效果
neostore.relationshipgroupstore.db.mapped_memory=2G
有什么想法吗?我不应该在BatchInserter中这样做(我的当前数据集有50万个关系,其他人有更多)。我也相信使用旧版本的Neo4j会更快。您可以想象,超过600万个节点的5000万个关系会创建大量高度连接的节点,Neo4j 2.1.X在查询速度方面处理得非常好。我现在只是想加快插入速度。
Neo4j 2.1.5 Java:各种版本,1.7,1.8 操作系统:Ubuntu,Mac OS X,CentOS
Neo4j配置:
neostore.propertystore.db.index.mapped_memory=1M
neostore.propertystore.db.strings.mapped_memory=1G
neostore.propertystore.db.index.keys.mapped_memory=1M
store_dir=data.db
dump_configuration=true
use_memory_mapped_buffers=true
neostore.propertystore.db.arrays.mapped_memory=512M
neostore.propertystore.db.mapped_memory=2G
neostore.relationshipstore.db.mapped_memory=2G
neostore.nodestore.db.mapped_memory=1G
JVM设置
"-Xms10G"
"-Xms10G"
"-XX:+UseConcMarkSweepGC"
"-XX:+UseBiasedLocking"
"-XX:+AggressiveOpts"
"-XX:+UseCompressedOops"
"-XX:+UseFastAccessorMethods"
"-XX:+DoEscapeAnalysis"
"-Xss4096k"
"-d64"
"-server"
以下是显示速度降低的日志:
2014-Oct-19 00:42:43 -0500 - 1000000 correlations recorded
2014-Oct-19 01:06:36 -0500 - 2000000 correlations recorded
2014-Oct-19 01:33:45 -0500 - 3000000 correlations recorded
2014-Oct-19 02:02:27 -0500 - 4000000 correlations recorded
2014-Oct-19 02:35:37 -0500 - 5000000 correlations recorded
2014-Oct-19 03:11:37 -0500 - 6000000 correlations recorded
2014-Oct-19 03:55:40 -0500 - 7000000 correlations recorded
2014-Oct-19 04:45:53 -0500 - 8000000 correlations recorded
2014-Oct-19 05:46:36 -0500 - 9000000 correlations recorded
2014-Oct-19 06:50:18 -0500 - 10000000 correlations recorded
2014-Oct-19 08:05:46 -0500 - 11000000 correlations recorded
然后我中止了它。我尝试在每1,000,000个关系之后强制GC,并通过给予20秒睡眠来“节流”,但似乎没有任何帮助。我已经移除了GC力量,但已经离开睡眠,虽然似乎没有多大帮助。
感谢任何帮助。 谢谢!