概述

本文介绍了PolarDB MySQL引擎的列存索引特性。

简介

当前PolarDB MySQL引擎主要面向OLTP场景,广泛应用于在线业务,日常产生大量的数据。但是,PolarDB MySQL基于行存的查询性能并不能满足所有应用场景的需求。通常情况下,为了实现复杂分析型查询,需要将数据从PolarDB MySQL导出,然后导入到外部专用的OLAP系统中再进行分析查询。这样一来,需要使用两套数据库系统,架构复杂性、运维工作量和成本都会大大增加。

PolarDB MySQL引擎重磅推出的列存索引(In-Memory Column Index,简称IMCI)面向OLAP场景大数据量复杂查询。通过列存索引,PolarDB MySQL实现了一体化的实时事务处理和实时数据分析的能力,成为一站式HTAP数据库产品解决方案。通过一套数据库系统,即可满足业务的OLTP及OLAP需求。

说明

使用过程中如果遇到问题,建议提交工单获取全面的技术支持。

版本要求

  • 仅PolarDB MySQL集群版,小版本号为8.0.1的集群支持列存索引特性,且具体内核版本需为8.0.1.1.22及以上。

  • 单节点、高压缩引擎(X-Engine)均不支持列存索引。

实现形态

为了实现OLAP和OLTP的计算资源隔离,当前仅支持在只读节点上实现列存索引,即OLAP查询请求只发给只读节点,而不会发给主节点。至于OLAP查询请求是发给只读行存节点,还是只读列存节点,可根据行存/列存分流方案进行配置。

费用说明

该功能可免费使用,只收取只读列存节点的费用。只读列存节点按照普通的计算节点收费,具体请参见按量付费计费规则包年包月计费规则。同时,列存索引也会占用一定的存储空间,存储空间计费具体请参见存储类型计费规则

技术原理

列存索引特性在PolarDB MySQL引擎中的功能架构图如下:从以上架构图可以看到,PolarDB MySQL引擎从存储引擎、执行算子、优化器三个层面设计了列存索引的特性:架构

  • 存储引擎:支持实时事务级别一致性的行列混合存储;

  • 执行算子:面向列存的向量化并行执行算子,支持极速的单表和多表查询;

  • SQL Parser/优化器:面向行列混合存储的CBO优化器,可以根据代价自动选择行存或者列存执行查询请求;

在此架构下,PolarDB MySQL引擎实现了100%兼容MySQL协议的基础上,同时获得数个数量级的查询加速效果。

核心优势

PolarDB MySQL引擎依托列存索引特性,具备如下优势:

  • 100%兼容MySQL:列存具有与MySQL一致的数据类型系统,支持灵活的类型转换,100%兼容MySQL协议;

  • 极致的HTAP性能:PolarDB在OLTP方面本身具备极致性能。列存索引使其OLAP性能也与专用的OLAP数据库系统处于同一水平;

  • 行列混合存储,降低成本:同时支持行存储和列存储两种格式,且实时保证行列的事务级一致。列存更具有低成本的优势。

适用场景

PolarDB MySQL引擎的列存索引特性提供了一站式HTAP产品体验,可以应用于多种业务场景:

  • 对在线数据有实时数据分析需求的场景,如实时报表;

  • 专用数据仓库场景:依托PolarDB提供的海量数据存储能力,汇聚多个上游数据源,将其作为专用数据仓库使用;

  • ETL数据加速计算场景:依托PolarDB基于列存索引提供的强大而灵活的计算能力,在PolarDB中使用SQL来实现ETL功能。场景

性能提升情况

列存索引功能对SQL查询操作有明显的加速作用,查询性能甚至可以提升百倍。接下来我们以标准TPC-H测试的数据表和SQL为例,体验列存索引对查询的加速效果。

  • 测试方法:TPC-H是业界常用的一套基准,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group by聚合等。

说明

本文的TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。

  • 数据量:100 GB。

  • 测试结果

    • PolarDB MySQL开启列存索引前后性能对比

      下图展示了PolarDB MySQL开启列存索引前后分别执行TPC-H的22条查询语句的查询响应时间的对比。和自己比

    • PolarDB MySQL开启列存索引后与ClickHouse性能对比

      下图展示了PolarDB MySQL开启了列存索引后,执行TPC-H的21条查询语句(Q21除外,ClickHouse不支持)的查询响应时间,与相同数据量和数据结构的ClickHouse数据库的对比。和ck比

  • 结论

    • 列存索引对大多数的复杂查询操作都有加速作用,查询性能提升非常明显,甚至可达到百倍。

    • 与传统OLAP数据库ClickHouse相比:PolarDB MySQL开启列存索引后,与ClickHouse性能相比各有优劣。其中PolarDB MySQL在单表Scan/AGG、Join等场景中表现突出。未来PolarDB MySQL的列存索引特性将在聚合加速、窗口函数等方面持续优化和突破。

使用说明

  1. 首先您需要添加只读列存节点

  2. 然后根据业务情况,配置包含列存节点的集群地址,实现行存/列存分流

  3. 然后通过集群地址连接数据库集群后,基于列存索引语法说明在数据表中创建列存索引。

  4. 若有需要,可设置压缩算法,降低存储成本。

阿里云首页 云原生关系型数据库 PolarDB MySQL引擎 相关技术圈