暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

列存索引关键技术

芬芳 2023-09-14
136

PolarDB In-Memory Column Index功能提供了列式存储以及内存计算能力,让用户可以在一套数据库上同时运行TP和AP型混合负载,在保证现有PolarDB优异的OLTP性能的同时,大幅提升了在大数据量上运行复杂查询的性能。原理图如下:
image.png
列存索引使用行列混合存储技术。同时,结合PolarDB基于共享存储一写多读的架构特征,其包含如下几个关键的技术创新点:

  • 存储引擎(InnoDB)支持存储列式索引(Columnar Index),用户可以通过DDL语句为一张表中的全部列或者部分列创建列索引,列索引采用列压缩存储,其存储空间消耗会远小于行存格式。默认列索引会全部常驻内存以实现最大化分析性能。但是,当内存不够时也支持将其持久化到共享存储中。
  • 在SQL执行器层,重写了一套面向列存的执行器引擎框架(Column-oriented),该执行器框架充分利用列式存储的优势,如以4096行的一个Batch为单位访问存储层的数据,使用SIMD指令提升CPU单核心处理数据的吞吐,所有关键算子均支持并行执行。在列式存储上,新的执行器对比MySQL原有的行存执行器有数量级的性能提升。
  • 支持行列混合执行的优化器框架,该优化器框架会根据下发的SQL语句能否在列索引上执行来覆盖查询,并且其所依赖的函数及算子能否在列式执行器中执行来决定是否启动列式索引。优化器会同时对行存执行计划和列存执行计划做代价估算,并选中代价较低的执行计划。
  • 用户可以使用集群中的一个RO节点作为分析型节点,在该RO节点上配置生成列存索引,复杂查询运行在列存索引上并使用所有可用CPU的计算能力,在获得最大执行性能的同时不影响该集群上的TP型负载的可用内存和CPU资源。
    以上几个关键技术的结合,使得PolarDB成为了一个真正的HTAP数据库系统。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论