TaurusDB内核概述
内核介绍
在企业级数据库应用中,随着业务量的增长,数据库的读写压力日益增大,传统的开源MySQL数据库在扩展性方面遇到了瓶颈,如添加只读节点时需要复制全量数据,导致扩展时间长且成本高。如何解决这一扩展性问题,同时保持高性能和低成本?
TaurusDB作为华为自研的最新一代企业级高扩展高性能云原生数据库,完全兼容MySQL,采用计算存储分离架构,最大128TB的海量存储,故障秒级切换,既拥有商业数据库的高可用和性能,又具备开源低成本效益。
产品架构
云数据库TaurusDB整体架构自下向上分为三层。
- 存储层: 基于华为DFV存储,提供分布式、强一致和高性能的存储能力,此层来保障数据的可靠性以及横向扩展能力,保证数据的可靠性不低于99.999999999%。DFV(Data Function Virtualization)是一个与数据库垂直整合的高性能,高可靠的分布式存储系统。存储集群采取池化部署,可以有效提升存储使用效率,构建以数据为中心的全栈数据服务架构的解决方案。
- 存储抽象层 (Storage Abstraction Layer):将原始数据库基于表文件的操作抽象为对应分布式存储,向下对接DFV,向上提供高效调度的数据库存储语义,是数据库高性能的核心。
- SQL解析层:与MySQL 8.0开源版100%兼容,客户业务从MySQL生态可以平滑迁移, 从其他数据库迁移也能使用MySQL生态的语法、工具,降低开发、学习成本。基于原生MySQL,在100%兼容的前提下进行大量内核优化以及开源加固。
核心特点
TaurusDB作为云原生存算分离数据库,所有计算节点共享同一份存储数据,这是其与开源MySQL的最大区别。
具有以下核心特点:
- 添加只读节点时,无需复制全量数据,添加节点的时间与数据量大小无关,可实现分钟级添加只读节点(预估7~10分钟),最多支持1主15只读节点。
- 主备之间无需进行Binlog复制以同步数据,仅同步redo元数据。只读节点通过从DFV存储池中读取并回放redo log来实现数据同步。
TaurusDB基于共享存储架构,主备之间仍需要同步redo元数据,所以会存在主备数据延迟。原理详情请参见只读落后自愈技术原理。
- 数据会自动备份到OBS上,保证数据安全。
- 支持开启数据库代理实现读写分离,减轻主节点的读负载。
- 支持开启全量SQL,记录所有执行过的SQL,方便问题定位。
功能概览
|
类别 |
功能 |
描述 |
|---|---|---|
|
并行查询 |
支持并行执行的查询方式,用以降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。 |
|
|
计算下推 |
针对数据密集型查询,将提取列、聚合运算、条件过滤等操作从计算节点向下推送给TaurusDB的分布式存储层的多个节点,并行执行。 |
|
|
LIMIT OFFSET下推功能是把LIMIT OFFSET下推到引擎层处理,提升查询效率。 |
||
|
查询优化 |
利用 MySQL Optimizer/Index hint 来稳定执行计划的方法,称为 Statement outline。 |
|
|
通过功能优化器可以将某些大的IN谓词转换为IN子查询,从而提升复杂查询的执行性能。 |
||
|
可以通过反向扫描索引的方式消除排序,TaurusDB对Backward Index Scan特性增加开关,解决反向扫描与其他一些特性(例如: Index Condition Pushdown(ICP))不兼容,导致优化器选择Backward Index Scan后出现性能劣化问题。 |
||
|
提升多表连接下DISTINCT的查询效率,TaurusDB在执行优化器中加入了剪枝功能,可以去除不必要的扫描分支,提升查询性能。 |
||
|
DDL优化 |
当数据库硬件资源空闲时,您可以通过并行创建索引功能加速DDL执行,避免阻塞后续相关的DML操作,缩短执行DDL操作的窗口期。 |
|
|
TaurusDB在执行ALTER TABLE、CREATE INDEX、DROP INDEX操作时,可以设置MDL等锁时间(即DDL超时时间),避免阻塞后续DML操作。 |
||
|
TaurusDB提供的非阻塞DDL功能,可以保证即使在无法获得MDL-X锁的情况下,依然允许新事务进入目标表,从而保证整个业务系统的稳定。 |
||
|
在用户关闭performance schema 之后仍可以显示高耗时创建索引操作的进度。 |
||
|
事务优化 |
TaurusDB支持主动终止空闲事务,可针对不同类型的事务用不同的参数进行控制,当空闲事务超时后会被自动的回滚并断开连接。 |
|
|
TaurusDB提供了大事务检测的能力,当出现大事务,可以通过告警通知客户及时提交。 |
||
|
TaurusDB支持热点行更新优化,您可以通过手动指定或者自动识别的方式开启热点行更新。热点行更新开启后可以大幅度提升热点行的更新性能。 |
||
|
分区表 |
TaurusDB分区表相对于社区MySQL进行了功能增强,支持丰富的分区表类型及组合, |
|
|
LIST DEFAULT HASH是在同一级别支持两种分区类型:LIST和HASH。 |
||
|
INTERVAL RANGE分区表是RANGE分区表的扩展,当新插入的数据超过现有分区的范围时,允许数据库根据INTERVAL子句提前指定的规则来添加新分区。 |
||
|
TaurusDB实现了分区级别的MDL锁,使得分区表的锁粒度从表级降低到了分区级,不同分区上的DML和特定DDL(如增加和删除分区)在MDL锁上不会相互阻塞,从而大大提升分区间操作的并发性。 |
||
|
备份恢复 |
在客户数据误删除或漏洞引发数据异常、业务审计需追溯历史数据等场景下,TaurusDB支持基于Undo log的表级闪回查询功能。 |
|
|
Binlog管理 |
当使用自动定位的方式从TaurusDB实例拉取Binlog时,如果未读取的Binlog文件比较多,自动定位正确Binlog位点的时间很长。特性开启后,自动定位的时间会有大幅度降低。 |
|
|
安全加密 |
动态脱敏指的是当应用程序发起查询请求访问数据库时,数据库在将结果返回给客户端的过程中,对敏感数据进行脱敏处理的一种安全手段。TaurusDB动态脱敏功能通过添加脱敏规则实现指定库、表、列的数据进行脱敏。 |
|
|
回收站 |
TaurusDB支持库表回收站功能,删除后暂时将指定表或数据库移入“__recyclebin__”库中,并将表或数据库重命名。 |
|
|
多租户 |
TaurusDB提供的多租户管理功能,让数据库能够为其多个租户服务,提高数据库资源利用率。租户间实现数据隔离,不同租户能访问自己的数据。 |
|
|
其他功能 |
为了减少数据页面存储空间占用,节省成本,TaurusDB推出细粒度的字段压缩,提供ZLIB和ZSTD两种压缩算法,用户可以综合考虑压缩比和压缩解压性能影响,选择合适的压缩算法,对不频繁访问的大字段进行压缩。 |
|
|
TaurusDB集群实例运行过程中,主节点监控LRU(Least Recently Used)链表,将发生活动的数据页(从存储中读取或缓存池内移动的数据页)同步给只读节点。只读节点会将相关页面提前读取到缓存池中,以提高只读节点倒换成主节点后的缓存命中率,降低倒换后的性能抖动。 |
||
|
节点与只读节点共享存储数据,但是主节点和只读节点之间仍需要定期通信,保证只读节点的数据缓存能够与主节点保持同步。 |