DRDS 产品简介
DRDS 是一款基于 MySQL 存储、采用分库分表技术进行水平扩展的分布式 OLTP 数据库服务产品,支持 RDS for MySQL 以及 POLARDB for MySQL,产品目标旨在提升数据存储容量、并发吞吐、复杂计算效率三个方面的扩展性需求。
DRDS 核心能力采用标准关系型数据库技术实现,构建与公共云,配合完善的管控运维及产品化能力,使其具备稳定可靠、高度可扩展、持续可运维、类传统单机 MySQL 数据库体验的特点。
DRDS 通过分库分表管理多个 RDS for MySQL ,可线性提升数据存储容量及并发吞吐,有效解决单机数据库的扩展性难题。
DRDS 提供多种只读实例,可抵御超高并发的访问压力、加速复杂查询的响应时间。通过物理资源隔离的方式,缓解 DRDS 主实例的压力负载,降低业务架构的链路复杂度,无需进行额外的数据同步,节省运维及预算成本。
DRDS 产品特点
稳定
对于绝大部分应用而言,关系型数据库所承担的职责是整个数据管理系统中为核心基础的,不光直接影响到终端用户的服务体验,同时也是业务数据的后一道保险,所以稳定性是数据库为核心的选型因素。
DRDS 的稳定性建立在对久经考验的 MySQL 合理使用的基础上,单机 MySQL 在高并发、大量数据存储和复杂计算场景下,呈现出相对弱势的状态。
DRDS 将数据拆分到多个 RDS MySQL,使每个 RDS MySQL 承担合适的并发、数据存储和计算负载,各个 RDS MySQL 处于稳定状态,DRDS 层面处理分布式逻辑,终得到一个具有稳定可靠、高度扩展性的分布式关系型数据库系统。
相比于全自研分布式 NewSQL 数据库,DRDS 产品始终以持续稳定性和可运维性作为要务,同时通过标准数据库技术弥补与单机数据库的体验差异,让用户便捷、快速地上手使用,充分发挥产品的业务价值。
高度可扩展
相比传统单机关系型数据库,DRDS 采用分层架构可确保在并发、计算、数据存储三个方面均可线性扩展,通过增加 DRDS 节点 和 RDS for MySQL 实例达到水平扩展效果。
相比基于分布式存储的新型 cloud native 数据库,理论上 DRDS 的扩展性没有上限,打消业务在快速发展的过程中针对数据库扩展性产生的后顾之忧与运维压力。
持续可运维
关系型数据库对于绝大部分应用而言需要 7 * 24 小时稳定工作,持续可运维是数据库的核心关键能力。
DRDS 在公共云和专有云持续深耕多年,提供丰富的产品化能力及完备的运维体系,通过完整的 OpenAPI 可让业务自行定时与集成。
- 生命周期管理
- 实例创建、重启、释放
- 数据库创建、删除
- 数据白屏化操作
- 容量管理
- 水平拆分、垂直拆分
- 读写分离
- 分析型只读实例
- 并发型只读实例
- 弹性变配
- 平滑扩容、热点扩容
- 拆分变更
- 安全与审计
- VPC
- IP 白名单
- 账号与权限管理
- SQL 审计与分析
- 容灾管理
- 一体化备份恢复(快速&一致性)
- SQL 闪回
- 表回收站
- 多可用区实例容灾部署
- 监控告警
- 自有分层监控
- 云监控接入与关键指标报警管理
- 数据生态
- DTS 数据迁移、同步、订阅
- 数据集成
- DMS 数据管理
- QuickBi 集成
- 搜索OpenSearch、Elasticsearch
- 大数据计算与数据仓库
标准类关系型数据库能力
传统关系型数据库具备良好的用户认知和使用习惯,DRDS 采用标准关系型数据库技术实现,在提供分布式扩展能力的基础之上,大幅兼容单机 MySQL 使用体验。
通过 RDS for MySQL 提供稳定的存储支持,DRDS 内核专注于分布式 SQL 层,整个分布式 SQL 层如同大部分单机关系型数据库,分为网络和协议层、SQL 解析层、优化层和执行层。其中优化层包含逻辑优化和物理优化,执行层包含单机两阶段执行、单机并行执行( Parallel Query )和多机并行执行( DAG ),采用多种传统单机数据库优化和执行技术。
与单机数据库不同的是,DRDS 将数据拆分逻辑加入到了 SQL 优化和执行过程中,与其他分布式数据库不同的是,在面向 OLTP 场景时,DRDS 着重关注因分布式而带来的代价,提供了包括自定义数据拆分、算子 move-arround 和 pushdown、join 和 aggregation 的 co-located 优化和计算、分布式事务的处理和优化、分布式全局二级索引、面对远超单机数据容量的外置 DAG 计算等技术。
适用场景
按应用类型选择
DRDS 非常适用于面向拥有超高并发,大规模数据存储的互联网在线事务类业务。同时针对传统的企业级应用,因数据不断扩充,急需更强计算能力的在线事务型数据库,DRDS 近两年在复杂 SQL 优化、并行计算、分布式事务等方面取得重大进展,可以有效满足此类诉求。
按容量选择
OLTP 业务领域,数据库的容量通常关注并发度、数据存储、复杂 SQL 响应时间 3 个维度。当前数据库中任意一个维度出现瓶颈,或出于对业务不断高速发展提前规划数据库选型的考虑,当下选用 DRDS 构建分布式数据库,可有效降低后期数据库的扩展及运维压力。
对于业务发展初期,选择单机数据库还是分布式数据库,需要考量很多因素。但从数据库自身角度出发,业务使用的 SQL 语句、数据类型、事务、索引、其他功能均是确定的。对于大部分业务而言,只要 SQL 语法、数据类型、事务、索引支持较为完整,且具备有效手段可在各种极端场景下进行水平扩展,那么对于高速发展的业务而言,即是所有分布式数据库中具生命力及延续性的方案。
按成本选择
业务对于数据库选型的成本考量,可分为 3 个部分: 1. 业务开发上手门槛 2.长期的稳定性及性能表现 3.服务持有成本
- 业务开发上手难度过高,往往会导致项目延期,业务效果不尽人意。对于一个新型数据库而言,如何有效兼容现有流行数据库的使用习惯、功能支持完整度至关重要。DRDS 兼容 MySQL 生态,对于主流的客户端、驱动有着良好的兼容性,SQL 语法兼容完善,业务可快速进行对接适配。
- 数据库长期持久的稳定性及优异的性能表现对于业务而言至关重要,因 DRDS 将数据、负载分担至多个 RDS MySQL 实例 中,所以面对逐步增大的负载压力,DRDS 相比大规格单机数据库具备更强的稳定性。性能表现层面,因为天然支持分布式,抵御业务的超高并发是其强项,配合单机并行计算、多机 DAG 计算,DRDS 能够覆盖绝大多数在线业务的复杂计算需求。
- 服务持有成本方面,按相同负载对比其他数据库方案, DRDS 使用相对低配 RDS ,展现出的成本曲线随着 RDS 实例数量上升,成本曲线趋向平缓。目前已有的 DRDS 客户群体中,不乏 1 个 DRDS 下挂几十个 RDS 实例的情况,以满足数据高效存取以及抵御业务高并发的诉求。
按应用生命周期发展选择
DRDS 除提供水平拆分、分库分表能力外,同时提供垂直拆分能力,针对多个 RDS 实例的数据库进行关联查询及事务写入操作,可有效避免业务端繁琐复杂的硬代码处理方式,大幅提升业务开发效率。同时针对极端热点场景,DRDS 提供热点拆分能力,有效解决过热数据导致的热点问题。
DRDS 各个拆分模式可无缝平滑打通,全方位覆盖、满足业务各个生命周期中对于数据库的扩展性诉求。
在线高并发实时交易
电商、金融、O2O、零售等行业由于用户基数大、营销活动频繁,普遍存在核心交易系统数据库响应日益变慢的问题。 DRDS 提供线性水平扩展能力,实时提升数据库处理能力,轻松应对高并发的实时交
超大数据规模在线实时分析
在线业务实时分析可使用 DRDS 分析型只读实例,对海量数据规模下的多表关联、聚合、排序、子查询操作可秒级返回处理结果,无需进行额外的数据同步操作,大幅节省整体架构的运维及预算成本。
在、离线数据中转
当业务收集云下或端的数据至云上进行数据分析和智能报表时,DRDS 提供存储容量与并发吞吐均可线性扩展的能力,以帮助业务完成数据中转或分析结果存储的诉求。
SQL 简介
更新时间:2019-11-01 16:07:26
本页目录
本 SQL 参考手册主要介绍 DRDS 新版本的 SQL 语句及其语法。
SQL 兼容性
DRDS 高度兼容 MySQL 协议和语法,但由于分布式数据库和单机数据库存在较大的架构差异,存在 SQL 使用限制。相关兼容性和 SQL 限制描述如下。
SQL 大类限制
- 暂不支持用户自定义数据类型、自定义函数。
- 暂不支持视图、存储过程、触发器、游标。
- 暂不支持临时表。
- 暂不支持 BEGIN…END、LOOP…END LOOP、REPEAT…UNTIL…END REPEAT、WHILE…DO…END WHILE 等复合语句。
- 暂不支类似 IF ,WHILE 等流程控制类语句。
小语法限制
DDL
- CREATE TABLE tbl_name LIKE old_tbl_name 不支持拆分表。
- CREATE TABLE tbl_name SELECT statement 不支持拆分表。
- 暂不支持同时 RENAME 多表。
- 暂不支持 ALTER TABLE 修改拆分字段。
- 暂不支持跨Schema的DDL, 例如, CREATE TABLE db_name.tbl_name (… )。
DML
- 暂不支持 SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name。
- 暂不支持 STRAIGHT_JOIN 和 NATURAL JOIN。
- 暂不支持 DELETE 使用子查询和 ORDER BY/LIMIT。
- 暂不支持 跨分片 DELETE 使用 ORDER BY/LIMIT。
- 暂不支持 跨分片 DELETE 多表中的数据。
- 暂不支持 UPDATE 使用子查询。
- 暂不支持 跨分片 UPDATE 使用 ORDER BY/LIMIT。
- 暂不支持 跨分片 UPDATE 多表。
- 暂不支持 INSERT DELAYED Syntax。
- 暂不支持 SQL 中对于变量的引用和操作,比如 SET @c=1, @d=@c+1; SELECT @c, @d。
- 暂不支持在柔性事务中 INSERT / REPLACE / UPDATE / DELETE 广播表。
子查询
子查询相关细节可参考文档,以下简单罗列不支持的情况:
- 不支持 HAVING 子句中的子查询,JOIN ON 条件中的子查询。
- 等号操作行符的标量子查询(The Subquery as Scalar Operand)不支持 ROW 语法。
数据库管理
- SHOW WARNINGS Syntax 不支持 LIMIT/COUNT 的组合。
- SHOW ERRORS Syntax 不支持 LIMIT/COUNT 的组合。
运算符
- 暂不支持 ‘:=’ 赋值运算符。
函数
关键字
- 暂不支持 MILLISECOND。
- 暂不支持 MICROSECOND。