比如评论表,我们分成了 100 张表,按照 userid 哈希算法分,那么后台管理要显示评论列表,总不能联合查询 100 张表,这种情况大家是如何做的?
我提个曲线救国的方法,就别按userid分表了,怪累的,直接根据评论时间按月分表,我们的经验是Mysql的话每张表不超过2000万条数据就行,这样汇总起来就方便多了,后台管理唯一需要注意的就是pagination的问题。
就算是抛砖引玉了,希望能帮到你。
更新:flc1125提到了负载的问题,我顶多能想到加redis缓存,还想问问这个评论的主要查询业务是啥?是展示某个文章的最近评论?
首先你的表拆分法是对的。其次增加一个同步表。该表的数据保留最近X天的评论数据,数据来源,由其他100个表用联合组成;数据操作由定时或mq方式同步过去。该表仅用于后台使用(或并发量小的业务)
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
5 回答1.4k 阅读
我觉得还有一个方法,就是建一张评论总表,这张表的字段不必跟分表一致,最关键的是要评论 id,和创建时间,后台管理就可以读取这张总表,评论的详情字段去分表查询。
比如一页 50 条记录,最多 50 次另外的查询,分别去分表查询详情数据展现出来,虽然多一些查询,但是在后台管理系统用不会造成很大压力,