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