BigTable

下面通过一个具体实例来介绍nosql,google的big table。BIG TABLE,实际上它是一个典型的基于google分布式文件系统的一个大数据的数据库平台。

big table的特性

1).首先它面向的这个环境,是一个google典型的定义的这种分布式系统环境。系统可能会出现故障,网络可能会出现问题,然后数据可能会丢失,在这样的一个环境底下,要求做一个nosql这种的平台。

1.1.能够保证数据的可用性,能够对抗系统中各个模块的失败,能够做到这种失败的容忍度。

1.2.同时它对于整个系统的可扩展性有需求,它要能够支持google当时成千上万台的服务器,它能够支持TB级的内存管理,然后它能够对海量规模的磁盘数据,PB级的进行一个管理。

1.3.同时,它能够提供一个高性能的数据查询,包括数据的读,还有一定量的数据的写。

2).同时这个系统应该是从实用的角度,有比较好的可管理性,那么具体体这样两方面。

2.1.一方面,nosql是可以像在传统的分布式文件系统里面一样,可以添加,可以删除,可以坏掉,不影响整个系统的性能和使用。

2.2.同时它可以根据实际用户行为,比如说业务请求的情况,来决定数据在各个服务器上分配方式,以及其它资源的预留和分配的方式,达到整体上性能的一个保障。

big table数据模型

实际上我们在介绍其他的,分布式系统中也都会非常的关注,它使用的这个数据模型,比如说在分布式文件系统里面,它的数据模型可能是行式的数据,或者是key value的数据,那么在这个spark里面,它的这种数据,可能是RDD的,那么在big table里面,它的数据模型,是什么样的呢?

它基本上是想把数据组织成一个表格的样子,这个表格有这样的一些属性。

BigTable_第1张图片

1).首先它有行,那么一行数据实际上就是,我们能够往分布式文件系统里面插入的一行数据,大家可以这样简单的先去理解,实际上从这个描述上大家也知道,big table其实是基于这种文件的分布式文件系统衍生而来的。

2).那么它还有列,实际上行列已经从矩阵的样子上把这个表格给定义出来了。

3).但除了行和列外,它还有一个叫做time stamp的这样一个新的属性。大家可以简单的理解time stamp是记录了这个数据,它的一个生成的时间,或者说上一次更新的时间。所以big table,从本质上利用了这样的数据模型。可以在它的表格中对历史的版本,对不同时期的数据,进行一个描述。当然这和Google本身的业务有关,这是big table的数据模型,通过行,通过列,通过这个时间戳,把数据给组织到一块。

4).我们来具体来看它的这个数据模式。

4.1.首先是行,我们来看行的特征是什么样?行是由一个名字去决定的,来对它进行索引。那么这个名字可以是任意的字符串,具有一定的最大长度的限制。行实际上是将数据在原始的文件里面进行索引的这样一个标准,那么它在我们插入了这一行记录之后,实际上就需要把这一行数据给放进去。在big table的,这个数据的物理的组织上它是按照行的,这种字母的这样一个序,来进行一个排序,当然其他的排序方式也是支持的。在Google的业务当中,如果它的行是通过这些url来组织的话,那么这种字母的序实际上可以很方便,它来对这些不同的站点进行检索和索引,那么在这个行里面,又会把相邻的一些行组织在一起,形成了big table。它的一个单元,叫做tablet,也就是说若干行,当它达到一定的长度之后,我们把它放到一块,这个行的一个范围,就叫做一个tablet。整个这个big table,实际上就是在tablet层面上进行数据管理。而在tablet里面,会有很多很多的这样的数据行。

4.2.那么除了行之外,为了在big table里面,实现类似于传统关系数据库里面数据的一个结构,还引入了列,实际上行和列,是一个矩阵的模式。那么这边我们有行,而这边有不同的这个列,大家可以看到,在这个例子当中实际上是去,介入了网页的一些代码和属性。那么列是怎样去组织?这里面有一些新的概念,实际上google是通过列的family和列的qualifier,来对列进行划分的。family实际上大家可以理解它是一个相对比较大的,列上的一个概念。而qualifier是一个细节的描述。比如说在我们的这个例子当中,大家可以看到content,它就会产生一个family,而这个content底下,它会给你包含很多很多的qualifier,形成不同的这种具体的一个一个的列。那么来看这个列具有一些什么样的属性?首先这些列和行一样,它也必须在数据创建,插入的时候就需要得到创建。然后它的这个列的family通常允许的这个数量并不会特别多,或者说google big table建议使用者在创建列的family的时候,对这个family有一定的数量控制,它的这个qualifier却不受限制,你可以通过family底下,创建很多很多的qualifier,达到你任意扩展你的这个列的目标。那这是和它系统实现中,这种性能的优化是相关的。

BigTable_第2张图片

4.3.那么第三个是time stamp,我们说有行有列有time stamp,实际上我们就可以决定一个数据在big table的table中是怎么去放的了。time stamp具有一些什么样的特性?首先这种time stamp,它的一个最原始的作用是用来区分不同的版本。那么在google最开始的业务中为什么会有这些版本呢,我们以网页为例,实际上,网页并不是一成不变的,大家比如说会去使用的这些门户网页,或者说其他的一些信息的网页,它们会随着时间的变化,会产生很多的版本,那么google为了对这些版本进行区分,或者说其他的这种搜索的目的,他们会使用time stamp来对这些版本进行一个划分。那么通常在真正使用big table的时候,会将这个最新的版本做一个特别的time stamp的一个标识,而将老版本通过它的版本号或者是通过它当时更新的时间来进行区分,这是在实际系统中使用的时候大家会这么去做。那么有了这个time stamp,实际上我们可以做很多的特性出来。比如说做垃圾的回收,那么我们可以让整个系统,比如说只保留最新的若干个版本号,那么老的这些数据可能就可以标记为不用,然后过一段时间之后会被big table删除掉,或者说通过其他的垃圾回收机制把它给删除掉。当然除垃圾回收之外,我们还可以让整个系统保留最新的一些版本,那么这也是达到对系统空间有效利用的一个方式。


summary

1).BigTable是一个用于管理结构化数据的分布式存储系统,构建在GFS、Chubby、SSTable等google技术之上。相当多的google应用使用了BigTable,比如Google Earth和Google Analytics,因此它和GFS、MapReduce并称为谷歌技术”三宝”。

2).行是表的第一级索引,列是表的第二级索引,时间戳是表的第三级索引。

3).查询时,如果只给出行列,那么返回的是最新版本的数据;如果给出了行列时间戳,那么返回的是时间小于或等于时间戳的数据。


test

BigTable_第3张图片

你可能感兴趣的:(NoSQL)