L****Y 发帖数: 355 | 1 How does a site like Facebook store "Likes" ?
怎么做? |
j*****y 发帖数: 1071 | 2 比如一张图片,给这个图片加个 like list ?
【在 L****Y 的大作中提到】 : How does a site like Facebook store "Likes" ? : 怎么做?
|
y****n 发帖数: 743 | 3 乱说一下:
Liked不属于重要信息,不需要非常时时更新。
Facebook有成千上万台在线server,这些server可以定时或者批量更新位于世界不同地
区的数据库,这些数据库在定期同步。
常规做法,在数据库建表Liked,包含两个字段UserId和PostId。
但是由于Liked对于facebook来说是海量数据,这种做法不适合查询。
我会这样实现:
在PostInfo表中添加一列LikedCount
这样,显示帖子时,直接可以显示Liked总数。
建表:
UserLikedPosts
{
TimeRange DateTime,
UserID INT,
PostID INT
}
这样,当用户想看谁Like过此帖,可以分时间段查询。
对于比较火热的帖子,可以通过cache优化速度。
当然还可以根据实际情况进一步优化,比如:cache最后like的三个人。 |
j*****y 发帖数: 1071 | 4 感觉 facebook上你点击一下 like还是能马上显示你like了的阿
【在 y****n 的大作中提到】 : 乱说一下: : Liked不属于重要信息,不需要非常时时更新。 : Facebook有成千上万台在线server,这些server可以定时或者批量更新位于世界不同地 : 区的数据库,这些数据库在定期同步。 : 常规做法,在数据库建表Liked,包含两个字段UserId和PostId。 : 但是由于Liked对于facebook来说是海量数据,这种做法不适合查询。 : 我会这样实现: : 在PostInfo表中添加一列LikedCount : 这样,显示帖子时,直接可以显示Liked总数。 : 建表:
|
y****n 发帖数: 743 | 5 那是显示给你看的,数据库未必同时更新,你在中国的朋友未必能看到你的like。
【在 j*****y 的大作中提到】 : 感觉 facebook上你点击一下 like还是能马上显示你like了的阿
|
y****n 发帖数: 743 | 6 你有没有发现,有的时候你和另外一个人几乎同时回一个帖子。
Facebook显示你的帖子在先,但是后来Refresh之后,你的帖子跑到后面了?
收到你的request的server当然知道你的最新状态,即使你比别人慢几秒钟。
【在 j*****y 的大作中提到】 : 感觉 facebook上你点击一下 like还是能马上显示你like了的阿
|
y*******g 发帖数: 6599 | 7 locale fake的 保证该session的用户体验
【在 j*****y 的大作中提到】 : 感觉 facebook上你点击一下 like还是能马上显示你like了的阿
|
y*******g 发帖数: 6599 | 8 这个都不一定是server做的,可能是client做的
【在 y****n 的大作中提到】 : 你有没有发现,有的时候你和另外一个人几乎同时回一个帖子。 : Facebook显示你的帖子在先,但是后来Refresh之后,你的帖子跑到后面了? : 收到你的request的server当然知道你的最新状态,即使你比别人慢几秒钟。
|
y****n 发帖数: 743 | 9 据我观察,应该还是server。
因为发帖之后我直接能看到发帖是否成功。
不过Facebook的确在Client做了很多鬼。
【在 y*******g 的大作中提到】 : 这个都不一定是server做的,可能是client做的
|
y*******g 发帖数: 6599 | 10 iPhone 上次我看的时候觉得是client做的,类似把like过的帖子id post到server,然
后server做一个merge,把format好的data发回来。
【在 y****n 的大作中提到】 : 据我观察,应该还是server。 : 因为发帖之后我直接能看到发帖是否成功。 : 不过Facebook的确在Client做了很多鬼。
|
s*****n 发帖数: 5488 | 11 in a key valude nosql doc db like mongodb, just stores likes a kind of
subdocument, since people will not query like on person. just like on a post.
in mysql, I would just use a table per person with schema (postid, userid,
time) to avoid performance issues caused by lock and update on b tree index
and enable migration user from different servers, simple sharding etc
【在 L****Y 的大作中提到】 : How does a site like Facebook store "Likes" ? : 怎么做?
|