articleList

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

2025/03/13 posted in  ShardingJDBC
Tags: 

  • 水平分库分表,根据什么规则进行?怎么划分?- 方案一:自增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瓶颈,整体资源利用率低
      • 数据倾斜严重,热点数据过于集中,部分节点有瓶颈
        image-20211122160956421
  • Range范围分库分表,有热点问题,所以这个没用?
    • 关于怎么选择分库分表策略问题,如果业务适合就行,没有万能策略!!!!
    • 基于方案一:自增id,根据ID范围进行分表延伸解决方案,你能想到多少种
  • 范围角度思考问题 (范围的话更多是水平分表)
    • 数字
      • 自增id范围
    • 时间
      • 年、月、日范围
      • 比如按照月份生成 库或表 pay_log_2022_01、pay_log_2022_02
    • 空间
      • 地理位置:省份、区域(华东、华北、华南)
      • 比如按照 省份 生成 库或表
        image-20211122155827117
  • 基于Range范围分库分表业务场景
    • 微博发送记录、微信消息记录、日志记录,id增长/时间分区都行
      • 水平分表为主,水平分库则容易造成资源的浪费
    • 网站签到等活动流水数据时间分区最好
      • 水平分表为主,水平分库则容易造成资源的浪费
    • 大区划分(一二线城市和五六线城市活跃度不一样,如果能避免热点问题,即可选择)
      • saas业务水平分库(华东、华南、华北等)
        image-20211122161424137