功能介绍
LibraDB 引擎主要服务于高效的分析类查询。是一个为客户提供实时且高性能的复杂 SQL 处理的扩展只读分析组件。利用 LibraDB 引擎的列式存储能力、向量化并行执行引擎以及分布式并行执行而扩展的优化器,可以让客户能够很简单的在数据库中原地体验到高效地分析能力,另外 LibraDB 的列式存储为高 QPS 的变更、事务的 ACID,进行了针对性的优化,保证了查询数据的实时性以及一致性。
原理
LibraDB 引擎内核能够自动从主节点中将数据转换为列式存储,并实时同步 binlog,使得数据与主节点实时保持一致。然后通过并行计算能力与向量化的执行引擎,处理用户复杂的 SQL,加速查询执行。
支持的功能
LibraDB 引擎内核功能支持多种优异特性,下文为您简单介绍一下产品支持的功能。
一、并行计算能力
在 LibraDB 引擎中,可以充分利用节点的计算资源去执行用户的 SQL。当 SQL 在 LibraDB 引擎中运行时,可以将一个 SQL 查询任务拆分为多个子任务,并允许这些子任务在多个处理器中同时运行。这种多线程的运行方式可以有效的提升 CPU 利用率以及 IO 资源,从而达到加速处理的目的。
二、向量化执行引擎
针对 LibraDB 引擎而言,数据不仅仅按列存储,还会基于列进行计算。在 TXSQL 这种传统的 OLTP 引擎中,通常会基于行存储进行计算,主要原因是事务以点查、点读、点写为主。但是在分析作为主要场景的 LibraDB 引擎中,单 SQL 的计算量可能极大。所以在 LibraDB 引擎中,我们实现了向量化的执行模式,在对内存中的列式数据,一个 batch 调用一次 SIMD 指令,减少了函数的调用次数,降低了 cache miss。同时还可以充分利用 SIMD 指令的并行能力,缩短计算耗时。
三、支持高速变更场景下的列式存储
在云数据库 MySQL 的主实例中,可以支撑超百万级别的数据在线操作 QPS。而作为一个可以支撑实时数据分析的 LibraDB 引擎,必须要能够满足在如此之高的数据变更场景下的数据一致性。传统的列式存储在数据的大批量写入具有一定的优势,但是在面对大规模数据的 delete 和 update 就显得性能不足。在传统的实时数仓场景下,好的实践就是将 update 变更为 delete 和 insert,同时在数据同步层去实现数据的批量执行能力。但是列式存储在 delete 场景下依然存在一些性能劣势。综合以上的情况,传统列式的存储必定会存在较高的数据延时,无法达到实时数据分析的效果。
LibraDB 引擎通过在存储层的优化和支持,可以满足用户在高并发场景下的数据变更的数据一致性,避免因为读写实例的数据频繁变更带来的数据延时而错过分析时间。
四、指定数据加载能力
针对云数据库 MySQL 中的数据而言,并非所有的数据都具备数据分析价值,所以不需要所有的对象都加载为列存。故 libraDB 引擎支持指定对象加载的能力。可在数据加载的控制台设置或者通过命令行 SQL 指定需要加载的 LibraDB 的对象。