减少neo4j事务完成时间



neo4j中transaction.finish()所需的时间取决于哪些因素?

我正在使用neo4j来构建Facebook图形。每个Node具有一个类的平均500个对象的列表,该类包含:

4 Strings of max length 20 chars
1 doubles 
1 long
1 Date
1 boolean

并且CCD_ 3具有平均20个这样的对象的列表。

大约有300000个节点和相同顺序的总关系。

对于这样的节点,如果我更新大约300个节点,我发现它的更新大约需要50秒,事务时间大约需要10分钟。内存利用率大约是2.5GB,处理器:双核2.93GHz。

此事务完成时间看起来过高。

我能得到关于如何缩短交易完成时间的建议吗?

编辑:

我发现了一个如此沉重的Node,它的所有属性组合在一起作为字符串,给出了一个长度为15650993的字符串。

在tx.finish()中,更改被写入逻辑日志并强制下放到磁盘。然后,这些更改将应用于数据库存储文件,这很可能不会将任何内容强制放到磁盘上,有利于更新这些文件的内存映射部分。除了偶尔轮换逻辑日志,对数据库存储文件的所有更改也会强制到磁盘上。

关于你的大字符串属性,我预计即使是15Mb也不会这么慢。你对此做过任何分析吗?

最新更新