场景:
基础知识积累与查询
目的:
从应用角度:基础知识积累,便于后续查询,由于互联网产品更新迭代非常快,记录的知识可能只适合当下一段时间,
所以,应当查询官网www.aliyun.com最新最权威文档.
从开发角度:目前本人水准并不能真正理解分库分表具体实现细节,记录此方便后续理解.
1.概念
RDS 关系型数据库服务(elational Database Service).
DRDS 分布式关系型数据库服务(Distributed Relational Database Service).
DRDS是一款基于MySQL存储、采用分库分表技术进行水平扩展的分布式OLTP数据库服务产品,支持 RDS for MySQL以及POLARDB for MySQL,
产品目标旨在提升数据存储容量、并发吞吐、复杂计算效率三个方面的扩展性需求.
2.从应用角度理解
drds是管理RDS关系型数据库服务的中间件,本例中场景就是drds管理底层多个rds即底层的mysql数据库,实现海量数据场景下,分库,分表等功能.
3.本例场景:
用户操作drds,操作的sql和mysql语法兼容,即几乎都是mysql语句在操作drds,drds后台管理10个rds即10个分库,或者说10个独立的mysql数据库.
本例分库使用region_no作为分库字段,使用data_date作为分表字段.
调用:应用编写mysql语法的sql操作drds,drds根据自身策略(包括分库分表技术),将sql落实到具体底层mysql数据库,并组装返回用户需要结果,
对用户而言,逻辑上就像只操作了一个普通mysql数据库.
4.单库表
建表后,表只落在一个指定的单库上.
CREATE TABLE `D_LOG_INFO` (
`task_id` BIGINT (16) NOT NULL COMMENT '任务标识',
`begin_time` DATETIME DEFAULT NULL COMMENT '记录任务开始时间',
`end_time` DATETIME DEFAULT NULL COMMENT '记录任务结束时间',
`flag` VARCHAR (16) COLLATE utf8_bin DEFAULT NULL COMMENT '执行标志 0:失败、1:成功',
`fail_info` VARCHAR (512) COLLATE utf8_bin DEFAULT NULL COMMENT '记录任务失败信息',
`data_count` BIGINT (16) COMMENT '记录数据条数',
`table_name` VARCHAR (128) COLLATE utf8_bin DEFAULT NULL COMMENT '本次任务操作表名',
PRIMARY KEY (task_id)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '任务日志信息';
5.全局表(广播表)
建表后,表会落盘到每个分库上,每个分库上数据是相同的,此适合小表,比如配置信息或者标准代码.
CREATE TABLE `D_STANDARD_CODE` (
`id` VARCHAR (32) COLLATE utf8_bin NOT NULL COMMENT 'id',
`code_value` VARCHAR (64) COLLATE utf8_bin NOT NULL COMMENT '标准代码值',
`code_name` VARCHAR (256) COLLATE utf8_bin NOT NULL COMMENT '标准代码名称',
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '系统标准代码表' broadcast;
6.分库表
建表后,每个分库上会有一个表,分库上表数据是独立的.
CREATE TABLE `SENSOR_COLLECT_DATA` (
`sensor_id` BIGINT (16) NOT NULL '数据id实体唯一标识',
`data_date` DATE NOT NULL COMMENT COMMENT '数据日期',
`data_type` VARCHAR (8) COLLATE utf8_bin NOT NULL COMMENT '数据类型(1:温度、2:湿度)',
`region_no` VARCHAR (32) COLLATE utf8_bin COMMENT '传感器安装区域',
`s1` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值1',
`s2` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值2',
`s3` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值3',
`s4` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值4',
`s5` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值5',
`s6` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值6',
`s7` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值7',
`s8` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值8',
`s9` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值9',
`s10` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值10',
`s11` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值11',
`s12` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值12',
PRIMARY KEY (`sensor_id`,`DATA_DATE`,`DATA_TYPE`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '传感器采集数据' dbpartition BY HASH (`region_no`);
7.分库分表
建表后,根据指定分库字段进行分库,根据指定分表字段进行分表.
CREATE TABLE `SENSOR_COLLECT_DATA` (
`sensor_id` BIGINT (16) NOT NULL '数据id实体唯一标识',
`data_date` DATE NOT NULL COMMENT COMMENT '数据日期',
`data_type` VARCHAR (8) COLLATE utf8_bin NOT NULL COMMENT '数据类型(1:温度、2:湿度)',
`region_no` VARCHAR (32) COLLATE utf8_bin COMMENT '传感器安装区域',
`s1` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值1',
`s2` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值2',
`s3` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值3',
`s4` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值4',
`s5` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值5',
`s6` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值6',
`s7` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值7',
`s8` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值8',
`s9` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值9',
`s10` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值10',
`s11` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值11',
`s12` DECIMAL (12, 5) DEFAULT NULL COMMENT '传感器采集的值12',
PRIMARY KEY (`sensor_id`,`DATA_DATE`,`DATA_TYPE`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '传感器采集数据' dbpartition BY HASH (`region_no`) tbpartition BY MMDD(`data_date`) tbpartitions 365;
以上,感谢.