2013-08-02 59 views
0

neo4j中transaction.finish()所需的所有時間都取決於?減少neo4j交易完成時間

我正在使用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字符的字符串。

回答

1

在tx.finish()中,更改被寫入邏輯日誌並被強制下載到磁盤。然後,這些更改將應用​​於數據庫存儲文件,而這些文件很可能不會強制將任何內容強制存儲到磁盤,而是更新這些文件的內存映射部分。除了現在和之後,邏輯日誌被輪換,並且數據庫存儲文件的所有更改也被強制爲磁盤。

關於你的大字符串屬性,我不期望即使15Mb幾乎一樣慢。你有沒有對它進行分析?