功能介绍
LibraDB 引擎主要服务于高效的分析类查询。是一个为客户提供实时且高性能的复杂 SQL 处理的扩展只读分析组件。利用 LibraDB 引擎的列式存储能力、向量化并行执行引擎以及分布式并行执行而扩展的优化器,可以让客户能够很简单的在数据库中原地体验到高效地分析能力,另外 LibraDB 的列式存储为高 QPS 的变更、事务的 ACID,进行了针对性的优化,保证了查询数据的实时性以及一致性。
支持版本
LibraDB 引擎内核版本1.2404.1及以上。
原理
LibraDB 引擎内核实现主要分为3个部分,分别为数据同步组件、计算引擎与列式存储。其中数据同步组件主要负责将行存数据转换加载为列式存储的形式。主要实现原理为 binlog 同步与消费,与 MySQL 中的主从复制机制一样;计算引擎主要负责元数据存储、执行计划生成以及执行算子生成等相关工作;列式存储主要负责数据存储,算子执行等相关工作。
支持的功能
LibraDB 引擎内核功能支持多种优异特性,下文为您简单介绍一下产品支持的功能。
一、大规模并行计算 MPP
MPP(Massively Parallel Processing)架构是一种分布式数据处理技术,能够通过将工作负载分散到多个节点上来提高数据处理性能。在 LibraDB 引擎中,在扩展支持了多副本能力后,可以将多个只读分析引擎实例的节点组合成集群,每个节点拥有独立的磁盘和内存系统,然后通过专用网络或商业通用网络连接彼此、协同计算,从而提供整体数据处理服务。可以有效的扩展在超大数据规模下的数据处理性能,避免受制于单一节点的性能瓶颈,以支撑不同量级的用户需求。
MPP 能力的优点在于高性能的数据处理,可以充分利用多个节点的计算资源,在执行同一个 SQL 时,可将 SQL 算子分发到多个节点中共同执行。同时可以支持横向的扩展,针对用户的业务增长,也支持性能的扩容。
二、向量化执行引擎
针对 LibraDB 引擎而言,数据不仅仅按列存储,还会基于列进行计算。在 TXSQL 这种传统的 OLTP 引擎中,通常会基于行存储进行计算,主要原因是事务以点查、点读、点写为主。但是在分析作为主要场景的 LibraDB 引擎中,单 SQL 的计算量可能极大。所以在 LibraDB 引擎中,我们实现了向量化的执行模式,在对内存中的列式数据,一个 batch 调用一次 SIMD 指令,减少了函数的调用次数,降低了 cache miss。同时还可以充分利用 SIMD 指令的并行能力,缩短计算耗时。
三、支持高速变更场景下的列式存储
在 TDSQL-C MySQL 版的读写实例中,可以支撑超百万级别的数据在线操作 QPS。而作为一个可以支撑实时数据分析的 LibraDB 引擎,必须要能够满足在如此之高的数据变更场景下的数据一致性。传统的列式存储在数据的大批量写入具有一定的优势,但是在面对大规模数据的 delete 和 update 就显得性能不足。在传统的实时数仓场景下,好的实践就是将 update 变更为 delete 和 insert,同时在数据同步层去实现数据的批量执行能力。但是列式存储在 delete 场景下依然存在一些性能劣势。综合以上的情况,传统列式的存储必定会存在较高的数据延时,无法达到实时数据分析的效果。
LibraDB 引擎通过在存储层的优化和支持,可以满足用户在高并发场景下的数据变更的数据一致性,避免因为读写实例的数据频繁变更带来的数据延时而错过分析时间。
四、指定数据加载能力
针对 TDSQL-C MySQL 版中的数据而言,并非所有的数据都具备数据分析价值,所以不需要所有的对象都加载为列存。故 libraDB 引擎支持指定对象加载的能力。可在数据加载的控制台设置或者通过命令行 SQL 指定需要加载的 LibraDB 的对象。