java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2163|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66101

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

    发表于 2017-3-10 13:46:33 | 显示全部楼层 |阅读模式
    第10章 数据库功能
    " v! j1 ~. F& p8 @3 r6 r4 ^* P* h$ j数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
    2 B0 q" I0 l" v( J; d* f对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL2 f5 f# ?. u1 p" \" e
    客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
    ' |( N1 b0 A, D3 W8 L, [2 I2 x的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为
    8 i2 ~9 G  b# q% M, ]  JOceanBase系统的内部调用。* Y$ S3 U+ u; l9 M9 A
    OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关
    9 |6 `3 R  @$ P% Z9 Q系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据9 r! n# I" v, O2 n
    库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较5 Z9 u# [) e2 q7 U! @/ {& ?
    简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。
    ; f0 R8 {  a4 W/ [+ t7 a# e5 N- i# ]OceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加9 Q0 h8 Q' R& i- R7 Z7 E7 A
    锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
    % s- f; E# G- z执行简单的SQL语句要高效得多。1 _0 @+ ?5 j% w% O
    除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并
    % s* u6 u1 t1 Z$ R, R发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计
    , O( h$ Y6 o" h! b# s& ]) y) a算框架和列式存储来处理OLAP业务面临的大查询问题。
    9 t. m: \$ O6 Q* W/ z) N8 Q最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    & {: M. U4 Q  Y$ l8 J- F) m# T' ~网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数/ p' a- ~) k- a
    据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化
    6 d. @% m# D( \+ o# M  L后集成到OceanBase系统中。/ J! a) i0 W* `* L
    10.1 整体结构6 V2 s0 F& M  E# ?
    数据库功能层的整体结构如图10-1所示。
    3 D4 ~6 C$ m6 \9 R2 i5 d图 10-1 数据库功能层整体结构) ~$ {; t0 U) {" B4 C
    用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给
    3 ?, S: X4 U4 Y+ H某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给
      {* a+ {* a6 i; e. qMS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    6 x! e1 A+ @: U4 C; t* c现)、预处理、并生成逻辑执行计划和物理执行计划。
    . L$ L6 R/ l* M& ]如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接1 Z: H; K3 ?1 E& e- c
    着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算
    3 ?4 p- k( r$ i' ZSQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合
    , V) `3 m4 z! {8 b1 _7 B这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返
    1 {" J1 T) y$ C. T) R( v( e回给客户端。
      r. o5 L& s1 m8 [5 S如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,
    % v" }  e- K& f0 p  L0 ?( B1 J接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-
    * ]* ]; Q2 ?& _7 p( _SQL模块完成最终的写事务。这几个模块功能如下所示:# ?1 K9 I4 c8 x. c; ]1 V6 w7 }
    ●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影" C, D' x, Y( \7 {! r: P* @6 Z: i
    (projection)、过滤(filter)、排序(order by)、分组(group by)、分页
    / _  B9 h1 f% ~6 L(limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描( D5 f! D  Y5 a' z- d5 r% s
    时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    ; K3 E8 _0 {9 a5 P●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并; O' D- u) y+ G0 U; M4 N3 ~
    发回放等。
    7 h+ C! E) C, R1 Z1 y; d●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计
      F8 g2 S3 [2 q& p  |划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理
    0 w9 }5 E7 n. M5 ?$ X  D! G3 T$ p操作符,包括联表(Join),子查询(subquery)等。! r0 b4 ^& i8 c# J. q) d6 q
    , q) ?4 P, R1 d3 T4 k7 x* U
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 11:20 , Processed in 0.095340 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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