Mysql数据库-水平分库分表常见策略讲解

小D老师 1.4K 0

一、Mysql数据库水平分库分表常见策略介绍-range

  • 水平分库分表,根据什么规则进行?怎么划分?
  • 方案一:自增id,根据ID范围进行分表(左闭右开)
    • 规则案例
      • 1~1,000,000 是 table_1
      • 1,000,000 ~2,000,000 是 table_2
      • 2,000,000~3,000,000 是 table_3
      • ...更多
    • 优点
      • id是自增长,可以无限增长
      • 扩容不用迁移数据,容易理解和维护
    • 缺点
      • 大部分读和写都访会问新的数据,有IO瓶颈,整体资源利用率低
      • 数据倾斜严重,热点数据过于集中,部分节点有瓶颈
      • Mysql数据库-水平分库分表常见策略讲解插图

 

二、Mysql数据库水平分库分表常见策略介绍-range延伸

 

  • Range范围分库分表,有热点问题,所以这个没用?
    • 关于怎么选择分库分表策略问题,如果业务适合就行,没有万能策略!!!!
    • 基于方案一:自增id,根据ID范围进行分表延伸解决方案,你能想到多少种

 

  • 范围角度思考问题 (范围的话更多是水平分表)
    • 数字
      • 自增id范围
    • 时间
      • 年、月、日范围
      • 比如按照月份生成 库或表 pay_log_2022_01、pay_log_2022_02
    • 空间
      • 地理位置:省份、区域(华东、华北、华南)
      • 比如按照 省份 生成 库或表

    Mysql数据库-水平分库分表常见策略讲解插图2

  • 基于Range范围分库分表业务场景
    • 微博发送记录、微信消息记录、日志记录,id增长/时间分区都行
      • 水平分表为主,水平分库则容易造成资源的浪费
    • 网站签到等活动流水数据时间分区最好
      • 水平分表为主,水平分库则容易造成资源的浪费
    • 大区划分(一二线城市和五六线城市活跃度不一样,如果能避免热点问题,即可选择)
      • saas业务水平分库(华东、华南、华北等)

Mysql数据库-水平分库分表常见策略讲解插图4

三、Mysql数据库水平分库分表常见策略介绍-Hash取模

  • 方案二:hash取模(Hash分库分表是最普遍的方案)
    • 为啥不之间取模,如果取模的字段不是整数型要先hash,统一规则就行

    Mysql数据库-水平分库分表常见策略讲解插图6

  • 案例规则
    • 用户ID是整数型的,要分2库,每个库表数量4表,一共8张表
    • 用户ID取模后,值是0到7的要平均分配到每张表
    • userId id % 2 (库-取余) id /2 % 4 (表)
      1 1 0
      2 0 1
      3 1 1
      4 0 2
      5 1 2
      6 0 3
      7 1 3
      8 0 0
      9 1 0

     

    • 优点
      • 保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题,
    • 缺点
      • 扩容不是很方便,需要数据迁移

发表评论 取消回复
表情 图片 链接 代码

分享