2013-02-25 47 views
1

考慮我將有以下幾件事在我的圖:對於給定類型的節點,關係和查詢,neo4j如何執行時間和空間複雜度?

100 Million nodes, More than 1 Billion connections/relationships 

Node properties: around 10 properties, mix of int, doubles, strings, HashMaps etc. 

Relationship properties: around 10 double values and 2-3 string (with avg 50 chars) values 

現在,假設我要更新所有的節點和關係的屬性值,由每個節點上詢問鄰居一次。即說,

step1: search a node, say X, with given Id, 
step2: get it's neighbours, 
step3: update node properties of X and all relationship properties between X and it's neighbors. 

對所有節點重複這三個步驟一次。 多少時間將它採取在所有節點的更新(約時間對我來說是好的,可能是秒/分鐘/小時)給出以下系統配置:

Two dual core processors, 3.0 GHz each, 4*4 GB memory, 250 GB Hard disk space. 

多少將需要近似的存儲空間爲上述數據?

請通過提供任何近似的樣本性能(時間和存儲)分析來幫助我。任何示例性能分析都將幫助我形象化我的需求。謝謝。

回答

4

對於節點/關係來說,大小考慮是相當容易的。每個節點爲9個字節,每個關係爲33個字節。

9B x 100M = 900 Million Bytes =~ 858.3 Megabytes for nodes 
33B x 1B = 33 Billion bytes =~ 30.7 Gigabytes for relationships 

至於計算,很難衡量這一點。 Neo4j緩存與磁盤上的內容不是1:1,因此您的存儲空間可能是〜31GB,但您需要更多的空間才能將其存儲在緩存中。儘管neo4j將信息存儲在磁盤上對於這種遍歷來說很有效,因爲它們將節點的所有關係和屬性存儲在鏈接列表中,因此通過迭代器訪問它們更有效,然後搜索一種類型的關係。

這將是很難給你一個估計,但我會說,因爲你正在經歷重複關係,什麼可以適應內存和磁盤等我猜猜會給幾個小時(< 6Hrs。)給出您的系統和尺寸要求。

+0

謝謝@Nicholas。關於你的答案的一個問題。無論你提到什麼大小,它是否包含索引?如果不是,索引(節點)會佔用多少內存?而且,它是否只能從節點上的查詢服務的位置開始索引?那麼,只有索引纔會被加載到緩存中? 我有以下系統: 來自雲(m1.medium)的3.5 GB雙核處理器機,具有大約400GB的硬盤空間..以及大約4GB的緩存.. 而最後一個,我不明白重複關係.. – 2013-02-26 04:33:07

+0

考慮到這個系統配置,估計一次更新所有關係和節點的時間估計有多少? – 2013-02-26 04:35:27

+0

我不認爲緩存被索引,但儘管如此,它仍然很快。不完全確定索引大小,但它通常是標稱的,它存儲它非常緊湊。再次,這很難估計,但幾個小時是最好的,我可以給你。你可以隨時加載並測試。 – Nicholas 2013-02-26 06:32:23