neo4j中transaction.finish()
所需的所有因素取决于?
我正在使用neo4j进行Facebook图形构建。每个Node
都包含一个包含以下内容的平均500个对象的列表:
4 Strings of max length 20 chars
1 doubles
1 long
1 Date
1 boolean
和Relationship
列出了平均20个此类对象。
大约有3,00,000个节点和相同的总关系顺序。
对于这样的节点,如果我更新大约300个节点,我发现它的更新大约需要50秒。和交易时间约10分钟。内存利用率约为2.5GB,处理器:双核2.93GHz。
此交易完成时间看起来太高。
我可以就如何缩短交易结束时间获得任何建议吗?
修改
我发现了一个如此重的节点,其所有属性组合在一起作为字符串给出了一串长度为15650993
个字符的字符串。
答案 0 :(得分:1)
在tx.finish()中,更改将写入逻辑日志并强制下载到磁盘。然后将更改应用于数据库存储文件,这些文件很可能不会强制将任何内容下载到磁盘,而是更新这些文件的内存映射部分。除了现在然后逻辑日志被轮换,并且对数据库存储文件的所有更改也被强制转换为磁盘。
关于你的大字符串属性,我不会指望即使15Mb也几乎那么慢。你有没有对它进行任何剖析?