gydtep 发表于 2021-12-21 18:54:21

In-Memory Column Index使用行列混合存储技术,同时结合了PolarDB基于共享存储一写多读的架构特征,其包含如下几个关键的技术创新点:

gydtep 发表于 2021-12-21 19:19:39

在PolarDB的存储引擎(InnoDB)上新增对列式索引(Columnar Index)的支持,用户可以选择通过DDL将一张表的全部列或者部分列创建为列索引,列索引采用列压缩存储,其存储空间消耗会远小于行存格式。默认列索引会全部常驻内存以实现最大化分析性能,但是当内存不够时也支持将其持久化到共享存储上。

gydtep 发表于 2021-12-22 08:14:58

支持行列混合执行的优化器框架,该优化器框架会根据下发的SQL是否能在列索引上执行覆盖查询,并且其所依赖的的函数及算子能被列式执行器所支持来决定是否启动列式执行。优化器会同时对行存执行计划和列存执行计划做代价估算,并选中代价交代的执行计划。

gydtep 发表于 2021-12-22 10:46:52

执行SQL的Parse过程并生成LogicalPlan,然后调用MySQL原生优化器按照执行一定优化操作,如join order调整等。同时该阶段获得的逻辑执行计划会转给IMCI的执行计划编译模块,尝试生成一个列存的执行计划(此处可能会被白名单拦截并fallback回行存)。

gydtep 发表于 2021-12-22 13:12:26

支持BATCH并行的算子

IMCI执行器引擎使用经典的火山模型,但是借助了列存存储以及向量执行来提升执行性能。

gydtep 发表于 2021-12-22 16:04:06

在列存格式下,由于每一列的数据都单独顺序存储,涉及到某一个特定列上的表达式计算过程都可以批量进行。对每一个计算表达式,其输入和输出都以Batch为单位,在Batch的处理模式下,计算过程可以使用SIMD指令进行加速。新表达式系统有两项关键优化:

gydtep 发表于 2021-12-22 18:52:47

由于消除了树形迭代器模型中的递归过程,计算效率更高。同时该方法对计算过程提供简洁的抽象,将数据和计算过程分离,天然适合并行计算。
3 支持行列混合存储的存储引擎

gydtep 发表于 2021-12-22 20:01:21

行存数据和列存数据具有实时一致性,能满足很多苛刻的业务需求,所有数据写入即可见于分析型查询。
更低的成本,用户可以非常方便的指定哪些列甚至一张表哪个范围的存储为列存格式用于分析。全量数据继续以行存存储。

gydtep 发表于 2021-12-23 08:16:51

满足OLTP业务的需求是第一优先的,因此增加列存支持不能对TP性能太大影响。这要求我们维护列存必须足够轻量,必要时需要牺牲AP性能保TP性能。

gydtep 发表于 2021-12-23 09:29:32

在数据编码格式上,实现为二级索引的列存可以和其他行存索引使用完全一样的内格式,直接内存拷贝即可,不需要考虑charset和collation等信息,这对上层执行器也是完全透明的。
页: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
查看完整版本: 【腾讯云】云产品限时秒杀,爆款2核4G云服务器首年74元