数据库怎么分库分表?面试的时候这么说,加分!
亮点
下面介绍的是循序渐进的思路,面试的时候建议说下技术演进方案的思考:下面提到这些都有考虑到,最终结合你们的场景和需求,选择了最后这种方式,表述清楚设计和思考的过程。
背景
粉丝提问:
对于分库分表这块,面试的时候可能要结合业务逻辑去举例子。
我在下面大致写了一下数据的特性,因为之前是写入 serverless 的数据库所以这块没有去做分库分表,所以想请教一下方案。
场景
比如有一个“设备执行记录表”,这个表数据的特点如下:
一天中存在早高峰和晚高峰(早上 8 点,晚上 7 点 —-对应起床和下班的时间)
整点和半点的时候存在极大值
数据是 insert 多,query 少
假设一天产生 100 万条数据,早晚高峰分别产生 20 万,15 万条数据
提问
如何设计分库分表?
目前所能想到的方法是按照时间区间去分,比如把一天拆分成 24 份。
我的思路是否可行?请问还有没有更好的思路?
解答
“按照时间区间去分,比如把一天拆分成 24 份。”, 这个思路基本可行,我再给你一些其他进阶思路。
也可以按照高峰时段来分库分表:比如将早高峰和晚高峰的数据分别存储在不同的数据库表中,非高峰时段的数据存储在不同的数据表中。这样就能避免低效的分库分表,比如按小时来分,后半夜基本数据很小,甚至没有,对吧。
还有另外一个思路:就是按数据量来分,定好规则,并且这个规则写在配置文件中,统一做管理,也方便灵活配置。
例如将每天产生的数据量较大的时间段单独存储在一个数据库表中,而数据量较小的时间段可以合并存储在另一个数据库表中,以便更好地管理和查询数据。比如直接以 20 万条数据为分表依据,达到就创建新表。而不是严格的以 8 点~9 点一个表,晚上 7 点~8 点一个表,其他时间一个表。这种更合理,且可控。
上面这些也是循序渐进的思路,面试的时候也可以说下技术方案的思考:这些都有考虑到,最终结合你们的场景和需求,选择了最后这种方式,表述清楚设计和思考的过程。
交流讨论
也欢迎大家交流讨论,有没有更好的方案。
早日上岸!
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:面试群。
版权声明: 本文为 InfoQ 作者【王中阳Go】的原创文章。
原文链接:【http://xie.infoq.cn/article/5a6e1f34e5ff2f4b9bd09a415】。文章转载请联系作者。
评论 (1 条评论)