Ходьба по ссылкам с Riak - поиск «общих друзей» - PullRequest
2 голосов
/ 16 сентября 2011

Может ли кто-нибудь из знакомых с Риаком объяснить, как сделать переход по ссылкам, чтобы найти общих друзей среди двух человек (например, как общие друзья Facebook)? Кроме того, вычислительные требования в идеале должны быть минимальными, т.е. сервер не должен проходить большую длину, делать вычисления.

Я думаю о том, чтобы поместить всех «людей» в «люди», и у каждого «человека» будет ссылка на друзей (это похоже на отношения один-ко-многим), тогда для каждого «человека» перевернутые отношения связаны с другим человеком (это как отношения один-к-одному). Я думаю, что это можно сделать эффективно, и расчет / результат будут доступны мгновенно, но просто не могу понять.

(Хорошо, я точно не начал реальное кодирование с Riak, поэтому было бы полезно получить более подробное объяснение возможности Riak по переходу по ссылкам.)

Спасибо!

1 Ответ

0 голосов
/ 19 апреля 2012

Я вижу два возможных решения:

  1. Работа MapReduce примерно с таким сценарием:
    • Два входа для сравнения людей А и В
    • Фаза ссылки, извлекающая идентификаторы своих друзей
    • Сопоставить их с кортежами {FriendID, 1}
    • Уменьшить сумму 1с
    • Уменьшить фильтр, где сумма = 2
    • %% Последние несколько шагов могут быть объединены в один при необходимости
  2. Просто выполните запрос перехода по ссылке для каждого человека и пересекайте возвращенные множества на клиенте - немного уродливо, но работает.
...