Какой самый быстрый запрос друзей ArangoDB (с учетом)
Я пытаюсь использовать 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-10x).
Что я хотел бы знать ... Как я могу улучшить наш запрос, чтобы он работал лучше?