更新时间:2024-11-29 GMT+08:00

MOTService基本原理

简介

MOTService是在openGauss的基础上开发的内存表引擎,高吞吐、低时延,在openGauss的高性能、高安全、高可靠的企业级关系型数据库能力的基础上进一步提升了性能。MOT支持事务,支持完备的事务ACID特性。在FusionInsight RTD平台,MOTService主要为RTD组件提供数据存储、规则计算、数据查询服务。

原理

MOTService是在openGauss基本上开发的内存表引擎,本质上是个OLTP的单机版数据库,主要在优化执行、存储过程预编译、MVCC的乐观锁上增强优化,在RTD的规则计算上,实现ms级时延,TPS千级别。

图1 MOTService结构图
  • 存储过程预编译:基于LLVM技术,将存储过程预编译到本地可直接调用的格式,跳过了多层数据库处理逻辑,获得显著的性能提升。存储过程预编译的结果缓存到内存,可以像C语言指针一样可被后续的会话调用。对同一个存储过程而言,即使请求来自不同的会话或参数不同,也能重复使用之前的预编译结果。
  • 执行优化:通过完全存储在内存中的数据和索引、非统一内存访问感知(NUMA-aware)设计、消除锁和锁存争用的算法以及查询原生编译,MOT可提供更快的数据访问和更高效的事务执行。另外,MOTService索引基于Masstree的免锁索引,用于多核系统的快速和可扩展的键值(KV)存储,通过B+树的Trie实现。在多核服务器和高并发工作负载上,性能优异。
  • MVCC乐观锁:基于Silo数据库引入了乐观并发控制锁,简称OCC。数据库在读写阶段的不会阻塞等待,只有在事务提交阶段进行冲突检测和重试,大幅降低了阻塞时间。乐观方法开销较小,而且通常效率更高,原因之一是事务冲突在大多数应用程序中并不常见。

与各组件关系

用户在RTDService提供的web UI上定义存储过程规则和实时查询变量等,变量和规则会实时编译生成编译过程并部署到MOTService库中,当事件源维度映射上线后,对应的BLU执行规则会实时访问MOTService的已经定义好的存储过程。