KunlunDB 查询优化(二)Project 和 Filter 下推
前言
上一篇讲述了 KunlunDB 的查询优化原理(KunlunDB 查询优化(一)),本篇讲述 Project 和 Filter 下推演示。
一、测试表基本信息
1.1 测试环境
本次测试演示投影和过滤操作的下推。
测试环境的数据库集群共有四个数据节点(DN), 配置为两个 shard (shard1 和 shard2),每个 shard 节点由一个主节点和一个从节点构成(shard1 两个节点为数据复制关系,shard2 两个节点也是数据复制关系,shard1 和 shard2 存放数据表的不同分片数据)。如下图:
可以通过下面语句显示集群环境的节点信息
结果如下图:
1.2 表结构
本次测试的表结构如下图:
1.3 分片信息
表 Customer1 依据 c_id 字段,按范围分区,对应的分区表分别是:Customer1_1,Customer1_2,Customer1_3,Customer1_4。
4 个分片数据分别存在两个 shard 里:
结果如下图:
1.4 数据分布
数据根据分片规则落于不同的分片存储里
四个分区的数据分布如下图:
二、查询过程
2.1 过滤
过滤是对查询范围的定位,通过过滤, 可以减少数据块的读写数量。
执行过程:计算节点对 SQL 语句解释后,根据查询的目标表 customer1 的分片信息,RemoteScan 将查询语句下推到对应的存储节点执行(过滤不相关的分片),存储节点将查询结果返回到计算节点。
计算节点采取异步操作的模式做查询下推,多个存储节点可以并行执行。
下列语句,根据分片键值范围,SQL 语句对下推到对应的存储节点(shard2)(这是 SQL 执行引擎的第一过滤)。
结果如下图:
标记处即为执行计划中的过滤操作。
如果查询条件没有带由分片关键字,RemoteScan 会将语句下发到所有的分片节点,在分片结果根据查询条件过滤。explain select c_id ,c_middle,c_data from customer1where c_middle=‘OE’;
结果如下图:
KunlunDB 支持在查询条件中使用函数及各种复杂的条件 explain select count(*) from customer1where sqrt(c_discount)>0.5;
结果如下图:
2.2 Project 投影
计算节点对 SQL 语句解释后, 根据查询的目标表 customer1 的分片信息, RemoteScan 将查询语句下推到各个存储节点执行,存储节点将查询结果行中部分的字段(投影)返回到计算节点。
Project 操作减少了返回到计算节点的实际字段数量(只返回查询需要的,不相关的字段不会被读入计算节点的内存中去)。
执行过程参考下图:
explain select c_id,c_first,c_middle from customer1;
结果如下图:
上面语句执行过程,remoteScan 只返回字段 c_id,c_first,c_middle 数据到计算节点。
KunlunDB 支持字段上的函数及各种复杂条件的 Project
结果如下图:
存储节点只返回 c_balance+c_ytd_payment 的结果到计算节点。
2.3 分片的好处
分布式数据库在数据库层透明的将数据库分布在不同的存储节点,由此带来的好处:
对应用程序透明,即应用程序不需要做任何修改就可以访问数据。
存储节点对数据做读取及投影操作,减少计算节点的负载(更少的 CPU 和内存消耗)。
数据分布在不同的存储节点上,方便系统弹性扩展 IO 能力及避免 IO 的热点竞争。
投影和过滤操作,减少数据块读写范围 ,可以提高查询效率。
三、性能比对
在同一个环境里建一个与 customer1 完全相同数据(量)的数据表,然后执行相同的查询,对比查询的效率。
3.1 对分片表的查询
结果如下图:
耗时:0.05s
3.2 对非分片表查询
创建表:
结果如下图:
查询时间:
结果如下图:
耗时:0.69s
结论
通过 Project 和 Filter 的利用,表分片可以提高数据查询效率。
-END-
昆仑数据库是一个 HTAP NewSQL 分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。应用开发者和 DBA 的使用昆仑数据库的体验与单机 MySQL 和单机 PostgreSQL 几乎完全相同,因为首先昆仑数据库支持 PostgreSQL 和 MySQL 双协议,支持标准 SQL:2011 的 DML 语法和功能以及 PostgreSQL 和 MySQL 对标准 SQL 的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的 DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需 DBA 人工介入,不停服不影响业务正常运行。昆仑数据库具备全面的 OLAP 数据分析能力,通过了 TPC-H 和 TPC-DS 标准测试集,可以实时分析最新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与 docker,k8s 等云基础设施无缝协作,可以轻松搭建云数据库服务。请访问 http://www.zettadb.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。
KunlunDB 项目已开源
【GitHub:】https://github.com/zettadb
【Gitee:】https://gitee.com/zettadb
版权声明: 本文为 InfoQ 作者【KunlunDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/886113efd77197b9502318f8d】。文章转载请联系作者。
评论