JoJ*_*oJo 5 mysql memcached scalability
你登陆了一个充满评论的页面.评论的投票系统以您的投票突出显示.

为了支持此要求,数据库模式至少如下:
页
评论
投票
如果页面ID为123且用户ID为456,则这将是控制器的简单实现:
1)查询用户456对第123页的评论所做的所有投票:
SELECT c.commentId, v.direction
FROM comments AS c, votes AS v
WHERE c.pageId = 123
AND c.commentId = v.commentId
AND v.userId = 456
Run Code Online (Sandbox Code Playgroud)
2)使用此查询的结果构造视图.
支持这种投票系统的数据库查询非常昂贵.评论和投票表将是巨大的.在高流量站点上,成千上万的用户将每秒执行此查询以接收评论投票的个性化视图.你如何扩展这个投票系统,以便数据库不会因过多的请求而过载?你会把它缓存在内存中吗?难道只是将大量观众共同的东西缓存到实践中是不是实际操作?在这种情况下,这些查询特定于单个用户.在拥有数百万用户的网站上,内存很快就会被填满.将发生缓存未命中并且数据库将被破坏.
我认为Reddit 会缓存/存储(对于每个评论)投票赞成的用户列表(以及另一个投票反对的用户列表),并且仅根据活动每 X 秒/分钟/小时更新此缓存。该列表将被组织为可以进行二分搜索。
然后,当生成页面时,服务器只需要检查当前用户 ID 是否在每个评论的向上/向下投票者的“列表中”。Reddit 还限制了最初可见的评论数量,这将减少所需的测试数量。
Reddit 也不会立即更新投票(他们将投票添加到队列中)。他们可以将队列的处理和投票的缓存结合在一起。
我认为 Reddit 还必须跟踪每个用户最近的投票,以便它们可以填补上次缓存更新和现在之间的空白。
这可能不是 100% 准确。
它基于对 Reddit 架构和我会做什么的有限阅读。
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |