2015-01-26 56 views
2

我試圖用ArangoDB構建一個大型的社交網絡圖。我已經獲得了數據 - 約有35k個頂點,邊緣約150k。ArangoDB圖maxDepth - 迭代次數過多

我意識到這是一個非常多的數據,所以我希望一次只繪製一個子集 - 可能是從起始點分離2或3度。

但我得到一個1909: too many iterations錯誤如果maxDepth大於1,即使我設置maxIterations非常低(比如1)

例如,這個查詢給了我太多的重複錯誤

GRAPH_TRAVERSAL('Friends', 'people/1342', 'outbound', {maxDepth: 2, maxIterations: 10})

如果我忽略maxIterations,則會得到相同的錯誤。

該圖在Web界面中成功繪製,所以我認爲問題不在於我的數據本身。我的圖中是否只有ArangoDB可以處理的數據?或者我做錯了什麼?

回答

3

maxIterations參數控制遍歷多少遍後自動中止。這種自動墮胎功能可以保護您在循環圖上運行遍歷時不受無限循環的影響。

maxIterations不控制遍歷深度,但在遍歷多少個頂點後,將停止並拋出錯誤。

下面是如何計算出最大值的示例: 遍歷將從指定的起始頂點開始。這是第一次迭代。對於起始頂點,將確定所有傳出(或傳入)連接。假設從起始頂點有五個連接要跟隨,所以下一輪遍歷將考慮它們。所以對於maxIterations至少需要6的值(1代表起始頂點加上5代表下一輪)。如果現在5個頂點中的每個頂點都有5個連接,則需要至少25次迭代,因此您需要一個maxIterations的值爲31.對於下一個級別,每個連接有5個連接,則需要125個以上的連接。

因此,對於每個級別,您不能簡單地爲maxIterations添加常數值。我們所看到的系列(1,6,31,156)顯然是非線性的。您需要清楚多少次迭代取決於底層數據以及頂點的連接方式。

如果你想實現的是遍歷深度限制到一定程度,就可以使用minDepthmaxDepth參數和設置maxIterations到一個很高的值(即有可能將永遠無法達到,因爲遍歷爲界通過maxDepth)。控制來自遍歷的數據量的更多選項是:directionany將產生大多數結果並且可以更容易地導致週期,儘可能使用inboundoutbound)和uniqueness(用於控制給定頂點或連接邊的多久被訪問)。

2

maxIterations是一個閾值,它將控制太多的計算週期。因此,圖形越大,邊緣/節點在遊戲中越多,則需要更多的計算週期(並且maxIterations參數應該越高)。

因此,請儘量順利增加maxDeth == 2的maxIterations等等。但不太順利,例如嘗試+ 1:=嘗試* 10 :-)

+0

我開始在100k,然後50k,然後10k,然後1000,100,1最大 - 我應該把它提高几個數量級? – 2015-01-26 20:12:04

+0

您可能需要更多,而不是更少的maxIterations。 – 2015-01-27 08:23:17