我正在尝试使用 ArangoDB 来获取朋友的朋友列表。不仅仅是一个基本的朋友列表,我还想知道用户和朋友的朋友有多少朋友,并对结果进行排序。在多次尝试(重新)编写性能最佳的 AQL 查询之后,我最终得到了以下结果:
LET friends = (
FOR f IN GRAPH_NEIGHBORS('graph', @user, {"direction": "any", "includeData": true, "edgeExamples": { name: "FRIENDS_WITH"}})
RETURN f._id
)
LET foafs = (FOR friend IN friends
FOR foaf in GRAPH_NEIGHBORS('graph', friend, {"direction": "any", "includeData": true, "edgeExamples": { name: "FRIENDS_WITH"}})
FILTER foaf._id != @user AND foaf._id NOT IN friends
COLLECT foaf_result = foaf WITH COUNT INTO common_friend_count
RETURN {
user: foaf_result,
common_friend_count: common_friend_count
}
)
FOR foaf IN foafs
SORT foaf.common_friend_count DESC
RETURN foaf
不幸的是,性能并不如我所愿。与相同查询(和数据)的 Neo4j 版本相比,AQL 似乎慢了很多(5-10 倍)。
我想知道的是......我怎样才能改进我们的查询以使其表现更好?