您现在的位置是:首页 > 文章详情

浅谈OceanBase数据结构

日期:2018-07-14点击:496

OceanBase数据分为基线数据和增量数据两个部分,基线数据分布在多台ChunkServer上,增量数据全部存放在一台UpdateServer上。如下图所示,系统中有5个子表,每个子表有3个副本,所有的子表分布到4台ChunkServer 上。RootSever中维护了每个子表所在的ChunkServer的位置信息,UpdateServer存储了这5个子表的增量更新。
OceanBase数据结构

不考虑数据复制,各模块的数据结构如下:

基线数据的数据结构

  • 每个表格按照主键组成一棵分布式B+树,主键由若干列组成;
  • 每个叶子节点包含表格一个前开后闭的主键范围(rk1,rk2]内的数据;
  • 每个叶子节点称为一个子表(tablet),包含一个或者多个SSTable;
  • 每个SSTable内部按主键范围有序划分为多个块(block)并内建块索引(block index);
  • 每个块的大小通常在4~64KB之间并内建块内的行索引;
  • 数据压缩以块为单位,压缩算法由用户指定并可随时变更;
  • 叶子节点可能合并或者分裂;
  • 所有叶子节点基本上是均匀的,随机地分布在多台ChunkServer机器上;
  • 通常情况下每个叶子节点有2-3个副本;
  • 叶子节点是负载平衡和任务调度的基本单元;
  • 支持布隆过滤器的过滤。

增量数据的数据结构

  • 增量数据按照时间从旧到新划分为多个版本;
  • 最新版本的数据为一棵内存中的B+树,称为活跃MemTable;
  • 用户的修改操作写入活跃MemTable,到达一定大小后,原有的活跃MemTable将被冻结,并开启新的活跃MemTable接受修改操作;
  • 冻结的MemTable 将以SSTable的形式转储到SSD中持久化;
  • 每个5STable内部按主键范围有序划分为多个块并内建块索引,每个块的大小通常为4~8KB并内建块内行索引,一般不压缩;
  • UpldateScver支持主备,增量数据通常为2个副本,每个副本支持RAID1存储。
原文链接:https://yq.aliyun.com/articles/610455
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章