大家是如何汇总分表数据的?
比如评论表,我们分成了 100 张表,按照 userid 哈希算法分,那么后台管理要显示评论列表,总不能联合查询 100 张表,这种情况大家是如何做的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如评论表,我们分成了 100 张表,按照 userid 哈希算法分,那么后台管理要显示评论列表,总不能联合查询 100 张表,这种情况大家是如何做的?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
我觉得还有一个方法,就是建一张评论总表,这张表的字段不必跟分表一致,最关键的是要评论 id,和创建时间,后台管理就可以读取这张总表,评论的详情字段去分表查询。
比如一页 50 条记录,最多 50 次另外的查询,分别去分表查询详情数据展现出来,虽然多一些查询,但是在后台管理系统用不会造成很大压力,
我提个曲线救国的方法,就别按userid分表了,怪累的,直接根据评论时间按月分表,我们的经验是Mysql的话每张表不超过2000万条数据就行,这样汇总起来就方便多了,后台管理唯一需要注意的就是pagination的问题。
就算是抛砖引玉了,希望能帮到你。
更新:flc1125提到了负载的问题,我顶多能想到加redis缓存,还想问问这个评论的主要查询业务是啥?是展示某个文章的最近评论?
首先你的表拆分法是对的。其次增加一个同步表。该表的数据保留最近X天的评论数据,数据来源,由其他100个表用联合组成;数据操作由定时或mq方式同步过去。该表仅用于后台使用(或并发量小的业务)
新建一张表,每隔一段时间更新这张表,比如页面一次加载三十条评论,那么就一次查出三十条数据,等到时候页面载入时从这里取。