写点什么

数据库怎么分库分表?面试的时候这么说,加分!

作者:王中阳Go
  • 2024-05-27
    北京
  • 本文字数:870 字

    阅读完需:约 3 分钟

数据库怎么分库分表?面试的时候这么说,加分!

亮点

下面介绍的是循序渐进的思路,面试的时候建议说下技术演进方案的思考:下面提到这些都有考虑到,最终结合你们的场景和需求,选择了最后这种方式,表述清楚设计和思考的过程。

背景

粉丝提问:


对于分库分表这块,面试的时候可能要结合业务逻辑去举例子。


我在下面大致写了一下数据的特性,因为之前是写入 serverless 的数据库所以这块没有去做分库分表,所以想请教一下方案。

场景

比如有一个“设备执行记录表”,这个表数据的特点如下:


  1. 一天中存在早高峰和晚高峰(早上 8 点,晚上 7 点 —-对应起床和下班的时间)

  2. 整点和半点的时候存在极大值

  3. 数据是 insert 多,query 少

  4. 假设一天产生 100 万条数据,早晚高峰分别产生 20 万,15 万条数据

提问

如何设计分库分表?


目前所能想到的方法是按照时间区间去分,比如把一天拆分成 24 份。


我的思路是否可行?请问还有没有更好的思路?

解答

  1. 按照时间区间去分,比如把一天拆分成 24 份。”, 这个思路基本可行,我再给你一些其他进阶思路

  2. 也可以按照高峰时段来分库分表:比如将早高峰和晚高峰的数据分别存储在不同的数据库表中,非高峰时段的数据存储在不同的数据表中。这样就能避免低效的分库分表,比如按小时来分,后半夜基本数据很小,甚至没有,对吧。

  3. 还有另外一个思路:就是按数据量来分,定好规则,并且这个规则写在配置文件中,统一做管理,也方便灵活配置

  4. 例如将每天产生的数据量较大的时间段单独存储在一个数据库表中,而数据量较小的时间段可以合并存储在另一个数据库表中,以便更好地管理和查询数据。比如直接以 20 万条数据为分表依据,达到就创建新表。而不是严格的以 8 点~9 点一个表,晚上 7 点~8 点一个表,其他时间一个表。这种更合理,且可控。

  5. 上面这些也是循序渐进的思路,面试的时候也可以说下技术方案的思考:这些都有考虑到,最终结合你们的场景和需求,选择了最后这种方式,表述清楚设计和思考的过程。

交流讨论

也欢迎大家交流讨论,有没有更好的方案。

早日上岸!

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。


没准能让你能刷到自己意向公司的最新面试题呢。


感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:面试群。

发布于: 刚刚阅读数: 4
用户头像

王中阳Go

关注

靠敲代码在北京买房的程序员 2022-10-09 加入

【微信】wangzhongyang1993【公众号】程序员升职加薪之旅【成就】InfoQ专家博主👍掘金签约作者👍B站&掘金&CSDN&思否等全平台账号:王中阳Go

评论 (1 条评论)

发布
用户头像
面对面试官关于分库分表技术的提问,这里提供了多种思路和建议,助你清晰阐释技术演进方案。对于分库分表这块,面试的时候可能要结合业务逻辑去举例子。我在下面大致写了一下数据的特性,因为之前是
刚刚 · 北京
回复
没有更多了
数据库怎么分库分表?面试的时候这么说,加分!_golang_王中阳Go_InfoQ写作社区