java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2404|回复: 0

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

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

    [LV.Master]出神入化

    2040

    主题

    3698

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66476

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

    发表于 2017-3-10 13:46:33 | 显示全部楼层 |阅读模式
    第10章 数据库功能
    ' B. u9 P' \% X数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。
    8 o9 {# o+ V2 z对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL
    - |+ b$ r* W! |. t0 _: s+ H0 k3 b# J$ O. ~客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。OceanBase
    / p7 S) o1 M$ V  o& R的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为& o2 ]% W* q$ h% ?
    OceanBase系统的内部调用。$ ]1 O. U. y) c5 j- V( Y9 k6 I
    OceanBase定位为全功能的关系数据库,但这并不代表我们会同等对待所有的关9 u# Q$ n) f4 J* L0 W3 l
    系数据库功能。关系数据库系统中优化器是最为复杂的,这个问题困扰了关系数据
    ( ]9 X- H: x- q库几十年,更不可能是OceanBase的长项。因此,OceanBase支持的SQL语句一般比较
    8 Z* R8 ], [' `  P$ X简单,绝大部分为针对单张表格的操作,只有很少一部分操作涉及多张表格。8 u  H7 I7 p5 Q1 ?6 a/ B
    OceanBase内部将事务划分为只读事务和读写事务,只读事务执行过程中不需要加) p: h' L+ r, B$ C3 u
    锁,读写事务最终需要发给UpdateServer执行。相比传统的关系数据库,OceanBase
    ) t" C) i% Q. I  l1 l- X执行简单的SQL语句要高效得多。
    1 H6 h$ w+ a) U, Y! Y4 }5 K6 |9 J除了支持OLTP业务,OceanBase还能够支持OLAP业务。OLAP业务的查询请求并$ T) J& i2 i; ~) C) i% `9 P
    发数不会太高,但每次查询的数据量都非常大。为此,OceanBase专门设计了并行计
    * Q5 X2 ~* N: a" o9 C  T算框架和列式存储来处理OLAP业务面临的大查询问题。' p- q: i% f% z; J
    最后,OceanBase还针对实际业务的需求开发了很多特色功能,例如,用于淘宝
    $ ^  E) o4 f5 W' k网收藏夹的大表左连接功能,数据自动过期以及批量删除功能。这些功能在关系数
    - V$ @7 r6 ?! m据库中要么不支持,要么效率很低,不能满足业务的需求,我们将这些需求通用化/ Z$ ]# S( {8 P& ~; r% R, {) w
    后集成到OceanBase系统中。
    / l1 O7 R; Y: j- R- e10.1 整体结构4 F( G1 c7 p$ x3 R
    数据库功能层的整体结构如图10-1所示。" f8 n; p5 N6 @, u; H
    图 10-1 数据库功能层整体结构& a. h2 d; y) f- e9 u8 i; |" [
    用户可以通过兼容MySQL协议的客户端、JDBC/ODBC等方式将SQL请求发送给; G6 }4 p3 L# t% B9 R8 R( Z6 ^$ N( |
    某一台MergeServer,MergeServer的MySQL协议模块将解析出其中的SQL语句,并交给) `6 m: q) G8 {% j! ]0 M3 [8 p" \
    MS-SQL模块进行词法分析(采用GNU Flex实现)、语法分析(采用GNU Bison实
    3 I2 Z# E. I! o! X现)、预处理、并生成逻辑执行计划和物理执行计划。
    : d1 l' W2 j% |1 g如果是只读事务,MergeServer需要首先定位请求的数据所在的ChunkServer,接( x1 p& @$ v% Z# w  \1 y# X! c
    着往相应的ChunkServer发送SQL子请求,每个ChunkServer将调用CS-SQL模块计算
    & C# l/ q+ |7 S! h0 o4 HSQL子请求的结果,并将计算结果返回给MergeServer。最后,MergeServer需要整合7 B; j0 C+ k+ `  F: G
    这些子请求的返回结果,执行结果合并、联表、子查询等操作,得到最终结果并返
    " ^; b' G+ _6 K7 Y" B回给客户端。) P' s5 E  B! E( O; v
    如果是读写事务,MergeServer需要首先从ChunkServer中读取需要的基线数据,
    + J" d, ]$ o3 u) r0 w( l6 R接着将物理执行计划以及基线数据一起发送给UpdateServer,UpdateServer将调用UPS-+ s! q2 |' ^6 C5 M! D
    SQL模块完成最终的写事务。这几个模块功能如下所示:1 J" B  C0 [- `
    ●CS-SQL:实现针对单个子表的SQL查询,包括表格扫描(table scan)、投影" }! v7 h; B/ n; A
    (projection)、过滤(filter)、排序(order by)、分组(group by)、分页
    * ~- Y" W7 F: f, Z0 k" i(limit),支持表达式计算、聚集函数(count、sum、max、min等)。执行表格扫描  G) w3 r& x: K& h
    时,需要从UpdateServer读取修改增量,与本地的基线数据合并。& d7 {  D! h% x  ^3 P
    ●UPS-SQL:实现写事务,支持的功能包括多版本并发控制、操作日志多线程并' }' ?0 h- f( v$ X9 ?" _4 A9 O
    发回放等。4 c1 R$ o! _0 q8 Q: t' w( C: l
    ●MS-SQL:SQL语句解析,包括词法分析、语法分析、预处理、生成执行计/ F4 v* c+ e! X' o
    划,按照子表范围合并多个ChunkServer返回的部分结果,实现针对多个表格的物理" [1 ^( C* x; H# y
    操作符,包括联表(Join),子查询(subquery)等。4 l$ F# d' L  E( j, ^
    3 v% R+ Z5 t; \9 H  B
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-22 14:48 , Processed in 0.150937 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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