近日,腾讯云原生数据库 TDSQL-C 发布列存索引(Column store Index)能力,这一企业级特性将大幅提高用户在使用数据库进行复杂查询时的速度,并降低数据存储空间的使用。
随着互联网、物联网、人工智能等技术的飞速发展,数据量呈现出爆炸式增长,企业的数字化改革也越发深入,因此,企业对数据库的数据分析以及数据整合查询能力提出了越来越高的要求。
一方面,越来越多的公司业务开始需要进行复杂查询,比如公司的各类报表整合、年终数据盘点、业务分析预测等。另一方面,数据量的疯狂增长导致了单个数据库的存储容量由 TP 级别逐渐增长至 PB 级别,传统数据库难以应对,同时,越来越多的 B 端用户对数据的实时性和效率性要求越来越高,比如游戏行业的分析业务、银行的监管业务以及电商平台的订单业务等。传统行业的数据体系也需要多维度的指标和计算方法来实现业务的快速增长,企业用户在大数据量下能获取到更快更精确的查询响应时间变得越来越重要。
在 MySQL 生态里,各开源发行版可以有效地支持 TP 负载,但业务上还是会有一些 AP 查询,例如上文中提到的多种场景。这些查询虽然不多,但通常要处理比较大的数据量。
传统数据库的解决方法
为了应对 AP 查询,传统数据库常见的解决方法一种是采用数据同步工具,通过数据同步工具将事务系统的数据复制到独立的分析系统中,并将用户的查询分析路由到分析系统中进行相应处理再返回结论。这样的方法会带来一些额外的问题,比如数据同步和独立分析集群会增加额外成本,以及数据同步会伴随实时性和一致性相关的问题。
另一种解决方法则是直接在现有的业务系统中运行分析查询,但是复杂查询带来的资源负载会影响整个业务系统的稳定性,从而导致系统容易崩溃,且查询的性能往往会达不到预期。
TDSQL-C 的解决方法
为应对算力不足、计算效能低等痛点场景,满足用户多样查询性能需求,腾讯云原生数据库 TDSQL-C 近日发布列存索引能力,用户只需通过简单的设置,就可以实现基于列的数据存储和查询处理,从而大幅缩短查询响应时间。
经验证,开启列存索引能力后,在面对大数据量表单与复杂 SQL 语句时,查询时间大幅缩短,加速比最高可达十几倍。TDSQL-C 实现列存索引时,除了对常用的 SQL 语句进行了支持,还将列存索引能力与其他 HTAP 能力兼容,将由此形成 TDSQL-C HTAP 能力矩阵。
一. TDSQL-C 列存索引
整体架构
TDSQL-C 的列存索引能力,包含如下3个关键技术点:
在 TDSQL-C 中,数据默认以行式存储。为了提高分析查询的效率,采用列式存储是一种更佳的选择。我们通过为行存表创建列存索引的方式,在统一架构上实现了数据的混合存储。当行存数据写入到行存表后,需要更新所有索引表,而列存索引仍是一种索引,逻辑上与普通索引等同处理。数据写列存索引时,需要将每列的数据转成列存的编码格式,按列写入到列存块中,因此具备更好的数据压缩比,查询时也具备更少的非相关列的读开销,以及更高的内存命中率。
2. 行列混合计划的生成与调度执行
TDSQL-C 基于优化器的统计信息、代价模型,让列存索引适配当前行存优化器模型,并参与 CBO(代价优化器)的搜索空间。进而执行计划片断下压,基于片断执行混合调度。
3. 高效计算
由于数据是以列式单独存储于数据块中的,计算时只读取所需要的列数,从而可以大大减少 IO 层的开销,特别是大宽表的场景,并且列式数据可以按更紧凑的方式存储在内存中,使用列存索引计算时,各个算子尽量按批处理多行的列数据,充分发挥 CPU 的 cache 亲和力,从而可以提高计算效率。
二、TDSQL-C 列存索引实现效果
经测试表明,对于目前已支持的 SQL 语句,TDSQL-C 开启列存索引后的查询时间相比于 MySQL 传统的行存查询时间,平均缩短5倍以上。以下为 TPC-H 基准模型性能测试结果:
Query | 非 CSI 执行时间(s) | CSI 执行时间(s) | 加速倍数 |
---|---|---|---|
Q1 | 1419.89 | 738.03 | 1.92 |
Q3 | 427.04 | 203.61 | 2.1 |
Q6 | 310.66 | 23.72 | 13.1 |
Q7 | 1246.7 | 390.99 | 3.19 |
Q8 | 661.36 | 162.96 | 4.06 |
Q9 | 1800 | 1131.23 | 1.59 |
Q11 | 436.65 | 33.93 | 12.87 |
Q12 | 357.25 | 211.42 | 1.69 |
Q14 | 329.48 | 48.19 | 6.84 |
Q15 | 709.06 | 99.9 | 7.1 |
Q19 | 561.56 | 269.04 | 2.09 |
执行时间表
执行加速比
由于 TPC-H 基准模型涉及了22条复杂的 select 查询流语句,已涵盖了大多数 SQL 语句,因此从测试结果可以看出:常用的带有分组、排序、聚集、子查询操作并存的多表连接查询操作,具有较好的加速效果,未使用列存索引时执行时间为436.65秒,开启列存索引后执行时间为33.93秒,加速倍数可以达到12.87倍;带有聚集操作的单表查询操作,未开启列存时查询时间为310.66秒,开启列存索引后执行时间为23.72秒,加速倍数可以达到13倍,并且随着下一阶段的迭代,加速倍数将会进一步增大。
结语
TDSQL-C 作为腾讯云自研的新一代云原生关系型数据库,融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务,并将持续在列存索引能力上发力,在这一企业级查询加速特性上探索更多可能性,为用户的业务带来更强有力的支持。
腾讯云原生数据库 TDSQL-C “列存索引”已对外正式公布,免费体验阶段,欢迎使用!
﹀
﹀
﹀
-- 更多精彩 --
腾讯云数据库亮相 DTC 2024,“国产化+智能化”双赛道驱动未来创新
↓↓点击阅读原文,了解更多优惠