BigTable 是google三架马车之一,英文原文地址https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf,中文翻译:http://dblab.xmu.edu.cn/post/google-bigtable/
BigTable是什么
Bigtable is a distributed storage system for managing structured data that is designed to scale to a very large size。
BigTable是一个分布式存储系统,解决大规模数据分布式存储、高性能、高可用,并且对比与MySQL分库分表来说,可伸缩性使得其运维要简单很多。BigTable存储是KV数据,放弃了SQL的结构化数据。
BigTable架构
![](https://img.haomeiwen.com/i6301972/6b06510c6dfeca2c.png)
如图,BigTable由四种组件组成:
- Chubby,分布式一致性组件,类比与etcd,负责分布式锁和目录服务
- Master,调度Tablet和调整Tablet Server负载
- Tablet Server,提供实际的存储在线服务
- 底层存储GFS
这个架构看起来还是比较简单的。
数据结构
![](https://img.haomeiwen.com/i6301972/0591cca78552ec8d.png)
BigTable存储是稀疏数据,首先它是一个KV数据结构,每一行的Key对应的value都是一组列,并且每一行的列可以不同。列可以分为列族,在一个例族中并不是每个列都有数据,所以被称为稀疏数据。
一行中的列可以存储不同时刻的值,每个列祖物理上存储在同一台服务器上。
这种数据结构,可伸缩采用的是自动可伸缩,数据先按照键一段一段的分区,当某个段数据越来越大的时候,就会将该段进行分裂,如果越来越小,就会和临进的段合并。
![](https://img.haomeiwen.com/i6301972/43bbe19b79232718.png)
数据中有一部分目录数据,这部分目录数据作为tablet存储起来,而不是存储在chbby中。当读取一个数据的时候,先到chubby中读取到Root Tablet的位置,然后访问Root Tablet去查找元数据table位置,然后访问元数据tablet找到数据所在的tablet位置,最后访问数据的tablet找到对应的数据。如上图所示,访问一条数据实际上访问了3次tablet数据。正式由于元数据存储在tablet中,所以元数据可以非常庞大,可存储的数据非常大。
小结
作为gogole三架马车之一,BigTable还是非常值得读一下的,它是一个分布式数据库的简单原型,学习了它,再理解其它分布式存储会触类旁通。
网友评论