java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2333|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66101

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

    发表于 2017-3-10 13:51:02 | 显示全部楼层 |阅读模式
    10.5 特色功能
    ; B2 Y3 w4 ^  v* [) s虽然OceanBase是一个通用的分布式关系数据库,然而,在阿里巴巴集团落地过: Z" \: X6 i$ r$ }% [" d* l
    程中,为了满足业务的需求,也实现了一些特色功能。这些功能在互联网应用中很
    4 J* D, a- n# P% O" j- g5 P& [8 q% [常见,然而,传统的关系数据库往往实现得比较低效。本节介绍其中两个具有代表
    . r8 w2 f- w, o! [3 K' u4 O' r3 T. J1 D性的功能,分别为大表左连接以及数据过期与批量删除。: R6 h- R* N5 ?
    10.5.1 大表左连接! A2 L& p4 F: `* V$ U1 N
    大表左连接需求来源于淘宝收藏夹业务。简单来讲,收藏夹业务包含两张表
    : @! |7 H; K' I: d0 H6 R: i" |格:收藏表collect_info以及商品表collect_item,其中,collect_info表存储了用户的收4 [$ e4 G' \$ c
    藏信息,比如收藏时间、标签等,collect_item存储了用户收藏的商品或者店铺的信
    2 m4 C& u) Z" A7 ?5 Z! C8 ?) X息,包括价格、人气等。collect_info的数据条目达到100亿条,collect_item的数据条
    . d9 m7 q4 G. q目接近10亿条,每个用户平均收藏了50~100个商品或者店铺。用户可以按照收藏时4 T+ b% D5 f6 b9 F
    间浏览收藏项,也可以对收藏项按照价格、人气排序。
    . U$ s: u! U/ Y自然想到的做法是直接采用关系数据库多表连接操作实现,即根据collect_info中
    * d9 X8 p; c1 S5 U# R/ _. x存储的商品编号(item_id),实时地从商品表读取商品的价格、人气等信息。然
    ! i9 N) C/ P7 Y7 M+ o! w而,商品表数据量太大,需要分库分表后分布到多台数据库服务器,即使是同一个0 d. U2 M/ P' _" \/ t7 B: @/ \9 e
    用户收藏的商品也会被打散到多台服务器。某些用户收藏了几千个商品或者店铺,
    3 |8 Y' |& v6 d8 w如果需要从很多台服务器读取几千条数据,整体延时是不可接受的,系统的并发能" T( ~0 `* X+ @0 ?' T. A  T
    力也将受限。6 W! ?' C5 h* ~2 Y# r, {+ V0 E
    另外一种常见的做法是做冗余,即在collect_info表中冗余商品的价格、人气等信
    # w9 q; F! M. t- i( t* Z/ A. I' ?息,读取时就不需要读取collect_item表了。然而,热门商品可能被数十万个用户收
    , r$ x; v7 @( d0 U" x4 u藏,每次价格、人气发生变化时都需要修改数十万个用户的收藏条目。显然,这是, V2 N  Z* z' {: q. k6 }9 g1 N
    不可接受的。4 I) G7 q2 H1 w- [/ n# S) y, D0 L
    这个问题本质上是一个大表左连接(Left Join)的问题,连接列为item_id,即右
    ) @, d  b3 q" ^5 M- ]9 ~- R+ H/ g& Z表(商品表)的主键。对于这个问题,OceanBase的做法是在collect_info的基线数据# v# ?, x0 v4 q- v% A& r% b
    中冗余collect_item信息,修改增量中将collect_info和collect_item两张表格分开存储。
    3 d2 l0 T- ^/ O/ U商品价格、人气变化信息只需要记录在UpdateServer的修改增量中,读取操作步骤如
    6 W( c* \# ?2 h) S( \下:8 p' O& W2 z) k* r! l" i2 Y
    1)从ChunkServer读取collect_info表格的基线数据(冗余了collect_item信息)。! R6 `: Z7 s! x, M( A- J. R' H; ?
    2)从UpdateServer读取collect_info表格的修改增量,并融合到第1)步的结果9 y: ~; H5 ^: z" J5 C& N
    中。# {* }9 J' ?+ M6 ~: P
    3)从UpdateServer读取collect_item表格中每个收藏商品的修改增量,并融合到
    : u: |2 T* `/ h! }' f1 z4 l7 V第2)步的结果中。
      @2 O& d6 [( w; z6 P( v) F4)对第3)步生成的结果执行排序(按照人气、价格等),分页等操作并返回
    . Z. d1 j. I7 Z( W( u, T6 U给客户端。% o" O; g- x& ^. h8 D1 Y
    OceanBase的实现方式得益于每天业务低峰期进行的每日合并操作。每日合并$ ?3 ~7 `! d% v' g+ f  t: B) a2 m
    时,ChunkServer会将UpdateServer上collect_info和collect_item表格中的修改增量融合
    8 Z. {1 j$ i( y/ [到collect_info表格的基线数据中,生成新的基线数据。因此,collect_info和
    ) V: d1 t2 w4 p$ w8 dcollect_item的数据量不至于太大,从而能够存放到单台机器的内存中提供高效查询! c8 N1 v6 O7 p: C3 X7 m  D8 w$ S# L- b
    服务。
    & d1 @/ s; x# o6 x* b: \10.5.2 数据过期与批量删除
    0 h# }4 t. |* i- }9 v很多业务只需要存储一段时间,比如三个月或者半年的数据,更早之前的数据6 F8 R& h# S2 j# e1 B' q+ w8 ~( ~) ]
    可以被丢弃或者转移到历史库从而节省存储成本。OceanBase支持数据自动过期功
    ( y9 m9 o( t+ O+ Y, H! w& S能。
    % G3 @( t' F6 Q# z. ~4 W* e* oOceanBase线上每个表格都包含创建时间(gmt_create)和修改时间$ q/ J2 `2 ]9 w
    (gmt_modified)列。使用者可以设置自动过期规则,比如只保留创建时间或修改时  O+ I8 g2 g+ \% }% V9 f
    间不晚于某个时间点的数据行,读取操作会根据规则过滤这些失效的数据行,每日
    , m7 f+ @- K# d, V; b合并时这些数据行会被物理删除。
    ) F, G2 Z7 `& w5 j+ K批量删除需求来源于OLAP业务。这些业务往往每天导入一批数据,由于业务逻
    % w# V  M- G5 ^' F; R辑复杂,上游系统很可能出错,导致某一天导入的数据出现问题,需要将这部分出
    ( E1 l. Q3 P# v/ e5 H2 S! @# U错的数据删除掉。由于导入的数据量很大,一条一条删除其中的每行数据是不现实: ?/ x' t6 P6 @
    的。因此,OceanBase实现了批量删除功能,具体做法和数据自动过期功能类似,使
    ! R0 l  O! }" o: p& @, b* a( W用者可以增加一个删除规则,比如删除创建时间在某个时间段的数据行,以后所有- _$ ~: e: g3 M  \2 q2 J) `) F
    的读操作都会自动过滤这些出错的数据行,每日合并时这些出错的数据行会被物理
    ! O; c' S* t3 I7 d. r5 P# _删除。
    5 l# h3 |) L4 u. R: y
    ; }- t5 s! y! T) m( O: ^2 y* f: s, ~5 I: G; a) s7 u0 M' }
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 10:16 , Processed in 0.189757 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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