`
hai0378
  • 浏览: 528383 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Google's BigTable

 
阅读更多

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三大论文

    Bigtable是Google设计的一个分布式表格存储系统,用于存储半结构化和结构化数据。论文描述了Bigtable如何在一个大规模的、分布式的环境中提供高并发、低延迟的数据访问。Bigtable基于GFS和Chubby(一个分布式锁服务...

    google 五篇经典文章

    2. **《Bigtable:一个结构化数据的分布式存储系统》**:Bigtable是Google的一个分布式NoSQL数据库,用于存储非结构化和半结构化数据。论文详细描述了Bigtable的架构,包括行、列族、时间戳等核心概念,以及其在...

    GCP Core Infrastructure.zip

    Choose among and use Google Cloud Platform storage options: Google Cloud Storage, Google Cloud SQL, Google Cloud Bigtable, and Google Cloud Datastore Make basic use of BigQuery, Google’s managed data...

    Hypertable Architecture

    Hypertable is a massively scalable database modeled after Google's Bigtable database. Bigtable is part of a group of scalable computing technologies developed by Google which is depicted in the ...

    Accumulo - Application Development, Table Design, and Best Practices

    Accumulo - Apache Accumulo is a highly scalable, distributed, open source data store modeled after Google’s Bigtable design.

    云计算标杆Google的技术构架

    提到Google云计算,不能不提其强大的容器技术Kubernetes(K8s)。Kubernetes是Google开源的一个容器编排系统,可以自动化部署、扩展和管理容器化的应用程序。Kubernetes提供了一种标准化的方式,使开发者能够在任何...

    HBase.The.Definitive.Guide.2nd.Edition

    Modeled after Google’s BigTable architecture, HBase scales to billions of rows and millions of columns, while ensuring that write and read performance remain constant. Fully revised for HBase 1.0, ...

    Google Snappy压缩源码

    Snappy是在谷歌内部生产环境中被许多项目使用的压缩库,包括BigTable,MapReduce和RPC等。谷歌表示算法库针对性能做了调整,而不是针对压缩比或与其他类似工具的兼容性。Snappy同时针对64位x86处理器进行了优化,在...

    Google云计算原理

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

    藏经阁-Scaling 30 TB s of Data lake with Apache HBase and Scala DSL

    Apache HBase 是一个基于 HDFS 的分布式、面向列的 NoSQL 数据库,modeled after Google 的 BigTable。它支持 fault-tolerant 应用程序,具有亿万行和数百万列的能力。HBase 具有非常低的延迟和近实时的随机读取和...

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

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

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

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

    Memcached原理和使用详解.docx

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

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

    P2P环境下的MapReduce模型,如M1-M-net-S-net的示例,展示了分布式计算在非中心化网络中的应用,这一模型在处理大数据和分布式任务时具有高效性和灵活性,类似Google的TFS、Bigtable和MapReduce,以及与Hadoop相关的...

    基于spark streaming+flume+kafka+hbase的实时日志处理分析系统(分为控制台版本和基于s.zip

    4. **HBase**:HBase是一个分布式的、面向列的NoSQL数据库,基于Google的Bigtable设计,运行在Hadoop之上。在实时日志处理系统中,HBase用于存储经过Spark Streaming处理后的结果,提供高效的数据查询和分析能力,...

    2013年中国数据库大会-43-大数据,商业智能的挑战

    谷歌在NoSQL和SQL数据库技术方面也进行了创新,发表了《F1-The Fault-Tolerant Distributed RDBMS Supporting Google's Ad Business》和《Spanner: Google's Globally-Distributed Database》两篇论文,展示了其在...

    高性能网络爬虫研究综述

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

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

    4. **Bigtable: A Distributed Storage System for Structured Data**:Bigtable 是谷歌为解决结构化数据存储问题而设计的大规模分布式数据库系统。它采用了稀疏、分布式的多维排序映射表来存储数据,并通过一系列...

Global site tag (gtag.js) - Google Analytics