Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does facebook store the friends of a user?

I am wondering how exactly the information that a user with id x is friends with users with ids z,y,w is stored in a very large scale app like facebook.

I am thinking of several possibilities

a) Have a table which maps friendships with the ids of the people involved as foreign keys, as shown here:

Person|isFriendsWith

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

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

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

Which seems to me it wouldnt scale well at all.

b) Have a field in the users row that stores the ids of their friends in a kind of serialized format like a string "#z#y#w". I suppose with the right algorithm the parsing and updating of this string would be easy.

c) Have a separate table with the friends of each user. Would this be too much load on the server?

d) Something else?

So, if anybody knows what facebook does and can share details it will be appreciated, that's what the question is about. Also, if someone can share insight why what I listed here would not scale well or would have other problems performance-wise, I am interested in hearing it.

Thanks

like image 596
grasshopper Avatar asked Jul 15 '11 13:07

grasshopper


People also ask

How does Facebook list someone's friends?

The algorithm chooses interactions, activity, communication, photos, etc. This determines which friends will show up on top and have priority. The friends that you communicate with most often will usually be first on this list.

How does Facebook store friends list in database?

MySQL is the primary database used by Facebook for storing all the social data.

Can my friends on Facebook see who my other friends are?

You can only control who can see your friends list on your profile. Your friends also control who can see their friendships on their own profiles. For example, if you set your friends list to Only Me, only you'll be able to see your full friends list on your profile.


1 Answers

Here are some links. The first link's page has a link in it on the words "largely complex" that link to a flickr image of a schema. I cannot vouch for the correctness of any of the information in these links:

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/

The image I mentioned was created by analyzing the business entities in the API that Facebook has opened up. http://blogs.x2line.com/al/archive/2007/06/02/3124.aspx That was 2007, so may or may not be representative any longer.

like image 147
hatchet - done with SOverflow Avatar answered Oct 18 '22 16:10

hatchet - done with SOverflow