一些背景信息:我有一个“问答”网站,有很多帖子和用户。数据存储在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