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

简介

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

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

如您有关于列存索引的使用问题,请进钉钉群咨询,群号:27520023189。

版本要求

  • 企业版集群,集群版本需满足以下条件之一:

    • PolarDB MySQL版8.0.1版本,且修订版本为8.0.1.1.22及以上。

    • PolarDB MySQL版8.0.2版本,且修订版本为8.0.2.2.12及以上。

  • 标准版集群,CPU架构需为X86,集群版本需满足以下条件之一:

    • PolarDB MySQL版8.0.1版本,且修订版本为8.0.1.1.38及以上。

    • PolarDB MySQL版8.0.2版本,且修订版本为8.0.2.2.23.1及以上。

实现形态

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

费用说明

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

注意事项

  • 列存索引(IMCI)不支持全球数据库(GDN)功能。

  • 列存索引功能与无感秒切(热备节点)功能中的高可用模块(Voting Disk)有一定的互斥。具体如下:

    • 对于内核版本为8.0.1.1.42及以上,或8.0.2.2.23及以上版本的集群:

      • 若集群中已有开启热备功能的只读节点,支持在该集群中添加只读列存节点。

      • 若集群中已存在只读列存节点,则该集群中的任何只读节点都不支持开启热备功能。

    • 对于内核版本低于8.0.1.1.42版本,或低于8.0.2.2.23版本的集群,列存索引与热备节点完全互斥,即:

      • 若集群中已有开启热备功能的只读节点,则不支持在该集群中添加只读列存节点。

        说明

        此时若您需要继续为集群添加只读列存节点,您需要联系阿里云技术支持,在后台关闭Voting Disk,在关闭过程中会自动重启所有节点。

    • 若集群中已存在只读列存节点,则该集群中的任何只读节点都不支持开启热备功能。

技术原理

列存索引特性在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。

  • 测试结果

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

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

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

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

  • 结论

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

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

免费体验

阿里云提供了数据库解决方案功能体验馆。您无需购买任何资源,即可在线体验PolarDB MySQL版列存索引(IMCI)的性能提升效果。

您可前往IMCI功能体验页面体验IMCI性能提升效果,具体的操作步骤请参见免费体验PolarDB MySQL列存索引(IMCI)