7. 分表设计
7.1 逻辑方式分表
mysql数据库本身就有分表技术,该方式可以节省逻辑处理
7.2 物理方式分表
自己手动创建多个数据表出来,这个需要自己考虑分表算法,逻辑处理等
7.3 四种逻辑分表
具体为:key hash -------求余方式
range list --------范围方式
注意:分表字段必须是主键 或是 主键的一部分(复合主键)
1) partition by key (条件字段 ) partitions 10;
2) hash 分表
根据表达式/字段方式进行分表设计
partition by hash(表达式/字段)partitions 数量;(和上面Key方式一样)
3) range 分表
根据 字段/表达式 是否满足某个范围条件进行分表设计
partition by range(year(pubdate))(
partition hou70 values less than (1980), // 根据表里年份进行分表
partition hou80 values less than (1990),
)
4) list 分表
根据 表达式/字段 的内容值是否在某个‘列表’中进行分表设计
partition by list(month(pubdate))(
partition spring values in (3,4,5), // 根据表里月份进行分表
partition summer values in (6,7,8),
partition autumn values in (9,10,11),
partition winter values in (12,1,2)
)
8 分表管理
具体就是对已经存在的分表进行增加 ,减少才操作
增加分表,不会引起数据丢失
减少分表:在key/hash领域不会造成数据丢失,这个两个领域在进行减少分表的同时就把全部数据重新整合到存在的表中,key/hash两种分表与业务逻辑关联不紧密
8.1 增加分表
求余方式:key/hash
--> alter table 表名 add partition partitions 数量;
范围方式:range/list
--> alter table 表名 add partition(
partition 名称 values less than (常量) -------- range方式
partition 名称 values in(n,n,n)----------list方式
);
key增加分表
增加分表后
list增加分表
增加分表
8.2 删除分表
求余方式(key/hash)
---> alter table 表名 coalesce partition 数量;
删除分表不会造成数据丢失,每次删除分表数据都重新整合到存在的分表中
范围方式(range/list)
---> alter table 表名 drop partition 分区名称;
删除分表会造成数据丢失