Мне интересно, как именно информация о том, что пользователь с идентификатором x дружит с пользователями с идентификаторами z, y, w, хранится в очень крупномасштабном приложении, таком как Facebook.
Я думаю о нескольких возможностях
a) Иметь таблицу, которая отображает дружбу с идентификаторами людей, участвующих в качестве внешних ключей, как показано здесь:
Person | isFriendsWith
x ------------------- y
x ------------------ z
x------------------- w
Мне кажется, что он не будет хорошо масштабироваться вообще.
b) Есть поле в строке пользователякоторый хранит идентификаторы своих друзей в своего рода сериализованном формате, например в строке "# z # y # w".Я полагаю, что при правильном алгоритме синтаксический анализ и обновление этой строки будут простыми.
c) Создайте отдельную таблицу с друзьями каждого пользователя.Будет ли это слишком большой нагрузкой на сервер?
d) Что-то еще?
Итак, если кто-то знает, что делает Facebook, и может поделиться подробностями, это будет оценено, вот о чем вопрос,Кроме того, если кто-то может поделиться пониманием того, что то, что я перечислил здесь, не будет хорошо масштабироваться или возникнут другие проблемы с производительностью, мне будет интересно услышать это.
Спасибо