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也不会这么慢。你对此做过任何分析吗?