回答
平滑扩容指数据库在扩容过程中继续对外提供服务,保障可用性。MySQL 提供了多种方案如分区、水平拆分、主从复制、MGR 等。
一、分区扩容
针对某个表数据量暴增,表分区是一个方案。分区(Partitioning)是将大型表拆分成更小的部分,每个部分称为分区。分区可以存储在不同的磁盘上,从而实现存储扩展。
- 新建分区表,选择合适分区类型,如 RANGE、LIST、HASH、KEY。
CREATE TABLE t_employee (
id INT,
name VARCHAR(50) NOT NULL default '',
department VARCHAR(50),
hired_date DATE,
PRIMARY KEY (`id`)
) PARTITION BY RANGE (YEAR(hired_date)) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
如上,基于员工的雇佣日期,每10年创建一个分区。
- 添加新分区
ALTER TABLE t_employee ADD PARTITION (
PARTITION p4 VALUES LESS THAN (2020)
);
- 分区扩容特点
表分区后,每个分区独立存储和管理,能显著提升性能、管理方便;同时,会带来设计的复杂性(提前规划和管理分区方案)、程序的耦合性(应用需感知分区的存在,进而调整 SQL)
分区扩容通常适用于时间序列数据、历史数据归档、地理位置数据等。