asd456
作者asd456·2015-05-07 17:31
项目经理·JF

数据库NoSQL之Bigtable

字数 1609阅读 1528评论 0赞 0
介绍

  Bigtable的主要特点是其高度的可扩展性,可以在上千台服务器上存储上PB的数据。其它特点包括应用范围广,高性能,高可用性。谷歌内部很多项目都在使用Bigtable存储数据。
  Bigtable使用了很多数据库的建造方式,但又有其自己的不同之处。

数据模型

  Bigtable使用map数据结构来检索数据。key包含了三条信息:行(row),列(column),时间(timestamp)。value则是一列字节(an uninterpreted array of bytes)。一条记录可以表示成:(row:string, column:string, time:int64) –> string
  我们举一个例子来帮助我们理解下文的详细分析。比如说我们要存储网页信息,那么URL是row key,每一行会有很多列(column),其中几列用来记录网页内容,其它几列用来记录带有该网页的超级链接的网页地址。网页内容在不同时间又不同,所以在每一列中又会出现时间(timestamps)不同的好几个网页版本。

  row key的类型是字符串(string),具有以下特点:
  
1. 数据读写的最小单位是一行,意思是说在某一行上的所有数据处理要么全部完成,要么全部失败,
2. 列的排序方式遵循字典排序,
3. 所有的列被分成几部分,每一部分叫做一个“片”。分布式系统中每一个节点装载了一个片的数据。这样做的好处是用户可以将数据进行适当的归类存储,使得后续的数据分析进行得更加高效。

  很多数据类型相同的列被分配到了不同的集合,这些集合组成了列群(column family)。但创建数据的时候,实际上是先制定列群,然后才能使用每一个群集合里头的column key来引导存储数据。column key的格式是:family:qualifier。

时间

  每一条数据在不同时间存在不同版本,这些不同的版本通过时间来区分存储。时间是用一个64比特的整数来表示。最新的数据版本会被排在最前面以保证新的数据能更快被读取。用户可以限定版本数量,或者限定时间来控制每一条数据应该保留多久以前的数据。

API

  Bigtable API可以用来创建,搜索,修改,删除数据。

Bigtable构造

  Bigtable使用谷歌文件系统(GFS)来存储日志和数据文件,同时可以在一个非专用集群上与其他程序共同运行。至于map的具体结构则使用了谷歌的SSTable。SSTable实际上是一个专门为Bigtable设计的一个map,并且这个map还配上了一个类似于B-树的一个检索结构以便于数据抽取。
  Bigtable还用了一个叫做Chubby的服务来提供分布式系统中的数据锁(distributed lock)。Chubby在里面的用途很广,比如存储数据概要(schema),控制访问。Bigtable的正常运行依赖于Chubby。

构造实现

  Bigtable由三部分组成:语料库(library),一个调度服务器(master server),许多数据运算服务器(tablet server)。运算服务器数量是可变的。和大多数构造类似的分布式系统一样,用户是直接和运算服务器进行数据传输的,不会经过调度服务器。

数据片位置信息

  数据片(tablet)的位置信息是通过一个树状结构来存储的。在这个结构中,首先存在一个根节点(root tablet),这个节点里存放了一个记录所有数据位置的元数据表(metadata table),元数据表里的每一个元数据片(metadata tablet)记录了一个组的数据片位置。

数据片的存放

  由于各种各样的原因(比如某一节点从集群中移除),数据片需要从一个节点转移到另一个节点,这就是调度服务器的工作了,调度服务器主要是用来分配跟移动整个集群中的数据片,使得整个集群在任何时候都能正常运行。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广