当前位置: 首页 > news >正文

掌握MySQL分库分表(三)水平分库分表常见策略range、hash

文章目录

  • range策略
  • Range策略延伸
    • 基于Range范围分库分表业务场景
  • hash取模
    • 案例规则

水平分库分表,根据什么规则进行划分?

range策略

自增id,根据ID范围进行分表(左闭右开)

规则案例:

  1. 1~1,000,000 是 table_1
  2. 1,000,000 ~2,000,000 是 table_2
  3. 2,000,000~3,000,000 是 table_3
    … …省略

优点

  1. id是自增长,可以无限增长
  2. 扩容不用迁移数据
  3. 容易理解和维护

缺点

  1. 大部分读和写都访会问新的数据,有IO瓶颈,整体资源利用率低
  2. 数据倾斜严重,热点数据过于集中,部分节点有瓶颈

Range策略延伸

范围角度思考
数字:
1.自增id范围

时间:
1.年、月、日范围
2.比如按照⽉份⽣成 库或表 pay_log_2022_01、pay_log_2022_02

空间:
1.地理位置:省份、区域(华东、华北、华南)
2.比如按照 省份生成库或表

基于Range范围分库分表业务场景

  1. 微博发送记录、微信消息记录、⽇志记录,id增长/时间分区 都行
    水平分表为主,水平分库则容易造成资源的浪费

  2. 网站签到等活动流水数据时间分区最好
    水平分表为主,水平分库则容易造成资源的浪费大区划分(⼀⼆线城市和五六线城市活跃度不⼀样,如果能避免热点问题,即可选择)

  3. saas业务水平分库(华东、华南、华北等)

hash取模

Hash分库分表是最普遍的方案

案例规则

用户ID是整数型的,要分2库,每个库表数量4表,⼀共8张表
用户ID取模后,值是0到7的要平均分配到每张表

库ID = userId % 库数量(2)
表ID = userId / 库数量(2) % 表数量(4)

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

http://www.lryc.cn/news/14396.html

相关文章:

  • CTFer成长之路之CTF中的SQL注入
  • python snap7读写PLC
  • 使用物联网进行智能能源管理的10大优势
  • 工业4.0和工业物联网如何协同工作
  • Python机器学习入门笔记(3)—— 线性回归
  • Java:顶级Java应用程序服务器 — Tomcat、Jetty、GlassFish、WildFly
  • 如何在SpringBoot项目上让接口返回数据脱敏,一个注解即可
  • python 之 海龟绘图(turtle)
  • RT-Thread SPI使用教程
  • shiro使用——整合spring
  • 2023-02-20 leetcode-AccountsMerge
  • 中国高速公路行业市场规模及未来发展趋势
  • 佳能iC MF645CX彩色激光多功能打印机报E302-0001故障码检修
  • 加密越来越简单——用JavaScript实现数据加密和解密
  • 线程池的使用场景
  • 图像分割算法
  • 《mysql技术内幕:innodb存储引擎》笔记
  • windows与linux系统ntp服务器配置
  • html常用font-family设置字体样式
  • 数据库事务AICD以及隔离级别
  • (4)VScode之ssh基础配置
  • springcloud-1环境搭建、service provider
  • 光谱仪工作过程及重要参数定义
  • W800|iot|HLK-W800-KIT-PRO|AliOS|阿里云| |官方demo|学习(1):板载AliOS系统快速上手
  • 字节终面,一道Linux题难住我了
  • 三、NetworkX工具包实战2——可视化【CS224W】(Datawhale组队学习)
  • 【MySQL】MySQL 架构
  • Python日期时间模块
  • 学以致用——植物信息录入1.0(selenium+pandas+os+tkinter)
  • 什么是压敏电阻