java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2359|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-3-10 13:46:33 | 显示全部楼层 |阅读模式
    第10章 数据库功能' V8 y% `( h2 D9 k" f1 |8 \4 P$ P
    数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
    7 |1 \1 r# [( f! ^. w* K( j7 }对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL: h* d8 P" f3 b; ^
    客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
    * {1 @( n5 {, I2 |! w的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为
      d# l- _! B7 {, u2 j  T5 ^' bOceanBase系统的内部调用。
    + q- D' E8 m5 i% T3 E* |$ A  ]OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关
    : i: q3 N9 t6 l系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据
    9 T- r* \5 X+ v* ^库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较
    7 `* F7 m6 l& b' Z1 k' P简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。
      W' ]# N# a6 {4 p1 jOceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加
    7 w9 O+ K% c. Z9 y$ `锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
    ) j; R& J% T# P# B2 o; e5 H" F执行简单的SQL语句要高效得多。8 V$ Y" P2 r2 S, b' v- P1 W
    除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并  u: G) r; F9 g* _' }' a
    发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计
    ( I0 d& ^: y3 b) |$ j2 j8 t算框架和列式存储来处理OLAP业务面临的大查询问题。! V1 ~0 H$ Z* L9 X
    最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    5 T) Z" G( j1 t9 |4 u网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数1 y. x  @; x3 F7 j7 K# P* f
    据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化
    / X& K( Y  `& K8 t5 I3 x后集成到OceanBase系统中。
    9 Q: e6 b* Q+ p+ B% i! \) }% P10.1 整体结构
    ; k( w0 ^5 l. V) R数据库功能层的整体结构如图10-1所示。
    . j4 `% V% g. X7 r图 10-1 数据库功能层整体结构8 z; X1 d3 S9 a# A  o3 j
    用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给
    2 B+ `" P2 f  Z5 R: h; a; P某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给
    8 b1 `+ l. M* a: M& j2 i$ @MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    # @+ M" q: G4 n: U( h5 x% H现)、预处理、并生成逻辑执行计划和物理执行计划。
    8 t8 F8 ^6 I$ ?: \如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接
    1 t6 t* E6 e* P着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算. `, T* ~# [% U' V5 g# Y
    SQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合  x6 J. k  K( s" R# d' D3 h; a0 k
    这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返
    % s: y$ X$ r8 \" u( z回给客户端。
    ( J8 T/ M+ H" b8 v6 O# g6 o5 X) Q如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,
    9 Q( I8 o) Y" \; F7 z) j/ ?; u; R接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-
    ! ?% e4 r9 e: eSQL模块完成最终的写事务。这几个模块功能如下所示:: X1 T5 I. Q& D" s
    ●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影$ o$ ~% @7 \2 f% {* p
    (projection)、过滤(filter)、排序(order by)、分组(group by)、分页0 x6 i. u6 f4 [
    (limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描
    . M( z+ c  t( a7 q5 O- E时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    7 a9 m. ]0 E3 X" }# v●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并
    / [( w0 T; O, }& B发回放等。
      E2 c* P- ?' z: s0 j●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计
    5 ^" Y' o% C2 r0 o5 o划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理: m9 ?- I  h( l% ~, |
    操作符,包括联表(Join),子查询(subquery)等。" r7 S1 ?9 Q: ^
    8 S8 {  m7 S3 D* c+ V
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-11-21 20:52 , Processed in 0.218563 second(s), 29 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表