
# 功能介绍
#### 什么是算子下推（NDP）
NDP(Near Data Processing)是云数据库TaurusDB发布的旨在提高数据查询效率的计算下推的解决方案。针对数据密集型查询，将提取列、聚合运算、条件过滤等操作从计算节点向下推送给TaurusDB的分布式存储层的多个节点，并行执行。通过计算下推方法，提升了并行处理能力，减少网络流量和计算节点的压力，提高了查询处理执行效率。
#### 工作原理
云数据库TaurusDB采用计算与存储分离的架构，以减少网络流量为主要架构准则，通过NDP设计将该准则应用到查询操作。没有NDP之前，查询处理需要将原始数据从存储节点全部传输到计算节点。通过NDP设计，查询中的I/O密集型和CPU密集型的大部分工作被下推到存储节点完成，仅将所需列及筛选后的行或聚合后的结果值回传给计算节点，使网络流量大幅减少。同时跨存储节点并行处理，使计算节点CPU使用率下降，提升了查询效率性能。
另外，NDP框架同TaurusDB并行查询进行融合，并进行了页面批量预取的设计，达成执行全流程并行，进一步提升查询执行效率。
图1NDP工作原理图
![](https://support.huaweicloud.com/kerneldesc-taurusdb/figure/zh-cn_image_0000002371532696.png "点击放大")
#### 使用场景
查询业务能进行下推的场景主要包括三大类：Projection、Aggregate、Select。
- **Projection**
  列裁剪，只有查询语句所需相关字段内容才会被发送到计算节点。
  
- **Aggregate**
  典型的聚合操作包括：count、sum、avg、max、min、group by，只发送聚合结果（而不是所有元组）到查询引擎，count (\*)是一个最常见的场景。
  
- **Select - where子句过滤**
  常见的条件表达式：Compare(\>=,\<=,\<,\>,==)、Between、In、And/Or，like。
  将过滤表达式下推送到存储节点，只有满足条件的行才会发送到计算节点。
  
 
#### 支持范围
1. 当前支持对InnoDB表进行计算下推。
2. 当前支持对COMPACT或DYNAMIC行格式的表进行计算下推。
3. 当前支持对Primary Key或BTREE Index进行计算下推，HASH Index或Full-Text Index不支持计算下推。
4. 当前只支持SELECT查询操作进行计算下推，其他DML语句不支持计算下推，INSERT INTO SELECT也不支持计算下推；SELECT 加锁查询(如 SELECT FOR SHARE/UPDATE)不支持计算下推。
5. 聚集操作下推当前支持COUNT/SUM/AVG/MAX/MIN函数，带GROUP BY语句的聚集操作暂不支持下推。
6. 表达式下推支持数值类型、日志和时间类型和部分字符串类型(CHAR, VARCHAR)，支持utf8mb4, utf8字符集。
7. 表达式下推谓词支持比较运算(\<,\>,=,\<=,\>=,!=), IN, NOT IN, LIKE, NOT LIKE, BETWEEN AND, AND/OR等操作符。
 
#### 参数说明
表1参数说明 
| 参数名                  | 级别             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|
| ndp_mode             | Global、Session | NDP特性开关，OFF表示特性关闭，ON表示特性在主机和只读节点开启，REPLICA_ON表示特性只在只读节点开启。 取值范围：OFF/ON/REPLICA_ON 默认取值：OFF                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ndp_support_features | Global、Session | NDP支持的特性 - COUNT，是否将COUNT聚合运算通过NDP下推至存储计算  - MIN，是否将MIN聚合运算通过NDP下推至存储计算  - MAX，是否将MAX聚合运算通过NDP下推至存储计算  - AVG，是否将AVG聚合运算通过NDP下推至存储计算  - SUM，是否将SUM聚合运算通过NDP下推至存储计算  - GROUP_BY，是否将GROUP BY分组相关聚合运算通过NDP下推至存储计算  - Partition_Table，针对分区表，NDP下推是否生效  - Instant_Column_Table，针对快速加列的表，NDP是否生效  - Bloom_filter，针对Hash Join，是否将Hash Table通过NDP下推至存储提前过滤   取值范围：COUNT,MIN,MAX,AVG,SUM,GROUP_BY,Partition_Table,Instant_Column_Table,Bloom_filter 默认取值：COUNT,SUM |
   
