Google论文之Bigtable
1. 摘要
Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级得数据。
2. 介绍
Bigtable已经实现了下面的几个目标: 适用性广泛、可扩展、高性能和高可用性。
Bigtable不支持完整的关系数据模式。Bigtable将存储的数据都视为字符串。
Bigtable为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式,用户也可以自己推测底层存储数据的位置相关性。最后,可以通过Bigtable的模式参数来控制数据是存放在内存中还是硬盘上。
3. 数据模型
Bigtable是一个稀疏的,分布式的,持久化存储的多维度排序Map,Map的key是行关键字,列关键字以及时间戳组成,Map的value是一个未经解析的字节数组。
3.1行
表中的行关键字可以是任意的字符串,对于同一个行关键字的读或者写都是原子的,Bigtable通过行关键字的字典顺序来组织数据。表中的每一行都可以动态分区,每个分区叫做“Tablet”,Tablet是数据分布和负载均衡调整的最小单位。
3.2列族
列关键字组成的集合叫做列族,列族是访问控制的基本单元,存放在同一列族下的数据通常都属于同一类型,列族应该不易太多,并且不常改变。f访问控制,磁盘和内存使用统计都是在列族层面上进行的。
3.3时间戳
在Bigtable中,表的每一个数据项都可以包含同一份数据的不同版本,不同版本的数据通过时间戳来索引。时间戳的类型是64位整数
4. Bigtable构件
Bigtable是构建在其他的几个google基础构件之上的,Bigtable使用GFS存储日志文件和数据文件,Bigtable依赖集群管理系统来调度任务,管理共享机器上的资源,处理机器的故障,以及监视机器的状态。Bigtable内部存储数据的文件是Google SSTable格式的。SSTable是一个持久化的,排序的,不可更改的Map结构。Bigtable还依赖一个高可用的,序列化的分布式锁服务组件,叫做Chubby。
5. 介绍
Bigtable 包括了三个主要的组件:链接到客户程序中的库、一个 Master 服务器和多个 Tablet 服务器。针对系统工作负载的变化情况,BigTable 可以动态的向集群中添加(或者删除)Tablet 服务器。
Master 服务器主要负责以下工作:为 Tablet 服务器分配 Tablets、检测新加入的或者过期失效的 Table 服务器、对 Tablet 服务器进行负载均衡、以及对保存在 GFS 上的文件进行垃圾收集。除此之外,它还处理对模式的相关修改操作,例如建立表和列族。
每个 Tablet 服务器都管理一个 Tablet 的集合(通常每个服务器有大约数十个至上千个 Tablet)。每个 Tablet服务器负责处理它所加载的 Tablet 的读写操作,以及在 Tablets 过大时,对其进行分割。
5.2Tablet分配
在任何一个时刻,一个Tablet 只能分配给一个Tablet服务器。Master服务器记录了当前有哪些活跃的 Tablet服务器、哪些 Tablet 分配给了哪些Tablet 服务器、哪些 Tablet 还没有被分配。当一个 Tablet 还没有被分配、并且刚好有一个 Tablet 服务器有足够的空闲空间装载该 Tablet 时 Master 服务器会给这个 Tablet 服务器发送一个装载请求,把 Tablet 分配给这个服务器。
6. 优化
未完待续。。。。。。