gydtep 发表于 2022-9-22 12:57:51
Oracle公司在在2013年发表的Oracle 12C上,发布了Database In-Memory套件,其最核心的功能即为In-Memory Column Store,通过提供行列混合存储/高级查询优化(物化表达式,JoinGroup)等技术提升OLAP性能。gydtep 发表于 2022-9-22 18:24:33
MySQL的SQL执行引擎基于流式迭代器模型(Volcano Iterator)实现, 这个架构在工程实现上依赖大量深层次的函数嵌套及虚函数调用,在处理海量数据时,这种架构会影响现代CPU流水线的pipline效率,导致CPU Cache效率低下。gydtep 发表于 2022-9-22 20:07:41
并行查询的加入使得PolarDB突破了单核执行性能的限制,利用多核CPU的并行处理能力,在PolarDB上部分SQL查询耗时成指数级下降。gydtep 发表于 2022-9-23 16:15:38
支持行列混合执行的优化器框架,该优化器框架会根据下发的SQL是否能在列索引上执行覆盖查询,并且其所依赖的的函数及算子能被列式执行器所支持来决定是否启动列式执行。gydtep 发表于 2022-9-26 14:13:35
在数据编码格式上,实现为二级索引的列存可以和其他行存索引使用完全一样的内格式,直接内存拷贝即可,不需要考虑charset和collation等信息,这对上层执行器也是完全透明的。gydtep 发表于 2022-9-26 15:53:41
Plan转换的目的是将MySQL的原生逻辑执行计划表示方式AST转换为IMCI的Logical Plan。在生成IMCI的Logical Plan之后,会经过一轮Optimize过程,生成Physical Plan。gydtep 发表于 2022-9-27 09:28:05
列存的设计无需考虑事务并发对数据的修改, 数据的unique check等问题,这些问题在行存系统中已经被解决,而这些问题对ClickHouse等单独的列存引擎是非常难以处理的。gydtep 发表于 2022-9-27 20:49:24
列存RowGroup中每新写入一行都会分配一个RowID用作定位,属于一行的所有列都可以用该RowID计算定位,同时系统维护PK到RowID的映射索引,以支持后续的删除和修改操作。gydtep 发表于 2022-9-28 11:58:49
借助写入事务号和删除事务号,AP型查询可以用非常轻量级的方式获得一个全局一致性的快照。列索引粗糙索引
gydtep 发表于 2022-9-29 12:41:14
这样的架构有其灵活之处,例如对于TP数据库和AP数据库都可以各自选择最好的方案,而且实现了TP/AP负载的完全隔离。但是其缺点也是显而易见的。