2013-08-21 26 views
0

如何在寫入neo4j時提高性能。我目前在服務器上安裝了neo4j,目前我正在嵌入式運行它。我相信我的配置存儲基於配置內存我的圖形數據庫的所有內容,我在網上找到Neo4j在內存配置中,多線程和慢寫入

neostore.nodestore.db.mapped_memory=0 
neostore.relationship.db.mapped_memory=0 
neostore.propertystore.db.mapped_memory=0 
neostore.propertystore.db.strings.mapped_memory=0 
neostore.propertystore.db.arrays.mapped_memory=0 
neostore.propertystore.db.index.keys.mapped_memory=0 
neostore.propertystore.db.index.mapped_memory=0 

node_auto_indexing=true 

node_keys_indexable=type,id 

cache_type=strong 
use_memory_mapped_buffers=false 
node_cache_size=12G 
relationship_cache_size=12G 
node_cache_array_fraction=10 
relationship_cache_array_fraction=10 

請讓我知道這是不正確。我遇到的問題是,當我嘗試將信息保存到圖形數據庫時。看起來,這些時間與我們的MYSQL時間相比並不是很快(例如,添加250個項目需要約3秒,而在MYSQL中需要1秒)。我在網上閱讀時指出,如果您有多個索引可能會降低數據持久性方面的性能,那麼我現在正在處理這個問題,看看這是否是我的罪魁禍首。但是,我只是想確保在內存中運行圖形數據庫時,我的配置似乎是內聯的。

對此主題的第二個問題。好吧,如果我的配置是好的,我的數據庫確實在內存中,那麼是否有一種方法來優化持久數據,以防萬一這不是銀彈。如果我們針對執行此功能的測試運行了一個線程,則反對10個線程,它看起來像是執行時間冒出來的線程(線程1完成1s,線程2完成2s,線程3完成3s等)。是否有一些特殊的多線程配置,我不知道如何在多線程同時觸發時提高性能。

Neo4J version 
1.9.1-enterprise 

My Jvm configs are 
-Xms25G -Xmx25G -XX:+UseNUMA -XX:+UseSerialGC 

My Machine Specs: 
File system type ext3 

回答

0

您緩存參數無效。

node_cache_size=12G 
relationship_cache_size=12G 
node_cache_array_fraction=10 
relationship_cache_array_fraction=10 

這些只能與GCR緩存一起使用。設置緩存不會在啓動時將所有內容都放入內存中,您將不得不編寫代碼來爲您執行此操作。事情是這樣的:

GlobalGraphOperations ggo = GlobalGraphOperations.at(graphDatabaseFactory); 
for (Node n : ggo.getAllNodes()) { 
    for (String propertyKey : n.getPropertyKeys()) { 
     n.getProperty(propertyKey); 
    } 
    for (Relationship relationship : n.getRelationships()) { 
    } 
} 

小心與強大的緩存,如果你有很多節點/關係,最終你的緩存會變得很大,反對執行GC會造成長時間的停頓在您的系統。

我的建議是使用內存映射文件,因爲這是一個操作系統,將在堆空間之外。它不提供接近緩存的速度,但如果您必須從neo商店閱讀,它將提供加速。