BitTable

BigTable 是搭建在 GFS 之上的结构化数据的存储系统,其作用主要是作为分布式的 NoSQL。

在 GFS 和 Chubby 的基础上在工程中实现了 LSM-Tree。

数据结构

实际上就是 KV

Key:row+column+timestamp value:blob

因为需要支持不同的使用场景,所以将列作为查询的 key 的组成之一,以将较大的数据拆成多个小数据

table = tablets tablet = SSTables SSTable = sorted KVs

LSM-Tree 的主要思想是保存一系列在后台自动合并的多层 SSTables 和基于内存的 MemTable。 SSTables 会生成一些比较稀疏的索引,可以依此进行范围查找, 在查找之前想用 Bloom 过滤器过滤请求,防止不存在的键影响 LSM-Tree 的查找效率。 并且还能有不同的策略来确定 SSTables 被压缩和合并的顺序和时间,LevelDB 采用的是平坦压缩,HBase 使用的则是大小分层。 并且因为磁盘写入是连续的,所以 LSM-Tree 可以支持较高的写入吞吐量;读取方面因为有索引,并且 SSTable 内部是有序的,所以也不会很慢; 而更新和删除不太一样,因为落盘的 SSTable 是不能更新的,这个时候就可以在 MemTable 上进行更新和删除(标记),当 SSTables 要 Merge 的时候再实际落盘。

BigTable 细节

Bigtable 由三个组件组成:

  1. 客户端连接库
  2. one master server
  3. many tablet servers

table servers 可以自动被添加或删除;master 需要分配 tablets 到 tablet servers,保持负载均衡和 gfs 的 GC,并且维护行列新增的键。

每个 tablet server 管理 10 到 1000 个 tablets。

与大部分 single-master 类似,client 的数据传输不会通过 master,而是与 tablet servers 直接交流。

Bigtable cluster 包含很多 tables,每个 table 包含很多 tablets,每个 tablet 包括某行的所有数据。每个 table 最初只有一个 tablet,当其增长的时候,自动分裂成多个 multiple tablets,每个 tablet 大概 100-200MB。

tablets 的位置信息由一个 Chubby file 延伸到一个 Root Tablet,再到 MetaData Tablets,最后再指向 UserTables。

updatedupdated2024-04-302024-04-30