java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2427|回复: 0

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

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

    [LV.Master]出神入化

    2062

    主题

    3720

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66592

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

    发表于 2017-3-10 13:46:33 | 显示全部楼层 |阅读模式
    第10章 数据库功能$ T/ X- s3 [+ w' w; k  |2 V
    数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。) ]1 C9 s0 F4 D
    对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL( G& z5 a, a, @4 [
    客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
    " d1 \  M7 q) A的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为. {! o  Y+ W: v1 I- j0 Q1 l
    OceanBase系统的内部调用。
    5 {- x2 H* R! }5 N  V% wOceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关
    ( _5 a/ c% p. d  D1 l; B* G系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据7 Z; t+ P8 o; s& b7 C& s
    库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较7 J; w# @/ ^0 m0 C* K
    简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。' d$ H* o# N/ ?; e" q/ O" h! |7 y* n
    OceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加! S# [9 t& A6 W6 Q0 \; {4 h$ m
    锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
    " G( E& |+ {4 V) k( Z& O; P7 r执行简单的SQL语句要高效得多。
    2 t) D0 k% i  F: a9 a+ \除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并
    2 C6 K1 L. C# m$ o% g发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计& M5 B' F( l8 ~- z. c
    算框架和列式存储来处理OLAP业务面临的大查询问题。
    # s; H5 q" o4 I; i  e# z$ I" h" k. R3 P最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    ' L' m, _. w. }, h网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数% S" G5 c! {( C7 ?
    据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化. J0 s6 J' M- t+ d8 y
    后集成到OceanBase系统中。
    ' J) O) s- _4 y, x; F1 C; }% l10.1 整体结构
    8 {5 D- C+ j/ \, P" J* u数据库功能层的整体结构如图10-1所示。
    ; T; L4 b4 I5 }* D) _/ b图 10-1 数据库功能层整体结构
    2 @% b9 v! z% p4 P) h用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给
    # F' V. S- P: W" O某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给" E# e7 `9 Q( ~" B- ~# C% _
    MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实# d+ J) d0 \( D
    现)、预处理、并生成逻辑执行计划和物理执行计划。
    % k7 H$ ?/ n' g( p, m& T! ^) I如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接! M4 S& O4 n, ~
    着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算
    & E. w! I( O; M2 j9 ~0 y: LSQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合
    7 B. l, V0 v3 k# g" W这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返  c- |+ o4 f  x
    回给客户端。$ l% U/ }% q* l/ a' v* Q0 u" x
    如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,) R9 r# F# L6 l: E
    接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-: |2 j, B5 g* l, ~5 H! f
    SQL模块完成最终的写事务。这几个模块功能如下所示:# p4 |  w9 n  u1 T( E) J
    ●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影- Q# z  ]6 w3 D
    (projection)、过滤(filter)、排序(order by)、分组(group by)、分页
    % n1 ~& P+ t7 i" `! a" o# W& c(limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描7 Y+ h8 L  _3 W0 g$ f6 H6 @2 z% v
    时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    4 u% N- M0 v, M+ _4 a) q, Q, o! B- v●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并
    : s! s# C# Z# v6 J* F发回放等。! U+ J* _' W' K" U  i6 h
    ●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计
    " F4 w; G) c8 T& s5 x划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理
    . H  \; ?9 q# E9 R( A7 o# G$ E" E操作符,包括联表(Join),子查询(subquery)等。
    - e! v6 M6 k# T; A
    , y* X8 I7 }1 M* [% @) m& h# ~
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-23 13:02 , Processed in 0.247933 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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