java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2372|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66375

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

    发表于 2017-3-10 13:46:33 | 显示全部楼层 |阅读模式
    第10章 数据库功能
    ; T2 {1 V( L. S4 X! K+ }' f; J4 _数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
    $ c" p4 r* T9 C6 l对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL/ P! I, h* O  W& D$ n
    客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase+ k( D7 `/ _( w) C1 |8 H" E# r
    的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为5 X$ B, \5 ]7 |' J# F9 Q8 n
    OceanBase系统的内部调用。  e6 @5 G! v, J! e( E. B
    OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关3 A* G* @/ h) u( D: ]
    系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据
    ' e9 g  E& W* H# u$ U9 t: ?库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较- N/ N7 I! t6 u0 Z
    简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。. v8 Y7 F" G6 j
    OceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加
    6 d& t6 O; j% s; S, N3 `4 p锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase8 X4 g2 G& ^0 n- g) X7 Q9 A
    执行简单的SQL语句要高效得多。
    3 Y3 [; q1 ~( y8 m除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并" }* A; {; v! p7 d% N: }
    发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计3 L0 z% i0 q; V' i5 H! G
    算框架和列式存储来处理OLAP业务面临的大查询问题。" l2 |2 u/ y6 L, r& e
    最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝" E% @$ D6 w0 M6 k; o1 v, C& d7 }
    网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数. H0 k8 N% ~/ d8 @( D8 D
    据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化/ V! Z: f* s9 S- u
    后集成到OceanBase系统中。8 d3 @# S" t2 J" A4 I+ i
    10.1 整体结构
    7 o5 x1 V/ `. n5 i数据库功能层的整体结构如图10-1所示。( ]* Q: x4 v9 J% H( E, X
    图 10-1 数据库功能层整体结构3 m7 X: v! R! L
    用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给# t8 E5 I! ?0 n  Q+ d
    某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给6 F5 e* d4 D* B0 A% B1 R; ~
    MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    : x6 d. Q! x- o5 b3 V现)、预处理、并生成逻辑执行计划和物理执行计划。
    / U- m! d7 q  K9 }. x如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接+ j; r$ f% ~0 h& k
    着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算7 t( s& O& q) }# h
    SQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合+ Y3 R. K0 b/ b  m, V1 R
    这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返
    " \1 E$ w0 M# g) N9 K: ]回给客户端。( n8 g" I: f- @, o& _) v& l% H6 h
    如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,
      E- n, a7 j* ?# `# R: C  y接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-
    9 B" }6 [; v" `2 r4 u' U$ vSQL模块完成最终的写事务。这几个模块功能如下所示:. x0 A; G7 {' f" G) [
    ●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影
    , X1 k9 x. m4 N5 l/ J. }(projection)、过滤(filter)、排序(order by)、分组(group by)、分页' x. z$ N" \' E
    (limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描
    % ?: ^0 t0 Q" d6 t( d时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    % I0 E( p1 K. q2 Z+ @●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并
    $ z9 c" U- C& m) q发回放等。  A$ @9 D. M: |% l0 H
    ●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计
    6 p# ]. M0 f: A' T  T, T2 Q1 o划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理& u& g6 v# I  Z: F$ ^( Q
    操作符,包括联表(Join),子查询(subquery)等。
    $ k+ u) ]. @  ^2 O
    $ T2 O) D5 j5 F+ c0 I5 a! ^
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-12-22 13:59 , Processed in 0.103538 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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