Как Facebook хранит друзей пользователя? - PullRequest
7 голосов
/ 15 июля 2011

Мне интересно, как именно информация о том, что пользователь с идентификатором x дружит с пользователями с идентификаторами z, y, w, хранится в очень крупномасштабном приложении, таком как Facebook.

Я думаю о нескольких возможностях

a) Иметь таблицу, которая отображает дружбу с идентификаторами людей, участвующих в качестве внешних ключей, как показано здесь:

Person | isFriendsWith

x ------------------- y

x ------------------ z

x------------------- w

Мне кажется, что он не будет хорошо масштабироваться вообще.

b) Есть поле в строке пользователякоторый хранит идентификаторы своих друзей в своего рода сериализованном формате, например в строке "# z # y # w".Я полагаю, что при правильном алгоритме синтаксический анализ и обновление этой строки будут простыми.

c) Создайте отдельную таблицу с друзьями каждого пользователя.Будет ли это слишком большой нагрузкой на сервер?

d) Что-то еще?

Итак, если кто-то знает, что делает Facebook, и может поделиться подробностями, это будет оценено, вот о чем вопрос,Кроме того, если кто-то может поделиться пониманием того, что то, что я перечислил здесь, не будет хорошо масштабироваться или возникнут другие проблемы с производительностью, мне будет интересно услышать это.

Спасибо

1 Ответ

2 голосов
/ 15 июля 2011

Вот несколько ссылок.Страница первой ссылки содержит ссылку на слова «в значительной степени сложный», которые ссылаются на изображение схемы flickr.Я не могу ручаться за правильность любой информации в этих ссылках:

http://www.makeuseof.com/tag/facebook-work-nuts-bolts-technology-explained/

http://www.theregister.co.uk/2011/07/13/mike_stonebraker_versus_facebook/

http://gigaom.com/cloud/facebook-trapped-in-mysql-fate-worse-than-death/

http://snarfed.org/facebook_data_store_api_thoughts/

Упомянутое мной изображение было создано путем анализа бизнес-объектов в API, который открыл Facebook.http://blogs.x2line.com/al/archive/2007/06/02/3124.aspx Это был 2007 год, поэтому он может быть или не быть репрезентативным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...