一、Mysql数据库水平分库分表常见策略介绍-range
- 水平分库分表,根据什么规则进行?怎么划分?
- 方案一:自增id,根据ID范围进行分表(左闭右开)
二、Mysql数据库水平分库分表常见策略介绍-range延伸
- Range范围分库分表,有热点问题,所以这个没用?
- 关于怎么选择分库分表策略问题,如果业务适合就行,没有万能策略!!!!
- 基于方案一:自增id,根据ID范围进行分表延伸解决方案,你能想到多少种
- 范围角度思考问题 (范围的话更多是水平分表)
- 数字
- 自增id范围
- 时间
- 年、月、日范围
- 比如按照月份生成 库或表 pay_log_2022_01、pay_log_2022_02
- 空间
- 地理位置:省份、区域(华东、华北、华南)
- 比如按照 省份 生成 库或表
- 数字
- 基于Range范围分库分表业务场景
- 微博发送记录、微信消息记录、日志记录,id增长/时间分区都行
- 水平分表为主,水平分库则容易造成资源的浪费
- 网站签到等活动流水数据时间分区最好
- 水平分表为主,水平分库则容易造成资源的浪费
- 大区划分(一二线城市和五六线城市活跃度不一样,如果能避免热点问题,即可选择)
- saas业务水平分库(华东、华南、华北等)
- 微博发送记录、微信消息记录、日志记录,id增长/时间分区都行
三、Mysql数据库水平分库分表常见策略介绍-Hash取模
- 方案二:hash取模(Hash分库分表是最普遍的方案)
- 为啥不之间取模,如果取模的字段不是整数型要先hash,统一规则就行
- 案例规则
- 用户ID是整数型的,要分2库,每个库表数量4表,一共8张表
- 用户ID取模后,值是0到7的要平均分配到每张表
A库ID = userId % 库数量 2 表ID = userId / 库数量 2 % 表数量4
-
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
- 优点
- 保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题,
- 缺点
- 扩容不是很方便,需要数据迁移
本文作者为小D老师,转载请注明。