java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2469|回复: 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章 数据库功能( \" u! `9 B: p
    数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。8 @) o) V; C# k% o% y, H
    对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL
    # p( E8 Z% y0 G客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
    5 H6 @" \) H. N$ W: Y. t; A# N的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为' ?. [& M! H! P6 `
    OceanBase系统的内部调用。  q# A- \3 O4 ]' H) M
    OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关
    & {5 z; a" ?+ P2 F4 E" G系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据0 c; L: {* B5 ~2 W# ^- k6 X
    库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较0 A1 ^& L: [2 I' p  A
    简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。% i+ j2 T0 g" C1 c
    OceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加' x  q' g9 c) M7 @
    锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
    ' Z6 _/ l7 S$ `( F% C9 T0 |8 D# x执行简单的SQL语句要高效得多。: }- y& M' D# J# T, y( S# t
    除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并. H7 S/ U, n: ~3 T6 e3 P
    发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计
    ) P. D- v' r5 M- P1 f( ]算框架和列式存储来处理OLAP业务面临的大查询问题。8 R6 l% z0 X  F# u  G  B
    最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    ; m. a  \2 a+ D. q5 p& Z0 U网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数5 N2 o! h% w0 o1 J7 K- _! U* E& l( T; D( [
    据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化
    , U% f) i0 ^- v后集成到OceanBase系统中。7 q0 z! ^: V9 e/ b" Y( \
    10.1 整体结构' ~  p1 ?1 x& G; H8 W
    数据库功能层的整体结构如图10-1所示。
    " C7 \  w! `5 a: Y7 V8 m( }图 10-1 数据库功能层整体结构6 R% ]# J3 [! U# {3 P/ ]8 P
    用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给  n2 `9 G% e- N( j0 Z& W
    某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给
    . T7 ~. F+ u9 \4 N0 Z- ?MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    ! x  ?& S. O0 g$ M- A现)、预处理、并生成逻辑执行计划和物理执行计划。* Z* z  [9 K2 X! Y
    如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接
    & i- H. i- r/ S1 O着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算
    ) v" m5 v# y6 t5 y( K) a, @SQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合$ J! i' s) y+ U4 h# i8 @! m7 O
    这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返, Q% P/ x: W; }- P
    回给客户端。+ I0 t* V# U, _  d
    如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,: }# {3 w( r, R% \# X8 W+ `
    接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-7 B) B) \' s4 P
    SQL模块完成最终的写事务。这几个模块功能如下所示:
    5 k' D3 M( m* j8 X●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影
    2 \3 W! s! t; c! t8 v: W2 B# g(projection)、过滤(filter)、排序(order by)、分组(group by)、分页8 C) L# u, Q; Y1 h, o* o: _) A
    (limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描
    2 F# a3 \; k& z' V. h时,需要从UpdateServer读取修改增量,与本地的基线数据合并。
    * O: U/ e" o# Q2 V+ B: F●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并
    : T  c! m7 ?# t! ?发回放等。# }, h% t- P8 n8 O. W
    ●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计1 J5 k: `+ w/ t+ q9 D
    划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理2 {) \* H4 {4 v7 Q5 T2 U" P; F4 T  }
    操作符,包括联表(Join),子查询(subquery)等。$ r2 `! R# ?+ |8 N8 f
    0 X+ C4 p( }6 _9 H& k  A
    回复

    使用道具 举报

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

    本版积分规则

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

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

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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