一些背景信息:我有一個「問答」網站,有很多帖子和用戶。數據存儲在MSSQL數據庫中。我很感興趣的是圖形數據庫如何幫助用戶產生有趣的結果,比如建議類似的用戶或者建議相關的帖子。ArangoDB:GRAPH_NEIGHBORS產生錯誤「[1909]迭代太多」
我設法進口的所有帖子和用戶(僅適用於它們的ID)和「後張貼」和「後向用戶」關係,從一個測試數據庫到ArangoDB數據庫,並結束了4個集:
- 帖子:文檔集,9833項
- 用戶:文件集,1264項
- parentToChildPosts:邊收集存儲從父後關係到一個孩子後,4978項
- postToUsers:邊收集從郵件存儲關係給它的主人你ser,9833條目。
然後,我用2條邊建立了一個圖形「postGraph」,並創建了一個基於「用戶帖子」和「帖子後」關係實現簡單的「類似用戶」算法的AQL查詢。下面是該查詢搜索前10名類似的用戶來進行用戶與_id「用戶/ 1」:
FOR e in GRAPH_NEIGHBORS('postGraph', 'users/1',
{ edgeCollectionRestriction: ['parentToChildPosts', 'postToUsers'],
vertexCollectionRestriction: 'users',
minDepth: 3,
maxDepth: 3 })
FILTER e.vertex._key != '1'
COLLECT userid = e.vertex._key INTO g
SORT LENGTH(g) DESC
LIMIT 10
RETURN userid
在視覺上,我開始從一個用戶的用戶/ 1的搜索,並找到路徑給其他用戶如下:
user => post => parent/child post => user。
所以遍歷的深度爲3。然後我排除用戶本人(FILTER),組由用戶密鑰和計算結果的數量和搶前10
我測試查詢和它的工作了大多數用戶,但未能對一些活躍用戶提供了錯誤:
[1909年]太多的迭代
查詢運行(在一秒鐘內)相當快,並給出了錯誤。其中一個失敗的活躍用戶有727個帖子(在我看來沒有那麼多)。
我也嘗試過其他2種方式來實現該算法:
- 寫3個GRAPH_NEIGHBORS查詢模仿3個步驟之一穿越:慢得多。第一次運行需要大約3秒。
- 使用連接(不使用任何圖功能):相當快。
從文檔中,ArangoDB建議使用圖形函數來處理這種情況。所以我不贊成使用Join(給我一種感覺,我也可以在SQL中做到這一點,所以爲什麼要使用圖形數據庫)。
任何建議如何使GRAPH_NEIGHBORS快速工作沒有任何錯誤?或者其他任何建議如何建立圖表,如圖表可以增長多大?
嗨!非常感謝您的回覆。我在GRAPH_NEIGHBORS下看不到「maxIterations」選項。我實際上搜索過它,只在「GRAPH_TRAVERSAL」選項下找到它。該文件不是最新的:)?我也只是嘗試了你的建議,但它仍然產生了錯誤。我嘗試了不同的maxIterations數字(甚至只是10),但它仍然產生相同的錯誤。 – ydou 2014-11-14 20:03:01
好吧,我會檢查是否有錯誤 – mchacki 2014-11-14 20:40:36
maxIterations選項存在問題,它既沒有記錄也沒有通過。我將在下一個版本中解決這個問題(2.3.1) – florian 2014-11-18 08:30:29