0

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字符。

4

1 回答 1

1

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

关于您的大字符串属性,我不希望 15Mb 会这么慢。你有没有对它进行任何分析?

于 2013-08-21T11:07:25.420 回答