在“国产数据库硬核技术沙龙-TDSQL-A技术揭秘”系列分享中,5位腾讯云技术大咖分别从整体技术架构、列式存储及相关执行优化、集群数据交互总线、Fragment执行框架/查询分片策略/子查询框架以及向量化执行引擎等多个方面对TDSQL-A进行了深入解读。错过直播的小伙伴有福啦,今天带来本次系列分享中腾讯云数据库高级工程师伍鑫老师主题为“TDSQL-A列存储设计原理及执行优化详解”的文字版。
TDSQL-A是腾讯首款分布式分析型数据库,采用全并行无共享架构,适应于海量OLAP关联分析查询场景,能够支持2000台物理服务器以上的集群规模,存储容量能达到单数据库实例百P级。其中,TDSQL-A还具有自研列式存储引擎,能支持行列混合存储,对分析模型下的查询语句性能做到了极致优化。
TDSQL-A整体架构
在开始之前,我们先来了解下TDSQL-A的整体架构,它分为这几个模块:
第一是上层的GTM事务管理器,它主要是负责全局事务的管理,协调机群的事务,同时管理集群的全体对象。右上角是协调节点,它是业务访问入口。协调节点模块是水平对等的,也就是说业务连接到任何一个协调节点上,都能够获得到一致的数据库视图。
第二是下方的数据节点。数据节点也是实际存储数据的节点,每个数据节点只会存储数据的分片,而数据节点之间加在一起会形成一个完整的数据视图。
而数据节点和协调节点之间是集群的数据交互总线。集群交互总线的目的是把集群内部节点连接在一起,从而完成整个查询交互。
最后,左侧描述的是数据库内核的运维管控系统。通过运维管理、实时监控、实时告警、安全审计和数据治理等功能,可以进行自动化的运维,减少运维人员和用户使用的成本。
自研列存储带来极致优化性能
我们今天主要分享两个方面,一个是TDSQL-A自研列存储,另外一个是基于自研列存储的优化器相关优化。现在先来看看TDSQL-A的自研列存储。
说到列存储,相信大家都比较熟悉。列存储对具体的查询模型或者访问模型本身是有特殊优化的。传统情况下,数据库更多的是偏向事务型的场景,在每次数据写入的时候,都会把整行写到存储上面,一次磁盘IO可以访问所有列。这种场景在面对互联网这种大数据量分析的情况下,可能有些列在计算的时候并不需要访问,这会带来IO访问上的瓶颈,同时在后续优化上,也不方便针对特定的计算场景去进行优化。因此列存储也就应运而生了。
每列单独存储,多个列逻辑组成一行,一次磁盘IO只包含一列数据,这一列的数据可能是一行中的一列,或者是执行中的一个数据,同时在这种编排格式下,更方便去做数据压缩,因为相同列的数据类型有更高的一致性和匹配度,所以可能会面向很多极致的压缩的场景,也更适合OLAP的计算场景。
TDSQL-A同时支持行存储和列存储建表,行表和列表之间可以进行互相操作ÿ