关于Bigtable个人理解

Data Model

Bigtable从本质上来讲应该类似于一种NoSQL数据库,同时又提供了普通的数据库所没有的接口。它的数据模型如下:

(row:string, column:string, time:int64) -> string
  • Row:可以看作每条数据是一行,对一行数据的读写操作是原子的。Bigtable会对row key进行字典序排列,尽管每张表的行范围分区随机,但设计良好的row key就能使相关数据相邻连续排列。读取时也只需要访问少数几台机器。
  • Column:column key会被组织成column family,语法是column:qualifier。column family中几个key的取值类型一般相同,设计希望column family是预先设计好的,比较固定,且数量不多(但column的数量不限)。column family是访问控制的最小单位。
  • Timestamp:时间戳最重要的功能是记录同一个值的不同版本。同时也能针对column family定义管理机制:只保留多久版本的记录,或保留最近几个版本。

API

Bigtable提供了一系列API供用户进行数据操作。有几个要点:

  • 允许使用正则匹配列名,对匹配结果加以限制。
  • 支持单行的事务。不支持跨行事务。
  • Integer数据可用作计数器。
  • 支持在服务器地址空间执行客户端提供的脚本。

Bigtable的一大特点就是支持配合MapReduce使用。

Building Blocks

Bigtable作为比较上层的应用,依赖于一系列Google产品。

首先它的数据和日志文件是存储在GFS上的。

其次,它存储数据的数据结构是Google SSTable,这种数据结构将数据分为小块(64KB),并作索引。方便查找和映射到内存空间。

Bigtable还依赖于分布式锁服务:Chubby。Chubby具有较高的可用性,通常会维持5个分片并选举一个master。使用Paxos算法来保证分片一致性。Chubby提供一个由目录和文件组成的命名空间(namespace),每个目录或文件都可以作为锁,保证读写一个文件是原子操作。使用Chubby,Bigtable可以:

  • 保证只有一个master节点(Bigtabled的master节点,可继续看下一章);
  • 存储Bigtable数据的bootstrap位置;
  • 存储Bigtable的Schema信息;
  • 存储Bigtable的access control列表。

Implementation

Bigtable系统由三大部分组成:

  • 一个所有客户端连接的library。
  • master服务器负责分配分片到分片服务器,探测新加入和过期的分片服务器,均衡分片服务器负载,做GFS文件的垃圾回收ÿ
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值