Big Table

2021-03-21  本文已影响0人  谭英智

Big table是一个稀疏、分布式、持久化的key/value数据库

它通过rowid、col和timestamp来定位一条记录

(row:string, column:string, time:int64) → string

value是一个没有类型的字节数组

行row key

big table通过row key的字典序来组织数据,数据被分成一个个小的tablet,每个tablet管理自己的row key对应的数据。

当客户端发起一个通过row key的查询,客户端有可能需要先查询row key对应的tablet服务器,然后在这个tablet中查找对应的value

列族

每个table有列,列族是列的组,不同列族的数据被存储在不同的文件。

时间戳

每个value都有一个时间戳,big table可以通过配置仅保留n个最近的记录。

一般来说获取value,会取时间戳最大的一条记录

时间戳可以通过tablet服务器或者客户端来设置。如果通过客户端来设置,有可能会带来设置的时间戳小于最大的时间戳,导致设置无效

组件

SSTable

SSTable是一个持久化、排序的块,存储在GFS上,保存着big table的key/value的数据。SSTable为了加快检索,会在块的结尾保存着一个对块的索引,当发生检索时,先加载索引,判断key是否在块内,如果存在,再加载整个SSTable来查询。

Chubby

类似于Zookeeper的一个高可用、持久化的一致性分布式锁服务。

Chubby使用Paxos算法来保证数据的一致性。

big table使用Chubby实现以下功能:

如果Chubby变得不可用

big table也会变得不可用

实现细节

Master服务

定位Tablet位置

bt-tabletloc

Tablet的分配

Tablet服务

bt-tabletser

使用LSM的结构来组织数据,并提供服务。

在写入LSM的内存数据时,会同时写入log。一旦机器崩溃,可以使用log来恢复内存中的数据

LRU

tablet中保存着LRU cache,来提高读性能

布隆过滤器

tablet的内存中,保持着每个SSTable的布隆过滤器,可以快速的判断key是否在SSTable中

Copy-on-write

对memtable进行读写时,为了减少读的冲突,使用copy-on-write的技术来允许读写操作并行执行

上一篇 下一篇

猜你喜欢

热点阅读