首页 理论教育 Google提出的BigTable数据管理技术

Google提出的BigTable数据管理技术

时间:2023-11-26 理论教育 版权反馈
【摘要】:云计算的数据管理技术中最著名的是Google提出的BigTable数据管理技术。对于不同的要求,BigTable都成功地提供了灵活高效的服务。BigTable建立在GFS、Scheduler、Lock Service和MapReduce之上。BigTable的设计目的是可靠地处理PB级别的数据,并且能够部署到上千台机器上。3)时间戳BigTable表中的每一个表项都可以包含同一数据的多个版本,由时间戳来索引。BigTable的时间戳是64位整型,表示准确到毫秒的“实时”。

Google提出的BigTable数据管理技术

云计算的数据管理技术中最著名的是Google提出的BigTable数据管理技术。Google的许多应用需要管理大量的结构化以及半结构化数据,需要对海量数据进行存储、处理与分析,且数据的读操作频率远大于数据的更新频率等,为此Google开发了弱一致性要求的大规模数据库系统——BigTable。

设计BigTable的目标是建立一个可以广泛应用的、高度扩缩的、高可靠性和高可用性的分布式数据库系统。目前,Google的很多项目使用BigTable来存储数据,包括网页查询、Google Earth和Google金融等。这些应用程序对BigTable的要求各不相同:数据大小不同(从URL到网页到卫星图像),反应速度不同(从后端的大批处理到实时数据服务)。对于不同的要求,BigTable都成功地提供了灵活高效的服务。

BigTable建立在GFS、Scheduler、Lock Service和MapReduce之上。虽然BigTable采用了许多关系数据库的实现策略,但与传统的关系数据库不同,它把所有数据都作为对象来处理,形成一个巨大的表格,用来分布存储大规模结构化数据。BigTable的设计目的是可靠地处理PB级别的数据,并且能够部署到上千台机器上。

BigTab1e的本质是一个稀疏的、分布式的、长期存储的、多维度的和排序的Map。Map的key是行关键字(Row)、列关键字(Column)和时间戳(Timestamp)。Value是一个普通的bytes数组。BigTab1e管理的数据的存储结构为:

{row:string,column:string,time:int64}→string

图7-9是BigTable存储网页的底层数据结构示意图(webtable)。其中,每个网页的内容与相关信息作为一行,无论它有多少列。

图7-9 BigTab1e存储示意图

如图7-9所示,以反转的URL作为行,列关键字是“contents:”“anchor:my.look.ca”和“anchor:cnnsi.com”,时间戳是t3,t5,t6,t8,t9等。如果要查询t5时间URL为www.cnn.com的页面内容,可以使用{com.cnn.www,contents,t5}作为key去BigTab1e中查询相应的value。

下面对行关键字(Row)、列关键字(Column)和时间戳(Timestamp)进行简要介绍。(www.xing528.com)

1)行关键字(Row)

表中的行可以是任意长度的字符串(目前最多支持64 KB,多数情况下10~100个字节就足够了)。在同一行下的每一个读写操作都是原子操作(不管读写这一行里有多少个不同列),这使在对同一行进行并发操作时,用户对于系统行为更容易理解和掌控。

BigTab1e通过行关键字在字典中的顺序来维护数据。一张表可以动态划分成多个连续“子表”(tablet)。这些“子表”由一些连续行组成,它是数据分布和负载均衡的单位。这使读取较少的连续行比较有效率,通常只需要少量机器之间的通信即可。用户可以利用这个属性来选择行关键字,从而达到较好的数据访问“局部性”。举例来说,在webtable中,通过反转URL中主机名的方式,可以把同一个域名下的网页组织成连续行。具体而言,可以把站点maps.google.com/index.html中的数据存放在关键字com.google.maps/index.html所对应的数据中。这种存放方式可以让基于主机和基于域名的分析更加有效。

2)列关键字(Column)

一组列关键字组成了“列族”(column famliy),这是访问控制的基本单位。同一列族下存放的所有数据通常都是同一类型的。“列族”必须先创建,然后才能在其中的“列关键字”下存放数据。“列族”创建后,其中任何一个“列关键字”都可使用。

“列关键字”用如下语法命名:“列族”名必须是看得懂的字符串,而限定词可以是任意字符串。比如,webtable可以有个“列族”,叫language,存放撰写网页的语言。在language“列族”中只用一个“列关键字”来存放网页的语言标识符。该表的另一个有用的“列族”是anchor。“列族”每一个“列关键字”代表一个锚链接,访问控制、磁盘使用统计和内存使用统计,均可在“列族”这个层面进行。在图7-9的例子中,可以使用这些功能来管理不同应用:有的应用添加新的基本数据,有的读取基本数据并创建引申的“列族”,有的则只能浏览数据(甚至可能因为隐私权的原因不能浏览所有数据)。

3)时间戳(Timestamp)

BigTable表中的每一个表项都可以包含同一数据的多个版本,由时间戳来索引。BigTable的时间戳是64位整型,表示准确到毫秒的“实时”。需要避免冲突的应用程序必须自己产生具有唯一性的时间戳。不同版本的表项内容按时间戳倒序排列,即最新的排在前面。在图7-9中,“contents:”列存放一个网页被抓取的时间戳。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈