javazx 发表于 2017-3-10 13:46:33

《大规模分布式存储系统》第10章 数据库功能【10.1】

第10章 数据库功能
数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL
客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为
OceanBase系统的内部调用。
OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关
系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据
库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较
简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。
OceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加
锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
执行简单的SQL语句要高效得多。
除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并
发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计
算框架和列式存储来处理OLAP业务面临的大查询问题。
最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数
据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化
后集成到OceanBase系统中。
10.1 整体结构
数据库功能层的整体结构如图10-1所示。
图 10-1 数据库功能层整体结构
用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给
某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给
MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
现)、预处理、并生成逻辑执行计划和物理执行计划。
如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接
着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算
SQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合
这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返
回给客户端。
如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,
接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-
SQL模块完成最终的写事务。这几个模块功能如下所示:
●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影
(projection)、过滤(filter)、排序(order by)、分组(group by)、分页
(limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描
时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并
发回放等。
●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计
划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理
操作符,包括联表(Join),子查询(subquery)等。

页: [1]
查看完整版本: 《大规模分布式存储系统》第10章 数据库功能【10.1】