当前位置:   article > 正文

5分钟了解BigTable_bigtable存储数据的具体过程

bigtable存储数据的具体过程

一、如何存-数据存储格式

1. 基本的存储形式

(row:string, column:string, time:int64)→string

Bigtable 是一个分布式, 多维, 映射表. 表中的数据通过一个行关键字(Row Key)、一个列关键字(Column Key)以及一个时间戳(Time Stamp)进行索引. 在Bigtable中一共有三级索引. 行关键字为第一级索引,列关键字为第二级索引,时间戳为第三级索引。

以上是关于bigtable的一个比较专业的定义,但专业的定义有时候在理解越来可能会有一定的困难。下面是我对bigtable数据的理解。

其基本的存储格式就是一个多维的表,而行的key值是唯一的。列 是按不同的业务,会分为不同的列族,也是对某一些数据进行再抽象,类似于一个 编程中一个对象,而对象的属性可能在不同的对象在实现的时候会有所不同。时间呢,就像另一个维度,会将同保存同一个对象在不同时期的数据。

2.tablet 是什么

所有的数据表(table:此时是bigtable中的一个概念)是按基本结构存储的,但在存储过程中,随着数据量的增大,此时,如果将所有数据存储在一起,显然对设备的要求是非常高的,此时,就需要对数据进行分开存储,在Bigtable中,数据分割是按行进分割的。而行是按一定的规则(如字典序)进行排序的。并且行关键字(如“www.baidu.com”)是一个倒排索引("com.baidu.www"),方便对相同类型的数据(如域名)进行排序(如www.baidu.com,baidu.com,news.baidu.com,wenku.baidu.com,如果按字母顺序正常的排序,其是无法排在一起的,但如果是倒着排,则com.baidu开头的数据,肯定是能够排在一起的,)。将排序后的表(table)分割后形成的小的数据表称为tablet,tablet在增长后,还可以再分,但分割后,依然还是tablet,没有再叫别的名称。.

请注意:此处提到了一个是bigtable中的一个概念,而不是说明。同时,也专门强调了一下行的排序,是有用的。

3.metadata中有什么

把一个表分割为多个小表(tablet)之后,就需要对各个小表(tablet)进行管理,需要记录如那些数据放在了那个表中,这些表放在那些位置等这些与表相关的信息,即元数据(metadata),存储元数据的表称为元数据表,元数据表也是一个Bigtable结构的表,其中的row:key是由tablet的table名与table中row key的上限编码成的,也就是由一个元数据中的行,能唯一确定一个tablet.而其列数据,则是由 tablet的位置及一些操作日志等构成的。当元数据增长到一定程度后,需要对元数据再进行分割,此时,对这些分割,就需要对分割的元数据表进行管理,该表称为root table,root table中存储着分割后的元数据表的相关信息,在Bigtable中,此表不再分割,是最上层的表结构。这个表就存放在Chubby file 中。

如下图所示: 

 二、服务架构

这三级的表结构是如何其数据的表现形式,在其应用方面,需要怎么管理呢?

  1. tablet的管理

一个table中的数据,在分为多个tablet后,需要存储在不同的服务器上,此时就需要一个专门的服务器对这些而存储数据的服务器进行管理,就是由谁来分配那些数据由那个服务器进行存储,如果新增加服务器,该如何分配数据的问题,于是,其确定 由一个主服务器 管理 多个从服务器的主从式架构。

在这个过程中,需要确定两个问题:

  1. 主服务器是如何产生的?
  2. 主服务器是如何管理从服务器的?

而解决这两个问题的关键是一个叫chubby的。首先,所有的服务在加入时,都需要经过chubby服务的注册。才能加入到Bigtable的服务集群中,因此,chubby拥有所有的服务器的信息,同时,chubby还会定期的进行服务器状态的查询,来确定服务器的运行情况。

在一个数据集群中,master的产生是竞争上岗的,也就是所有的服务器都可以向chubby发送一个成为master的请求,获得一个master锁,当chubyy接受一个服务器请求后,就不会再接受其他服务器的请求,从而保证了在一段时间内,一个服务器集群中,只有一个master。

在一个服务器成为master后,会扫描chubby下服务器注册表目录(server directory,server file),来获取所有现存的服务器信息。

master与每个tablet server通信,来检测其上已经分配的tablet。

master 扫描由chubby 管理的METADATA 表,来获知tablet集合从而来管理从服务器上tablet。如给一个服务器分配tablet,在一个从服务器下线后,对其上的数据进行重新分配,如果一个从服务器上数据量过大,由master进行数据的再分配 ,从而实现负载均衡。

 草图如下 :

官方架构如下:

 

至此,基本上对bigtable有了大概了解,达到标题的据说的目标,但只了解,了解,了解,了解,了解,

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/858670
推荐阅读
相关标签
  

闽ICP备14008679号