`
liuxinglanyue
  • 浏览: 565024 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Google's BigTable 原理 (翻译)

阅读更多

 题记:google 的成功除了一个个出色的创意外,还因为有 Jeff Dean 这样的软件架构天才。

                                                  ------ 编者

官方的 Google Reader blog 中有对BigTable 的解释。这是Google 内部开发的一个用来处理大数据量的系统。这种系统适合处理半结构化的数据比如 RSS 数据源。 以下发言  是 Andrew Hitchcock  在 2005 年10月18号 基于: Google 的工程师 Jeff Dean 在华盛顿大学的一次谈话 (Creative Commons License).

 


首先,BigTable 从 2004 年初就开始研发了,到现在为止已经用了将近8个月。(2005年2月)目前大概有100个左右的服务使用BigTable,比如: Print,Search History,Maps和 Orkut。根据Google的一贯做法,内部开发的BigTable是为跑在廉价的PC机上设计的。BigTable 让Google在提供新服务时的运行成本降低,最大限度地利用了计算能力。BigTable 是建立在 GFS ,Scheduler ,Lock Service 和 MapReduce 之上的。

每个Table都是一个多维的稀疏图 sparse map。Table 由行和列组成,并且每个存储单元 cell 都有一个时间戳。在不同的时间对同一个存储单元cell有多份拷贝,这样就可以记录数据的变动情况。在他的例子中,行是URLs ,列可以定义一个名字,比如:contents。Contents 字段就可以存储文件的数据。或者列名是:”language”,可以存储一个“EN”的语言代码字符串。

为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每个Tablets大概有 100-200 MB,每个机器存储100个左右的 Tablets。底层的架构是:GFS。由于GFS是一种分布式的文件系统,采用Tablets的机制后,可以获得很好的负载均衡。比如:可以把经常响应的表移动到其他空闲机器上,然后快速重建。

Tablets在系统中的存储方式是不可修改的 immutable 的SSTables,一台机器一个日志文件。当系统的内存满后,系统会压缩一些Tablets。由于Jeff在论述这点的时候说的很快,所以我没有时间把听到的都记录下来,因此下面是一个大概的说明:

压缩分为:主要和次要的两部分。次要的压缩仅仅包括几个Tablets,而主要的压缩时关于整个系统的压缩。主压缩有回收硬盘空间的功能。Tablets的位置实际上是存储在几个特殊的BigTable的存储单元cell中。看起来这是一个三层的系统。

客户端有一个指向METAO的Tablets的指针。如果METAO的Tablets被频繁使用,那个这台机器就会放弃其他的tablets专门支持METAO这个Tablets。METAO tablets 保持着所有的META1的tablets的记录。这些tablets中包含着查找tablets的实际位置。(老实说翻译到这里,我也不太明白。)在这个系统中不存在大的瓶颈,因为被频繁调用的数据已经被提前获得并进行了缓存。

    现在我们返回到对 列的说明:列是类似下面的形式: family:optional_qualifier。在他的例子中,行:www.search-analysis.com  也许有列:”contents:其中包含html页面的代码。 “ anchor:cnn.com/news” 中包含着 相对应的url,”anchor:www.search-analysis.com/” 包含着链接的文字部分。列中包含着类型信息。

    (翻译到这里我要插一句,以前我看过一个关于万能数据库的文章,当时很激动,就联系了作者,现在回想起来,或许google的 bigtable 才是更好的方案,切不说分布式的特性,就是这种建华的表结构就很有用处。)

    注意这里说的是列信息,而不是列类型。列的信息是如下信息,一般是:属性/规则。 比如:保存n份数据的拷贝 或者 保存数据n天长等等。当 tablets 重新建立的时候,就运用上面的规则,剔出不符合条件的记录。由于设计上的原因,列本身的创建是很容易的,但是跟列相关的功能确实非常复杂的,比如上文提到的 类型和规则信息等。为了优化读取速度,列的功能被分割然后以组的方式存储在所建索引的机器上。这些被分割后的组作用于 列 ,然后被分割成不同的 SSTables。这种方式可以提高系统的性能,因为小的,频繁读取的列可以被单独存储,和那些大的不经常访问的列隔离开来。

在一台机器上的所有的 tablets 共享一个log,在一个包含1亿的tablets的集群中,这将会导致非常多的文件被打开和写操作。新的log块经常被创建,一般是64M大小,这个GFS的块大小相等。当一个机器down掉后,控制机器就会重新发布他的log块到其他机器上继续进行处理。这台机器重建tablets然后询问控制机器处理结构的存储位置,然后直接对重建后的数据进行处理。

这个系统中有很多冗余数据,因此在系统中大量使用了压缩技术。

    Dean 对压缩的部分说的很快,我没有完全记下来,所以我还是说个大概吧:压缩前先寻找相似的 行,列,和时间 数据。

    他们使用不同版本的: BMDiff 和 Zippy 技术。

   BMDiff 提供给他们非常快的写速度: 100MB/s  1000MB/s 。Zippy 是和 LZW 类似的。Zippy 并不像 LZW 或者 gzip 那样压缩比高,但是他处理速度非常快。

    Dean 还给了一个关于压缩 web 蜘蛛数据的例子。这个例子的蜘蛛 包含 2.1B 的页面,行按照以下的方式命名:“com.cnn.www/index.html:http”.在未压缩前的web page 页面大小是:45.1 TB ,压缩后的大小是:4.2 TB , 只是原来的 9.2%。Links 数据压缩到原来的 13.9% , 链接文本数据压缩到原来的 12.7%。

Google 还有很多没有添加但是已经考虑的功能。

    1.  数据操作表达式,这样可以把脚本发送到客户端来提供修改数据的功能。
    2. 多行数据的事物支持。
    3.  提高大数据存储单元的效率。
    4. BigTable 作为服务运行。
    好像:每个服务比如: maps 和 search history 历史搜索记录都有他们自己的集群运行 BigTable。
    他们还考虑运行一个全局的 BigTable 系统,但这需要比较公平的分割资源和计算时间。

原文地址:
http://blog.csdn.net/accesine960/archive/2006/02/09/595628.aspx

http://blog.outer-court.com/archive/2005-10-23-n61.html

分享到:
评论

相关推荐

    Google's BigTable 原理 (中文)

    **Google's BigTable原理概述** Google的BigTable是一款强大的分布式数据存储系统,旨在处理大规模的半结构化数据。它的设计理念和实现技术对于现代云服务和大数据处理有着深远的影响。BigTable的设计灵感来源于...

    Google云计算原理

    Google Bigtable是一个分布式、大规模、高性能的NoSQL数据库,用于存储海量非结构化数据。此外,Google Cloud Datastore提供了可扩展的、结构化的数据存储服务,适用于应用程序的持久化数据需求。 2. **计算平台:*...

    分布式系统领域经典论文翻译集.pdf

    除了谷歌系列论文外,该翻译集还包括了一系列关于分布式理论的经典文献,这些文献涉及分布式系统的理论基础、协议设计等方面,对于理解分布式系统的设计原理具有重要意义。例如: - **CAP定理**:CAP 定理是分布式...

    Memcached原理和使用详解.docx

    *Google的Bigtable:一个分布式的NoSQL数据库 Memcached是一种高性能的分布式内存缓存服务器,广泛应用于Web开发中,能够提高Web应用的速度和可扩展性。但是,Memcached也存在一些缺点,需要合理地配置和维护。

    HBase技术原理

    首先,HBase是基于Google的Bigtable论文设计的,旨在处理非结构化和半结构化数据。它的核心设计理念是稀疏性,即允许表中的大部分单元格为空,而只存储那些有值的单元格,这使得HBase能够高效地管理大量不规则的数据...

    分布式系统教程 原理与程序设计

    分析实际的分布式系统案例,如Google的MapReduce、Bigtable,Facebook的Hadoop、Spark,以及Amazon的DynamoDB,可以帮助我们更好地理解分布式系统的设计与实现。这些系统在大数据处理、实时分析等领域展现出了强大...

    Jeff Dean在WSDM09的主题演讲_构建大规模信息检索系统中的挑战(中英文)

    Google使用了名为**Bigtable** 的分布式数据库系统,以支持其大规模的数据存储需求。Bigtable能够以高效且可靠的方式存储非结构化和半结构化数据,这对于搜索引擎的实时性和准确性至关重要。Jeff Dean可能阐述了...

    所有架构师都应该至少读上两遍的10篇论文-系统架构

    Bigtable是Google的一个分布式数据库,支撑了许多核心服务如Google搜索、Google Maps等。它展示了如何设计可扩展的、支持实时查询的NoSQL数据库。掌握Bigtable的原理有助于设计大规模数据存储解决方案。 4. **论文...

    [PPT]《云计算》教材配套课件13-云计算理论研究热点

    在技术原理部分,书中提到了Google的GFS、MapReduce、Bigtable、Chubby和App Engine,这些都是Google云计算平台的核心组成部分。亚马逊AWS则包括Dynamo、EC2、S3、SQS、SimpleDB和CloudFront等服务,涵盖了存储、...

    高性能网络爬虫研究综述

    Google后续的改进包括采用自有的文件系统(Google File System, GFS)和数据库系统(BigTable)进行数据存取,以及利用MapReduce技术进行分布式数据处理。 ##### 康柏系统研究中心的Mercator 康柏系统研究中心的...

    高级操作系统课件(分布式操作系统)

    7. **分布式数据库**:分析分布式数据库如Cassandra、MongoDB和Google Bigtable的工作原理,探讨分布式事务处理和CAP理论。 8. **容错与恢复机制**:理解分布式系统中的错误检测、故障恢复策略,如心跳检测、租约...

    分布计算-北邮-PPT

    11. **案例研究**:可能包含实际的分布式计算项目,如Google的Bigtable、Apache Hadoop生态系统和Twitter的Storm流处理系统。 12. **未来趋势**:可能涉及分布式计算的最新发展,如边缘计算、雾计算和量子计算等。 ...

    hbase部署使用

    HBase的设计灵感来源于Google的Bigtable论文,旨在提供类似于Bigtable的功能,但是运行在廉价的商品硬件之上,并且依赖于Hadoop Distributed File System (HDFS)作为底层存储。 #### 2. HBase的应用场景 - **随机...

    分布式操作系统课程复习资料

    深入理解实际应用中的分布式系统,如Google的Bigtable、Amazon的DynamoDB和Facebook的Tao等,可以进一步巩固理论知识。 总结,分布式操作系统课程涵盖了广泛的理论和技术,从基本原理到复杂的设计与实现,需要通过...

    分布式操作系统的课件

    10. 实例分析:通过分析实际的分布式系统,如Google的GFS、Chubby和Bigtable,进一步理解分布式操作系统的实现细节。 通过自学这个课件,你将能够理解分布式操作系统的复杂性和美丽,同时也能掌握设计和构建分布式...

    2013年中国数据库大会-11-NoSQL一致性实践:我对CAP的一点认识

    CAP定理的流行得益于多篇重要论文的发表,例如Google的Bigtable(2006)和Amazon的Dynamo(2007),以及Werner Vogels(亚马逊的CTO)和Dan Pritchett(eBay的架构师)的推介文章。 在实践中,传统数据库保证了一致...

    中兴云计算解决方案

    - **早期**: Google提出了MapReduce这一批量计算框架,以及BigTable等数据管理技术,为大规模数据处理奠定了基础。 - **现在**: Facebook等公司继续推动迭代计算框架的发展,如Pregel等,用于处理复杂的图数据结构...

    分布式数据库课程设计报告.docx

    尤其是在云计算、大数据处理等方面的应用广泛,如Google的Bigtable、Amazon的DynamoDB等产品。 - **国内发展现状**:国内近年来在分布式数据库方面取得了显著进展,特别是在金融、电信等行业有着广泛应用。例如阿里...

    第四十四章:Memcached高性能对象缓存1

    随着互联网的发展,尤其是 web2.0 网站的兴起,NoSQL 数据库逐渐成为热门领域,包括 Google 的 BigTable 和 Amazon 的 Dynamo 在内的多个大型企业都在使用 NoSQL 解决方案。 二、Memcached 概述 Memcached 是一款高...

Global site tag (gtag.js) - Google Analytics