有奖:语音产品征文挑战赛等你来> HOT

背景

随着越来越多的用户将核心系统上云,用户数据量不断增加,业务逻辑也变得越来越复杂。虽然 TDSQL-C MySQL 版的云原生架构可以较好地处理业务的事务请求,但是对于用户多样化的查询分析需求,基于行存的查询并不能总是满足用户的响应时间要求。一种常见的解决方案是采用数据同步工具,将事务系统的数据复制到独立的分析系统中,并将用户的查询分析路由到分析系统中,然而,这种解决方案存在一些缺点,如数据同步和独立分析集群的额外成本,同步的实时性和一致性等问题。
为了解决这类问题,TDSQL-C MySQL 版推出了 CSI(Column store Index)列存索引功能。该功能使用列式数据格式存储、检索和管理数据的技术,可实现更好的查询性能和更高的数据压缩率。

功能优势

相比传统的基于行的存储方式,列存索引使用基于列的数据存储和查询处理,可以实现一个量级的查询性能提升。此外,列存储更有利于数据压缩,相比行存储,可以降低近一个量级的存储空间。

支持版本

内核版本 TDSQL-C MySQL 版8.0 3.1.14及以上。
说明:
针对只读实例而言,符合版本要求的情况下,4核以上的只读实例才可以开启列存索引功能。

应用场景

在线报表,数据看板等对在线数据有实时数据分析需求的场景。
大数据量分析型查询场景。

技术原理


TDSQL-C MySQL 版的列存索引能力,基于如下3个关键技术点实现:
1. 行列数据的混合存储
在 TDSQL-C MySQL 版中,数据默认以行式存储。为了更好地支持分析查询,列式存储是更为合适的选择。在统一的架构上,我们采用了为行存表创建列存索引的方式,达到数据混合存储的目的。
2. 行列混合计划的生成与调度执行
TDSQL-C MySQL 版基于优化器的统计信息、代价模型,让列存索引适配当前行存优化器模型,并参与 CBO(代价优化器)的搜索空间。进而执行计划片断下压,基于片断执行混合调度。
3. 高效计算
由于数据是以列式单独存储于数据块中的,计算时只读取所需要的列数,从而可以大大减少 IO 层的开销,特别是大宽表的场景。并且,列式数据可以按更紧凑的方式存储在内存中,使用列存索引 CSI 计算时,各个算子尽量按批处理多行的列数据,充分发挥 CPU 的 cache 亲和力,从而可以提高计算效率。