数据结构
OceanBase数据分为基准数据和增量数据两个部分,基准数据分布在多台ChunkServer上,增量数据全部存放在一台UpdateServer上。 如下图所示,系统中有5个tablet,每个tablet有3个副本,所有的tablet分布到4台ChunkServer上。RootServer中维护了每个tablet所在的ChunkServer的位置信息,UpdateServer存储了这5个tablet的增量更新。
不考虑数据复制,基准数据的数据结构如下:
1> 每个表格按照主键组成一颗分布式B+树,主键由若干列组成;
2> 每个叶子节点包含表格一个前开后闭的主键范围(rk1,rk2]内的数据;
3> 每个叶子节点称为一个子表(tablet),包含一个或者多个SSTable;
4> 每个SSTable内部按主键范围有序划分为多个块(block)并内建块索引(block index);每个SSTable内部按主键范围有序划分为多个块(block)并内建块索引(block index);
5> 每个块的大小通常在4KB ~ 64KB之间并内建块内的行索引;每个块的大小通常在4KB ~ 64KB之间并内建块内的行索引;
6> 数据压缩以块为单位,压缩算法由用户并可随时变更;数据压缩以块为单位,压缩算法由用户并可随时变更;
7> 叶子节点可能合并或者分裂;叶子节点可能合并或者分裂;
8> 所有叶子节点基本上是均匀的,随机地分布在多台ChunkServer机器上;
9> 通常情况下每个叶子节点有2~ 3个副本;通常情况下每个叶子节点有2~3个副本;
10> 叶子节点时负载平衡和任务调度的基本单元; 叶子节点时负载平衡和任务调度的基本单元;
11> 支持bloom filter过滤;
增量数据的数据结构如下:
1> 增量数据按照时间从旧到新划分为多个版本;
2> 最新版本的数据为一颗内存中的B+树,称为Active Memtable;
3> 用户的更新操作写入Active Memtable,到达一定大小后,原有的Active Memtable将被冻结,并开启新的Active Memtable接受更新操作;
冻结的Memtable将以SSTable的形式转储到SSD中持久化;
4> 每个SSTable内部按主键范围有序划分为多个块并内建块索引,每个块的大小通常为4KB ~ 8KB并内建块内行索引,一般不压缩;
5> UpdateServer支持主备,增量数据通常为2个副本,每个副本支持RAID1存储;
原文链接:https://blog.csdn.net/qq_22162093/article/details/107614919
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




