QianBase V1作为易鲸捷三大数据库产品之一,主打HTAP能力。这是易鲸捷公司成立之初第一个产品,同时也是国内第一家提出HTAP概念并付诸行动的产品。早在2015年,易鲸捷便推出第一代原生HTAP数据库,仅比Gartner提出的HTAP概念晚一年。
技术角度而言,QianBase V1共三层结构,分为应用连接层、计算引擎层、存储引擎层。如下所示:
第一层是应用程序所在的客户端服务层。应用程序可以由用户编写或通过第三方ISV工具/解决方案实现。使用QianBase提供的Windows或Linux客户端驱动、通过标准ODBC/JDBC接口访问QianBase数据库服务层。QianBase支持type 2 JDBC、type 4 JDBC和ADO.NET驱动程序。根据特定的需求(响应时间、连接数量、安全要求和其它因素),选择合适的驱动程序类型。
第二层是SQL数据库引擎层。该层包括所有QianBase服务,封装了所有管理QianBase对象和高效执行SQL数据库请求的服务。服务包括连接管理、SQL语句编译和创建最优执行计划、SQL执行(串行和并行)、事务管理和工作负载管理。
第三层是存储引擎层,包括QianBase使用的标准Hadoop服务(HDFS和Zookeeper)。QianBase对象存储在原生Hadoop数据库结构中,包括以下格式:
- HBase,提供Big Table或wide-column key-value,数据模型。
- 缓存文本文件,例如,字符分隔值(csv)或日志数据。
- 键值序列文件。
QianBase处理从应用程序传来的SQL请求,并将这些请求透明地转换成底层数据格式所需的原生接口调用。QianBase在HBase之上提供了关系型schema抽象,所以,QianBase能通过使用熟悉的DDL/DML语法(对象命名、列定义和数据类型支持)支持传统关系型数据库对象(表、视图、二级索引)。另外,QianBase还支持将HBase和Hive的原生表作为QianBase的外表。
按照如下流程,处理连接请求与SQL执行
- 应用程序或第三方客户端软件开始。Windows或Linux客户端通过ODBC/JDBC/ADO.NET驱动程序访问QianBase。
- 当客户端请求一个连接时,QianBase的DCS(Database Connection Services)处理请求并向QianBase Master SQL进程分配连接。为了平衡负载,QianBase使用Zookeeper协调并分配跨集群的连接服务,并确保一旦出现Master进程失败,其它客户端能立刻重新连接。
- Master进程协调执行来自客户端应用程序的SQL语句。
- Master调用COP(Compiler and Optimizer Process)解析和编译SQL语句,并生成最优执行计划。
- 如果最优执行计划调用并行执行,则Master将工作平均地分配给ESP(Executor Server Processes),处理的结果将传回至Master进行合并。复杂查询(例如,大型n-way联合或聚合)可能会调用多个ESP层。如果生成串行计划, 为了提高性能,Master将直接调用存储引擎服务。
- 对于分布式事务保护而言,QianBase将调用DTM(Distributed Transaction Manager)服务,确保集群事务的ACID一致性。通过使用HBase的协处理器管理事务上下文、检测事务冲突、写入事务数据和执行事务恢复与HBase进行深度集成,DTM管理分布在多个Region Server上的事务。
- 最后,为了完成I/O请求,Master或ESP进程使用原生API调用vanilla存储引擎和HDFS服务。QianBase使用HBase的过滤器或协处理器,尽可能将SQL执行下推至存储引擎层。
上述架构是简化模型,更复杂架构如下所示:

该架构描述了多节点情况下,QianBase V1的处理流程:
- 在应用连接数据库时,由DcsMaster进程分配应用连向哪个具体的MXOSRVR进程(DcsMaster配置了高可用机制,如架构所示)。
- 一旦应用与MXOSRVR进程建立连接之后,DcsMaster将不参与后续工作。简单而言,DcsMaster属于“引入者”,MXOSRVR属于“接待者”。应用的后续相关工作,由所分配的MXOSRVR进程负责。
- 此处“MXOSRVR”进程,即为上一张架构图中“Master”进程。
- 如果应用端需要MXOSRVR执行的SQL不复杂,那MXOSRVR直接执行并反馈给应用端(上图中虚线1);如果SQL复杂,MXOSRVR会在每台服务器启动ESP进程,并行执行(上图中虚线2)。优化器来决定是否需要启动ESP,也可人为进行干预。
- 事务管理,由DTM进程负责,该进程每个节点一个,使用两阶段递交协议处理分布式事务。