问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

新浪微博「点赞功能」数据库如何设计的

发布网友 发布时间:2023-04-30 12:32

我来回答

1个回答

热心网友 时间:2023-10-09 04:28

对于第一个问题,设计一个schema->(messageID,likedCount),记录每条微博的点赞数。messageID是微博的编号,likedCount是该微博的点赞人数。但是这里有两个问题需要解决,第一是并发,第二是数据量。

每条微博都有可能有很多人同时点赞,为了保证点赞人数精确就需要保证likedCount是原子操作,这个可以由应用程序来实现,也可以用redis的事务来实现(如果redis有事务机制或者自增功能的话),但是我觉得为了性能考虑,也可以不用实现原子操作,具体原因就不展开了。

每天都上亿可能更多的微博内容产生,这样就会有上亿个新的(messageID,likedCount)生成,这样的数据量是比较大的,单机数据库比较难提供高效的服务,所以需要采取sharding的功能(有时候也叫分表分库),可能根据messageID把这些schema分散到十个或者更多的shards上(据说,sina微博有600个节点,如何三个节点组成一个shard,就有200个shards),这样每个shard处理的请求就只有原来的十分之一,从而就能提高服务的性能。

关于点赞人列表的设计,一般来说,可能想到的schema是(messageID,userID),但是这样的设计有一个小问题,就是有些大发的微博可能会得到几十万的点赞,这样就会产生几十万个条数据,这样数据有点多,读取起来可能也慢。所以可以用这样一个schema(messageID,partID,userIDs),让一个messageID对于多个userID,同时比对应太多的userID,所以加入一个新的partID,一个part存1000个userID,这样几十万个点赞,只需要存几百条数据。这样做还有一个好处,用户点击查看点赞人时的,一般都不是完全显示所有点赞人,而是一批一批显示,这样可以一次只读一条数据,就可显示一批点赞用户信息。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
净水鱼有哪些 全民k歌歌曲转发到哪了 PC端和移动端在传播上有什么的区别?它们各自的优势是什么? PC端产品跟移动端产品的区别在哪? 我现在很瘦是什么原我很瘦? 服装厂有哪些岗位职称 电视会员怎么取消? 存货舞弊应对 存货舞弊手段 审计论文选题50篇分享 惠民贷循环使用上征信几次 免费取店名生意红火 劳务个体户名字大全(200个) vivo NEX3好还是荣耀80pro好? 有界函数到底什么意思啊为什么y1x在1到正无穷上是有界函数 函数有界性的M 中国人保车险? 梦见买炒面 梦见吃炒面的预兆 梦见炒炒面的预兆 梦见自己又凭空多出一个孩子的预兆 图书和小说是一回事吗? 苹果7plus丢了怎么办 梦幻西游五开副本选择 韩语老婆我爱你怎么说 媳妇我爱你词语 帮我翻译下这句话:媳妇,我爱你!我会用一生守护你!(翻译为韩语)拜托了各位 谢谢 梦见金龙鱼张口要吃的的预兆 梦见宝宝张嘴要吃 男生说张嘴是什么意思 特别讨厌那种张嘴就从别人要东西的人,怎么办,是我的问题还是别人的问题 梦幻西游手游秘境降妖副本双线通关攻略 梦幻西游手游秘境降妖18关副本攻略 梦幻西游手游秘境降妖百瞳王怎么打 梦幻西游手游秘境降妖12关龙女守将通关攻略 梦幻西游手游秘境降妖龙王怎么打 漫步者用酷狗什么音效好 草菇的意思草菇的意思是什么 梦见小草菇的预兆 梦见矮小草菇的预兆 梦见美丽草菇的预兆 上海装修监理公司有没好的推荐? 给说说这个有说下上海选择哪家装修监理公司好? 在上海装修监理哪家服务好? 梦见买裤子六块钱 梦到买裤子是什么意思(梦到买裤子是什么意思周公解梦) 自制云朵手帐胶带教程 什么投资与效益挂钩 【投资决策、风险管理与投资效益的浅析】 风险管理 投资决策 相统一 金灶K7旋转头如何拆卸 贫困户务工补贴申请表