java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2468|回复: 0

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

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

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

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

    发表于 2017-3-10 13:46:33 | 显示全部楼层 |阅读模式
    第10章 数据库功能# }1 P, J) x3 g! j! R6 S! f8 v
    数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
    " [; M" m2 n" o. M" v. ]对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL
    / U0 E- k7 u" X  r& j# I$ h& Z. n客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase, _6 U$ O" [2 V2 \! g
    的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为
    1 Y$ X, k$ p: g9 `. {OceanBase系统的内部调用。7 s7 x  ^" f) W2 G% J; Z: p  L
    OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关
    + D  c. \4 s9 |- t7 M. l& a. r系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据
    6 b# {) G# F5 f库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较% E4 T# H, Z& I- S$ {
    简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。
    4 `) P1 k9 b1 R6 xOceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加
    - d3 K6 X/ x$ p1 G锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase3 y) B& k! ?4 l% s+ j
    执行简单的SQL语句要高效得多。5 `- X, K+ v$ Z; l% x, G6 I# d/ ~
    除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并
      Y4 f- ?" B- D8 s. \6 s8 u发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计
    3 I7 p' k5 [8 Z算框架和列式存储来处理OLAP业务面临的大查询问题。
    8 p8 `9 p! a8 u* i. x, d# ?& y5 E, a最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    : v0 S+ g( u' J网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数
    . a) q( D8 C% D据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化
    6 ~* r* F; i. [0 a/ R9 L, \& }后集成到OceanBase系统中。
    . t+ p4 z5 D# k, T10.1 整体结构( ~$ T- a4 u' A$ s' m( w5 z+ C
    数据库功能层的整体结构如图10-1所示。6 n6 x- b+ \9 q  u! u0 K
    图 10-1 数据库功能层整体结构
    & b5 n0 v% ?: b' \用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给
    $ E/ Y+ ~* m% V: h6 H% t+ q某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给  L/ C& N' a/ @& w+ m2 K
    MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    0 M( e2 Z  `7 c  }# o现)、预处理、并生成逻辑执行计划和物理执行计划。5 e6 Z$ n3 L* p* n% Y. `1 ^
    如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接
    6 X  M9 v3 z5 r* y& s. ^着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算
    & l9 m5 E% b& R! F# VSQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合
    ( b- k! s% m$ \% d) k& |- b这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返
    / S1 G) }; O0 R! P+ G; R回给客户端。* _( _. l, n! h) t
    如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,- @( P* V: x% D4 [8 V
    接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-
    / W3 W8 R& p1 e% QSQL模块完成最终的写事务。这几个模块功能如下所示:& b7 z2 N4 \- N& |' B* w
    ●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影% `4 F. g# T2 y# o) m
    (projection)、过滤(filter)、排序(order by)、分组(group by)、分页3 c; Q1 G2 D5 m
    (limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描. i. r6 I. [0 Z" E9 i* ?+ W6 ]4 E
    时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    9 x0 F  L  S0 I  n9 v) b" C●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并/ B+ \- K1 H- I( o3 y4 z
    发回放等。2 j6 n* |1 K: D( ]2 z" p
    ●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计. o' s. ]6 Z$ Q) u+ H  Q7 S
    划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理1 ?7 c$ o! ?! b1 T3 w3 k% t
    操作符,包括联表(Join),子查询(subquery)等。
    7 c; T& K- w2 _# |* _+ i1 k
    " M7 j' Q( d2 W0 ]; L* e
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-1 14:06 , Processed in 0.195185 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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