使用用户id进行分库分表,但是要求使用城市id统计用户怎么办?

提问者:帅平 问题分类:面试刷题
用户表规模有好几个亿,已经采用了分库分表的实施方案,目前使用用户id取模的方式进行的分库分表,但是现在有个需求要求根据城市来进行统计用户怎么办?
4 个回答
温柔刀下鬼
温柔刀下鬼
第四种方案是使用ShardingSphere或者MyCat等工具,自动解析sql分发到所有分表,查询结果后合并返回。此方案对代码侵入小,但是需要专业的运维。
发布于:3天前 IP属地:
酷的没边儿
酷的没边儿
第三种方案是使用基因分片法,淘宝就是使用这种防范,把城市id的hash值放在用户id的最后,例如用户id的后4位是城市hash值,这样同城市用户会集中在特定分表内,天然支持城市查询,但是这里有个弊端就是如果已经使用了用户id进行分表了,那么需要重构整个分表所有的id,同时后续增加其他需求的话,再按照此方式进行查询也会比较麻烦,因此这里需要一个对业务理解,产品功能决策相当强的架构师来主导。
发布于:3天前 IP属地:
孤居
孤居
第二种方案:利用空间换时间,建立一个城市id->用户id列表->分表的索引表。此方案在查询时先查索引表获取用户所在分表,再进行精准查询。
发布于:3天前 IP属地:
你以为我的心是不锈钢么
你以为我的心是不锈钢么
第一种方案直接使用union查找所有分表,再进行合并结果,此方案如果分表数量较多的话,查询性能非常差,只适合分表数量比较少的情况
发布于:3天前 IP属地:
我来回答