·
Across the Great Wall, we can reach every corner in the world.

点赞系统其实很复杂,看起来很简单的一个按钮,要显示 A 是否对 B 内容点了赞,需要检查 A 是否在 B 的点赞用户列表 L 中,是一个集合存在性计算的数学问题。

  1. 如果点赞数量较少,比如普遍在 1000 以内,可以用数据库的索引机制实现这个计算,黑客说也是这样做的,登录用户每个请求都带上 sessionId,getPostById 检查是否点赞,标记到 liked 字段中,getCommentsByPost 批量获取评论时通过数据库的 id 交集计算(in 操作符)实现批查询,避免 n+1 问题。
  2. 如果点赞数量分布很广,比如微博、twitter 几十万的赞(L 集合很大),这种系统设计难度就很高了,常用的办法是对普通人使用第一个机制,对大V、明星等使用另外一套缓存系统,避免查数据库,有时候甚至会用上 CPU 的 L1/L2/L3 缓存机制,专门定制 CPU。

第二种系统本质还是利用缓存加速,L集合存在性计算还是少不了,你可以看 DDIA 这本书,常见的分布式问题都有讲到。

Replies
3

想不到站长也在看这本书,实在太经典了。

典中典,必看

感谢站长的回复,最近我也在看《设计数据密集型应用》