2012-05-21 54 views
1

我有一個大的二分向有向圖數據集(〜2000萬個元素)。在目前的使用中,我運行的遍歷算法每次運行約有500,000個節點。這些算法可以工作,但歷史上運行的是從文本文件加載到內存的數據。用於高效大規模圖遍歷的數據庫

文本文件看起來很糟糕,所以我將數據作爲一個鄰接列表傳輸到mongoDB中,即。

{ _id: 1, children: [2, 3] } 
{ _id: 2, children: [4] } 
{ _id: 3, children: [5, 6, 7] } 

這有效,但我覺得模型效率低下,我正在做的事情。在僞代碼,對於廣度優先搜索查詢結構從_ ID開始:1會是什麼樣子:

children = getChildren(_id = 1) 
for child in children 
    grandchildren = getChildren(_id = child) 
    // etc., either recursively or as a nested loop 

我與數據庫中的問題是,有沒有邏輯連接節點。每個查詢都必須遍歷索引樹,如果我沒有弄錯的話,它是O(log N)。加載後文本文件的方法是O(1),因爲我可以使一些簡單的查找規則直接指向節點子節點。

TL; DR有沒有辦法在O(1)時間使用數據庫遍歷大型網絡?

回答

2

您可以嘗試使用Neo4J,一個NoSQL圖形數據庫。我沒有使用它,但它承諾高性能。

+0

這正是我需要的!謝謝(你的)信息。 – PattimusPrime

0

MongoDB不是一個多用途數據庫。您顯然有興趣使用專門的圖形數據庫。對於這樣的圖表和相關的搜索算法使用MongoDB是不行的。

+0

從你以前的帖子看,你好像**真的**不喜歡mongo。任何原因? – PattimusPrime