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