java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2358|回复: 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章 数据库功能8 c- T) W% T& r+ E1 W
    数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
    ' Q4 N9 Z* `" Q) F对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL
    . ~( X; `1 T& F# J* g* b+ w客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
    7 I6 {  S  b) |; {8 S$ y的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为4 `' N# Q& e1 c9 K
    OceanBase系统的内部调用。
    1 r/ u0 Q2 e( oOceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关3 Y1 J( d- ^: w" J6 t
    系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据
    8 s- _: A, W1 T" h库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较3 A: P* |3 W5 I  Z1 m; p0 e) f3 ?6 h
    简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。
    * U+ Z( ~' Z6 G1 eOceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加
    . i" n; y& L* B7 D锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
    * c1 q4 P* e8 J0 s3 l0 `) W执行简单的SQL语句要高效得多。4 s) Y9 a1 y: d8 [  t
    除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并3 t$ f$ {; c8 g' n. k4 L; Q
    发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计0 ^' A: }( q% W
    算框架和列式存储来处理OLAP业务面临的大查询问题。
    ' i0 ^) N" {5 A最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    - S  m+ v* F$ Q1 N( s4 |: b- v0 v2 H网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数6 z. ^8 z. }) R8 O- G# `
    据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化5 S' L, [% V) ?6 l# m' e1 }4 r8 ]
    后集成到OceanBase系统中。- p9 P* p  H: |% `
    10.1 整体结构
    & {) j# V  M& j) D7 N; V  S数据库功能层的整体结构如图10-1所示。$ v2 V" J- N" {+ V, v
    图 10-1 数据库功能层整体结构2 [/ @- l# B8 l* Q" @* o) j) X
    用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给
    4 m) \& j- N$ t/ K8 R某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给& I0 m# Q6 v$ O/ I3 _' m& r
    MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    ! m( ]' I, a6 k: Y1 ~现)、预处理、并生成逻辑执行计划和物理执行计划。2 I5 I5 u) h: R# O/ |+ @6 [
    如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接+ D& f4 s. C6 r" m4 a, ^1 v
    着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算6 L/ U  {3 f0 e7 n
    SQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合3 L+ U; }% @  T1 l
    这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返$ h6 x. F4 k. G! t+ B' B
    回给客户端。
    ) f: K5 B3 W- v# v- q8 c! U: T如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,
    2 o0 n3 Z% T( M; j+ ^1 }' q接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-, v+ ]* v$ ]8 U( M
    SQL模块完成最终的写事务。这几个模块功能如下所示:
    # u" g$ r, d! G" j* I●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影3 H9 m. c6 n5 C9 ~
    (projection)、过滤(filter)、排序(order by)、分组(group by)、分页
    # i* M- b2 s/ a, M(limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描$ W/ K/ ^) X- r& C4 n$ K! e5 ~
    时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    , n* W, s) x' h( K. m●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并
    . N5 p3 l* f8 l. q4 ^+ O发回放等。
    ! {* \2 f5 S$ [' w. A$ d  l●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计- K' L) j3 @- E/ q
    划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理  q% d. _/ Z. |, w: I1 w9 I
    操作符,包括联表(Join),子查询(subquery)等。
    8 ~5 ^; ], H2 ], J% B: I: w/ ~& c6 ~! S1 C$ u' ^7 ~
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 20:46 , Processed in 0.159120 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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