定制论文服务

我们在仔细分析了一个类似Bigtable 的系统的种种潜在用途之后,决定选用这个数据模型。我们先举个具体的例子,这个例子促使我们做了很多设计决策;假设我们想要备份海量的网页及相关信息,这些数据可以用于很多不同的项目,我们姑且称这个特殊的表为Webtable 。在Webtable 里,我们使用URL 作为行关键字,使用网页的各种属性(aspect )作为列名,网页的内容存在“contents: ”列中,并用获取该网页的时间戳作为标识(alex注:即按照获取时间不同,存储了多个版本的网页数据 ) ,如图一所示。. 每一次Minor Compaction 都会创建一个新的SSTable 。如果这个行为未经检查地持续下去,读操作可能需要合并来任意个SSTable 的更新;反之,我们通过定期在后台执行Merging Compaction 过程限制这类文件(shijin :SStable )的数量。Merging Compaction 过程读取一些SSTable 和memtable 的内容,输出一个新的SSTable 。只要Merging Compaction 过程完成了,作为输入的SSTable 和memtable 就可以丢弃了。. 0047%, 在这期间由于Chubby 不可用而导致BigTable 中的部分数据不能访问(Chubby 不能访问的原因可能是Chubby 本身失效或者网络问题)。单个集群里受Chubby 失效影响最大的百分比是0. Bigtable 是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB 级的数据。Google 的很多项目将数据存储在Bigtable 中,包括Web 索引、Google Earth 、Google Finance 。这些应用对Bigtable 提出的要求差异非常大,无论是在数据规模(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对所有Google 这些产品,Bigtable 还是成功地提供了一个灵活的、高性能的解决方案。本文描述了Bigtable 提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的布局和格式;并且我们还将描述Bigtable 的设计和实现。. BigTable 还依赖一个高可用的、持久化的分布式锁服务组件,叫做Chubby 【8 】。一个Chubby 服务包括了5 个活动的副本,其中一个副本被选为Master ,并且积极处理请求。只有在大多数副本正常运行,并且彼此之间能够互相通信的情况下,Chubby 服务才是可用的。当有副本失效的时候,出现故障时Chubby 使用Paxos 算法【9,23 】保证副本的一致性。Chubby 提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁使用,对文件的读写操作都是原子的。Chubby 客户程序库提供对Chubby 文件的一致性缓存。每个Chubby 客户程序都维护一个与Chubby 服务的会话。如果客户程序不能在租约到期的时间内重新签订会话租约,这个会话就过期失效了(A client ’s session expires if it is unable to renew its session lease within the lease expiration time. )批量写入的接口,但是,Bigtable 目前还不支持通用的跨行事务处理。其次,Bigtable 允许把数据项用做整数计数器。最后,Bigtable 支持在服务器的地址空间内执行脚本程序。脚本程序使用Google 开发的用于数据处理的Sawzall 语言【28 】书写。目前,我们基于Sawzall 的API 还不允许客户脚本将数据写回Bigtable ,但是它允许多种形式的数据转换、基于任意表达式的数据过滤、以及通过多种操作符的汇总归纳。. Ca ”的列。每个锚链接数据项只有一个版本( alex注:注意时间戳标识了列的版本, t9和 t8分别标识了两个锚链接的版本) ;而contents 列则有三个版本,分别由时间戳t3 ,t5 ,和t6 标识。. Copyright © 2004-2010 论文图书馆*六周年* -论文下载,职称论文下载、发表代理-专业服务、六年信誉、值得信赖! 版权所有
全国免费电话:400-6618-400 Email:lwlib. 客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。.

一个教训是,我们发现,很多类型的错误都会导致大型分布式系统受损,不仅仅是通常的网络中断、或者很多分布式协议中设想的fail-stop 错误(alex 注:fail-stop failture ,指一旦系统fail 就stop ,不输出任何数据;fail-fast failture ,指fail 不马上stop ,在短时间内return 错误信息,然后再stop )。比如,我们遇到过下面这些类型的错误导致的问题:内存数据损坏、网络中断、时钟偏差、机器挂起、扩展的和非对称的网络分区(alex 注:extended and asymmetric network partitio ns ,不明白什么意思。partition 也有中断的意思,但是我不知道如何用在这里)、我们使用的其它系统的Bug (比如Chubby )、GFS 配额溢出、计划内和计划外的硬件维护。随着我们在这些问题中得到更多经验,我们通过修改各种协议来解决(address )这些问题。比如,我们在RPC 机制中加入了检验和Checksum 。我们通过移除系统的其他部分针对另一部分作出的假设来解决这些问题。例如,我们不再假设一个给定的Chubby 操作只返回固定错误码集合中的一个值。. 每一次Minor Compaction 都会创建一个新的SSTable 。如果这个行为未经检查地持续下去,读操作可能需要合并来任意个SSTable 的更新;反之,我们通过定期在后台执行Merging Compaction 过程限制这类文件(shijin :SStable )的数量。Merging Compaction 过程读取一些SSTable 和memtable 的内容,输出一个新的SSTable 。只要Merging Compaction 过程完成了,作为输入的SSTable 和memtable 就可以丢弃了。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. 客户程序可以控制一个局部性群组的SSTable 是否压缩;如果压缩, 用什么格式压缩。用户指定的压缩格式应用到每个SSTable 的块中(块的大小由局部性群组的调整参数操纵)。尽管为每个分别压缩浪费了少量空间(alex 注:相比于对整个SSTable 进行压缩,分块压缩压缩率较低),我们却受益于在只读取小部分数据SSTable 的时候就不必解压整个文件了。许多客户程序使用双步(two-pass )定制压缩模式。第一步采用Bentley and McIlroy ’s 模式[6] ,这种模式横跨一个很大窗口压缩常见的长字符串;第二步采用快速压缩算法,即在一个16KB 数据的小窗口中寻找重复数据。两步压缩都很快,在现代的机器上,编码的速率达到100-200MB/s ,解码的速率达到400-1000MB/s 。. )批量写入的接口,但是,Bigtable 目前还不支持通用的跨行事务处理。其次,Bigtable 允许把数据项用做整数计数器。最后,Bigtable 支持在服务器的地址空间内执行脚本程序。脚本程序使用Google 开发的用于数据处理的Sawzall 语言【28 】书写。目前,我们基于Sawzall 的API 还不允许客户脚本将数据写回Bigtable ,但是它允许多种形式的数据转换、基于任意表达式的数据过滤、以及通过多种操作符的汇总归纳。. 我们建立一个包括N 台tablet 服务器的Bigtable 集群,通过改变N 的值来测量Bigtable 的性能和可扩展性。tablet 服务器配置了1GB 的内存,数据写入到一个包含1786 台机器、每台机器有2 个400G IDE 硬盘驱动的GFS 单元上。N 台客户机生成测试Bigtable 工作负载。(我们使用和tablet 服务器相同数目的客户机以确保客户机不会成为瓶颈。)每台机器有主频2GHZ 的双核Opteron 处理器,配置了足以容纳所有进程工作集的物理内存,以及一张千兆以太网卡。这些机器都分配到一个两层的、树状的交换网络里,在根节点上的可用总带宽大约100-200Gbps 。所有的机器采用相同的主机设备,因此,任何两台机器间的往返时间都小于1ms 。. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. Bigtable 是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB 级的数据。Google 的很多项目将数据存储在Bigtable 中,包括Web 索引、Google Earth 、Google Finance 。这些应用对Bigtable 提出的要求差异非常大,无论是在数据规模(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对所有Google 这些产品,Bigtable 还是成功地提供了一个灵活的、高性能的解决方案。本文描述了Bigtable 提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的布局和格式;并且我们还将描述Bigtable 的设计和实现。. 虽然我们在选择压缩算法的时候强调的是速度而不是压缩的空间,但是这种两步压缩模式效果却惊人的好。比如,在Webtable 的例子里,我们使用这种压缩方式来存储网页内容。在一次实验中,我们在一个压缩的局部性群组中存储了大量的网页。针对实验的目的,对每个文档我们限制其只有一个版本,而不是存储对我们可用的所有版本。该模式在空间上达到了10:1 的压缩比。这比经典的Gzip 在压缩HTML 页面时3:1 或者4:1 的空间压缩比好的多;这是由于Webtable 的行的布局方式:从单一主机获取的所有页面紧密存储。利用这个特性,Bentley-McIlroy 算法可以从来自同一个主机的页面里识别大量共享的引用。不仅仅是Webtable ,很多应用程序也通过选择行名来将相似的数据集聚,从而获取较高的压缩率。当我们在Bigtable 中存储同一份数据的多个版本的时候,压缩效率会更高。. 在很多方面,Bigtable 和数据库很类似:它使用了很多数据库的实现策略。并行数据库【14 】和内存数据库【13 】已经具备可扩展性和高性能,但是Bigtable 提供了一个和这些系统完全不同的接口。Bigtable 不支持完整的关系数据模型;与之相反,Bigtable 为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的布局和格式( alex注:也就是对 BigTable而言,数据是没有格式的,用数据库领域的术语说,就是数据没有 Schema,用户自己去定义 Schema) ,用户也可以自己推测(alex注: reason about) 在底层存储中展示的数据的位置属性(alex注:位置相关性可以这样理解,比如树状结构,具有相同前缀的数据的存放位置接近。在读取的时候,可以把这些数据一次读取出来 ) 。数据用行和列的名字进行索引,名字可以是任意的字符串。虽然客户程序通常会在把各种结构化或半结构化的数据串行化到字符串里,Bigtable 同样将数据视为未经解析的字符串。通过仔细选择数据的模式,客户可以控制数据的位置。最后,可以通过BigTable 的模式参数动态地控制数据读或写(control whether to serve data out of memory or from disk) 。. 客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。. 截止到2006 年8 月有388 个非测试用的Bigtable 集群运行在各种各样的Google 机器集群上,合计大约有24500 个tablet 服务器。表1 显示了每个集群上tablet 服务器的大致分布情况。这些集群中,许多用于开发目的,因此在引人注意的一段时期内比较空闲。通过观察一个由14 个忙碌集群、8069 个tablet 服务器组成的群组,我们看到整体的流量超过了每秒120 万次请求,发送到系统的RPC 请求导致的网络负载达到了741MB/s ,系统发出的RPC 请求网络负载大约是16GB/s 。. Master 负责探测一个tablet 服务器何时不再为它的tablet 提供服务,并且尽快重新分配那些tablet 。master 通过轮询tablet 服务器锁的状态来探测tablet 服务器何时不再为tablet 提供服务。如果一个tablet 服务器报告它丢失了锁,或者master 最近几次尝试都无法和该服务器通信,master 就会尝试获取该tablet 服务器文件的独占锁;如果master 能够获取独占锁,那么就说明Chubby 是正常运行的,而tablet 服务器要么是宕机了、要么是不能和Chubby 通信了,因此,为了保证该tablet 服务器不能再提供服,master 就删除该tablet 服务器在Chubby 上的服务器文件。一旦服务器文件被删除了,master 就把之前分配给该服务器的所有的tablet 放入未分配的tablet 集合中。为了确保Bigtable 集群面对master 和Chubby 之间网络问题不那么脆弱,master 在它的Chubby 会话过期时会主动退出。但是不管怎样,如上所述,master 的故障不会改变现有tablet 到tablet 服务器的分配。. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除.   在序列写的基准测试中,我们使用的列关键字的名字从0 到R-1 。这个范围又被划分为10N 个大小相同的区间。核心调度程序把这些区间分配给N 个客户端,分配方式是:一旦客户程序处理完上一个分配给它的区间,调度程序就把下一个可用的的区间分配给它。这种动态分配的方式有助于减轻客户机上运行的其它进程对性能影响的变化。我们在每个行关键字下写入一个单独的字符串。每个字符串都是随机生成的、因此也没有被压缩(alex 注:参考第6 节的压缩小节)。另外,不同行关键字下的字符串也是不同的,因此也就不可能有跨行的压缩。随机写入基准测试采用类似的方法,只是行关键字在写入前先做按R 取模的Hash ,这样就保证了在整个基准测试期间,写入的工作负载大致均匀地分布在行存储空间内。.

BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. 有些数据库厂商已经开发了并行的数据库系统,能够存储海量的数据。Oracle 的实时应用集群数据库RAC 【27 】使用共享磁盘存储数据(Bigtable 使用GFS ),并且有一个分布式的锁管理系统(Bigtable 使用Chubby )。IBM 的DB2 并行版本【4 】基于一种类似于Bigtable 的、无共享的架构(a shared-nothing architecture )【33 】。每个DB2 的服务器都负责处理存储在一个本地关系型数据库中的表中的行的一个子集。这两种产品都提供了一个带有事务功能的完整的关系模型。.   在序列写的基准测试中,我们使用的列关键字的名字从0 到R-1 。这个范围又被划分为10N 个大小相同的区间。核心调度程序把这些区间分配给N 个客户端,分配方式是:一旦客户程序处理完上一个分配给它的区间,调度程序就把下一个可用的的区间分配给它。这种动态分配的方式有助于减轻客户机上运行的其它进程对性能影响的变化。我们在每个行关键字下写入一个单独的字符串。每个字符串都是随机生成的、因此也没有被压缩(alex 注:参考第6 节的压缩小节)。另外,不同行关键字下的字符串也是不同的,因此也就不可能有跨行的压缩。随机写入基准测试采用类似的方法,只是行关键字在写入前先做按R 取模的Hash ,这样就保证了在整个基准测试期间,写入的工作负载大致均匀地分布在行存储空间内。. 截止到2006 年8 月有388 个非测试用的Bigtable 集群运行在各种各样的Google 机器集群上,合计大约有24500 个tablet 服务器。表1 显示了每个集群上tablet 服务器的大致分布情况。这些集群中,许多用于开发目的,因此在引人注意的一段时期内比较空闲。通过观察一个由14 个忙碌集群、8069 个tablet 服务器组成的群组,我们看到整体的流量超过了每秒120 万次请求,发送到系统的RPC 请求导致的网络负载达到了741MB/s ,系统发出的RPC 请求网络负载大约是16GB/s 。. 在很多方面,Bigtable 和数据库很类似:它使用了很多数据库的实现策略。并行数据库【14 】和内存数据库【13 】已经具备可扩展性和高性能,但是Bigtable 提供了一个和这些系统完全不同的接口。Bigtable 不支持完整的关系数据模型;与之相反,Bigtable 为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的布局和格式( alex注:也就是对 BigTable而言,数据是没有格式的,用数据库领域的术语说,就是数据没有 Schema,用户自己去定义 Schema) ,用户也可以自己推测(alex注: reason about) 在底层存储中展示的数据的位置属性(alex注:位置相关性可以这样理解,比如树状结构,具有相同前缀的数据的存放位置接近。在读取的时候,可以把这些数据一次读取出来 ) 。数据用行和列的名字进行索引,名字可以是任意的字符串。虽然客户程序通常会在把各种结构化或半结构化的数据串行化到字符串里,Bigtable 同样将数据视为未经解析的字符串。通过仔细选择数据的模式,客户可以控制数据的位置。最后,可以通过BigTable 的模式参数动态地控制数据读或写(control whether to serve data out of memory or from disk) 。. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. 客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。. 我们从支持Bigtable 中得到的一个实际的经验就是,适当的系统级监控是非常重要的(比如,既监控Bigtable 自身,也监控使用Bigtable 的客户程序)。比如,我们扩展了我们的RPC 系统,因此对于一个RPC 的例子,它详细记录了代表RPC 的很多重要操作。这个特性允许我们检测和修正很多的问题,比如tablet 数据结构上的锁的竞争、在提交Bigtable 修改操作时对GFS 的写入非常慢的问题、以及在元数据表的tablet 不可用时,元数据表无法访问的问题。关于监控的用途的另外一个例子是,每个Bigtable 集群都在Chubby 中注册了。这可以允许我们追踪所有集群,发现它们的大小、检查运行的我们软件的版本、他们接收的流量,以及检查是否有类似于意外高延迟等问题。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. Bigtable 的局部性群组认识到了类似于压缩和磁盘读取方面性能的收益,这是从其他系统观察到的,这些系统以基于列而不是行的存储方式组织数据,这种系统包括C-Store 【1 ,34 】、商业产品例如Sybase IQ 【15 ,36 】、SenSage 【31 】、KDB+ 【22 】,以及MonetDB/X100 【38 】的ColumnDM 存储层。另外一种在普通文件中进行垂直和水平分区并获得很好的数据压缩率的系统是AT&T 的Daytona 数据库【19 】。局部性群组不支持Ailamaki 系统中描述的CPU 级缓存优化【2 】。. 选择服务论文课堂作业报告文献综述毕业论文提案毕业论文毕业论文修改专题研究论文金融建模文法校对模拟试题解答个人陈述抄袭捡查字数要求500 字 (2 页)750 字 (3 页)1000 字 (4 页)1250 字 (5 页)1500 字 (6 页)1750 字 (7 页)2000 字 (8 页)2250 字 (9 页)2500 字 (10 页)2750 字 (11 页)3000 字 (12 页)3250 字 (13 页)3500 字 (14 页)3750 字 (15 页)4000 字 (16 页)4250 字 (17 页)4500 字 (18 页)4750 字 (19 页)5000 字 (20 页)5250 字 (21 页)5500 字 (22 页)5750 字 (23 页)6000 字 (24 页)6250 字 (25 页)6500 字 (26 页)6750 字 (27 页)7000 字 (28 页)7250 字 (29 页)7500 字 (30 页)7750 字 (31 页)8000 字 (32 页)8250 字 (33 页)8500 字 (34 页)8750 字 (35 页)9000 字 (36 页)9250 字 (37 页)9500 字 (38 页)9750 字 (39 页)10000 字 (40 页)10250 字 (41 页)10500 字 (42 页)10750 字 (43 页)11000 字 (44 页)11250 字 (45 页)11500 字 (46 页)11750 字 (47 页)12000 字 (48 页)12250 字 (49 页)12500 字 (50 页)12750 字 (51 页)13000 字 (52 页)13250 字 (53 页)13500 字 (54 页)13750 字 (55 页)14000 字 (56 页)14250 字 (57 页)14500 字 (58 页)14750 字 (59 页)15000 字 (60 页)15250 字 (61 页)15500 字 (62 页)15750 字 (63 页)16000 字 (64 页)16250 字 (65 页)16500 字 (66 页)16750 字 (67 页)17000 字 (68 页)17250 字 (69 页)17500 字 (70 页)17750 字 (71 页)18000 字 (72 页)18250 字 (73 页)18500 字 (74 页)18750 字 (75 页)19000 字 (76 页)19250 字 (77 页)19500 字 (78 页)19750 字 (79 页)20000 字 (80 页)20250 字 (81 页)20500 字 (82 页)20750 字 (83 页)21000 字 (84 页)21250 字 (85 页)21500 字 (86 页)21750 字 (87 页)22000 字 (88 页)22250 字 (89 页)22500 字 (90 页)22750 字 (91 页)23000 字 (92 页)23250 字 (93 页)23500 字 (94 页)23750 字 (95 页)24000 字 (96 页)24250 字 (97 页)24500 字 (98 页)24750 字 (99 页)25000 字 (100 页)估价 £ 0.

Ca ”的列。每个锚链接数据项只有一个版本( alex注:注意时间戳标识了列的版本, t9和 t8分别标识了两个锚链接的版本) ;而contents 列则有三个版本,分别由时间戳t3 ,t5 ,和t6 标识。. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. Copyright © 2004-2010 论文图书馆*六周年* -论文下载,职称论文下载、发表代理-专业服务、六年信誉、值得信赖! 版权所有
全国免费电话:400-6618-400 Email:lwlib. 2 节);存储BigTable 的模式信息(每张表的列族信息);以及存储访问控制列表。如果Chubby 长时间无法访问,BigTable 就会失效。最近我们在跨越11 个Chubby 服务实例的14 个BigTable 集群上测量了这个影响。Bigtable 服务器时钟的平均比率是0. BigTable 还依赖一个高可用的、持久化的分布式锁服务组件,叫做Chubby 【8 】。一个Chubby 服务包括了5 个活动的副本,其中一个副本被选为Master ,并且积极处理请求。只有在大多数副本正常运行,并且彼此之间能够互相通信的情况下,Chubby 服务才是可用的。当有副本失效的时候,出现故障时Chubby 使用Paxos 算法【9,23 】保证副本的一致性。Chubby 提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁使用,对文件的读写操作都是原子的。Chubby 客户程序库提供对Chubby 文件的一致性缓存。每个Chubby 客户程序都维护一个与Chubby 服务的会话。如果客户程序不能在租约到期的时间内重新签订会话租约,这个会话就过期失效了(A client ’s session expires if it is unable to renew its session lease within the lease expiration time. BigTable 数据在内部使用Google SSTable 文件格式存储。SSTable 提供一个从键(key )到值(value )的持久化的、已排序、不可更改的映射(Map ),这里的key 和value 的都是任意的字节(Byte )串。对SSTable 提供了如下操作:查询与一个指定key 值相关的value ,或者遍历指定key 值范围内的所有键值对。从内部看,SSTable 是一连串的数据块(通常每个块的大小是64KB ,但是这个大小是可以配置的)。SSTable 使用块索引(通常存储在SSTable 的最后)来定位数据块;在打开SSTable 的时候,索引被加载到内存。一次查找可以通过一次磁盘搜索完成:首先执行二分查找在内存索引里找到合适数据块的位置,然后在从硬盘中读取合适的数据块。也可以选择把整个SSTable 都映射到内存中,这样就可以在不用访问硬盘的情况下执行查询搜索了。. 截止到2006 年8 月有388 个非测试用的Bigtable 集群运行在各种各样的Google 机器集群上,合计大约有24500 个tablet 服务器。表1 显示了每个集群上tablet 服务器的大致分布情况。这些集群中,许多用于开发目的,因此在引人注意的一段时期内比较空闲。通过观察一个由14 个忙碌集群、8069 个tablet 服务器组成的群组,我们看到整体的流量超过了每秒120 万次请求,发送到系统的RPC 请求导致的网络负载达到了741MB/s ,系统发出的RPC 请求网络负载大约是16GB/s 。. )批量写入的接口,但是,Bigtable 目前还不支持通用的跨行事务处理。其次,Bigtable 允许把数据项用做整数计数器。最后,Bigtable 支持在服务器的地址空间内执行脚本程序。脚本程序使用Google 开发的用于数据处理的Sawzall 语言【28 】书写。目前,我们基于Sawzall 的API 还不允许客户脚本将数据写回Bigtable ,但是它允许多种形式的数据转换、基于任意表达式的数据过滤、以及通过多种操作符的汇总归纳。. 如果master 将一个tablet 从一个tablet 服务器移到另外一个tablet 服务器,源tablet 服务器会对这个tablet 做一次Minor Compaction 。这个Compaction 操作减少了tablet 服务器日志文件中没有压缩的状态的数目,从而减少了恢复的时间。Compaction 完成之后,该tablet 服务器停止为该tablet 提供服务。在真正卸载tablet 之前,tablet 服务器还会再做一次(通常会很快)Minor Compaction ,以消除tablet 服务器日志中第一次minor compaction 执行过程中产生的未压缩的状态残留。当第二次minor compaction 完成以后,tablet 就在不需要任何日志条目恢复的情况下被装载到另一个tablet 服务器上了。. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. Bigtable 还支持一些其它的特性,这些特性允许用户以更复杂的方法操作数据。首先,Bigtable 支持单行上事务处理,利用这个功能,用户可以对存储在一个单独行关键字下的数据执行原子性的读取- 更新- 写入操作。虽然Bigtable 提供了一个允许用户跨行关键字(at the clients. Bigtable 的局部性群组认识到了类似于压缩和磁盘读取方面性能的收益,这是从其他系统观察到的,这些系统以基于列而不是行的存储方式组织数据,这种系统包括C-Store 【1 ,34 】、商业产品例如Sybase IQ 【15 ,36 】、SenSage 【31 】、KDB+ 【22 】,以及MonetDB/X100 【38 】的ColumnDM 存储层。另外一种在普通文件中进行垂直和水平分区并获得很好的数据压缩率的系统是AT&T 的Daytona 数据库【19 】。局部性群组不支持Ailamaki 系统中描述的CPU 级缓存优化【2 】。.

每一次Minor Compaction 都会创建一个新的SSTable 。如果这个行为未经检查地持续下去,读操作可能需要合并来任意个SSTable 的更新;反之,我们通过定期在后台执行Merging Compaction 过程限制这类文件(shijin :SStable )的数量。Merging Compaction 过程读取一些SSTable 和memtable 的内容,输出一个新的SSTable 。只要Merging Compaction 过程完成了,作为输入的SSTable 和memtable 就可以丢弃了。. Copyright © 2004-2010 论文图书馆*六周年* -论文下载,职称论文下载、发表代理-专业服务、六年信誉、值得信赖! 版权所有
全国免费电话:400-6618-400 Email:lwlib. 就提供给应用程序开发者的分布式数据存储模型而言,我们相信,分布式B-Tree 或者分布式Hash 表提供的键值对模型有很大的局限性。键值对模型是很有用的组件,但是它们不应该是提供给开发者唯一的组件。我们选择的模型比简单的键值对丰富的多,它支持稀疏的、半结构化的数据。尽管如此,它也足够简单,可以标榜为高效普通文件的代表(it lends itself to a very efficient flat-file representation );它也是透明的(通过局部性群组),允许我们的使用者对系统的重要行为进行调整。. 在普通操作中使用单个日志提供了重大的性能收益,但是将恢复的工作复杂化了。当一个tablet 服务器宕机时,它服务的tablet 将会被移动到大量其它的tablet 服务器上:每个tablet 服务器通常都装载少量原来的服务器的tablet 。为了恢复一个tablet 的状态,新的tablet 服务器要为该tablet 重新应用原来的tablet 服务器写的提交日志中的修改操作。然而,这些tablet 修改操作被混合在同一个物理日志文件中。一种方法可以是对每一个新的tablet 服务器读取完整的提交日志文件,然后只重新应用它需要恢复的tablet 的相关条目。然而,在这种模式下,假如100 台机器中每台都加载了来自失效的tablet 服务器的一个单独的tablet ,那么这个日志文件就要被读取100 次(每个服务器读取一次)。. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. Bigtable 还支持一些其它的特性,这些特性允许用户以更复杂的方法操作数据。首先,Bigtable 支持单行上事务处理,利用这个功能,用户可以对存储在一个单独行关键字下的数据执行原子性的读取- 更新- 写入操作。虽然Bigtable 提供了一个允许用户跨行关键字(at the clients. 3 节所述,一个读操作必须读取组成tablet 状态的所有SSTable 的数据。如果这些SSTable 不在内存中,那么就需要多次访问硬盘。我们通过允许客户程序对特定局部性群组的SSTable 指定Bloom 过滤器【7 】,来减少硬盘访问的次数。通过bloom 过滤器我们可以查询一个SSTable 是否包含了特定行/ 列对的数据。对于某些应用程序,只使用了少量的tablet 服务器内粗来存储Bloom 过滤器,却大幅度减少了读操作需要的磁盘访问次数。Bloom 过滤器的使用也意味着对不存在的行或列的大多数查询不需要访问硬盘。.

... 论文-毕业论文,职称论文下载、发表、定制 |论文图书

客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。. 我们得到的最宝贵的经验是简单设计的价值。考虑到我们系统的代码量(大约100000 行生产代码(alex 注:non-test code )),以及随着时间的推移,代码以难以预料的方式演变的现实,我们发现清晰的设计和编码给维护和调试带来的巨大帮助。这方面的一个例子是我们的tablet 服务器成员协议。我们第一版的协议很简单:maste 周期性地和tablet 服务器签订租约,tablet 服务器在租约过期自动退出。不幸的是,这个协议在网络问题面前大大降低系统的可用性,并且对master 服务器恢复时间很敏感。我们多次重新设计这个协议,直到它表现优异。然而,最终的协议太复杂,并且依赖一些Chubby 很少被其他应用程序运用的特性的行为。我们发现我们花费了过量的时间调试一些古怪的边角问题(obscure corner cases) ,不仅在Bigtable 代码中,也在Chubby 代码中。最后,我们废弃了这个协议,转向了一个新的简单的协议,该协议仅仅依赖最广泛使用Chubby 的特性。. Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. 在向GFS 写提交日志时有时引起性能颠簸,原因是多种多样的(比如,写操作相关GFS 服务器崩溃;或者穿过到达特定组合的三个GFS 服务器的网络拥塞或者过载)。为了使修改操作免受GFS 瞬时延迟的影响,每个tablet 服务器实际上有两个日志写入线程,每个线程写自己的日志文件,并且同一时刻,两个线程只有其中之一是活跃的。如果写入活跃日志文件的效率很低,日志文件写入切换到另外一个线程,在提交日志队列中的修改操作就会由新的活跃日志写入线程写入。日志条目包含序列号,这使得恢复进程可以省略掉由于日志进程切换而造成的重复条目。. 选择服务论文课堂作业报告文献综述毕业论文提案毕业论文毕业论文修改专题研究论文金融建模文法校对模拟试题解答个人陈述抄袭捡查字数要求500 字 (2 页)750 字 (3 页)1000 字 (4 页)1250 字 (5 页)1500 字 (6 页)1750 字 (7 页)2000 字 (8 页)2250 字 (9 页)2500 字 (10 页)2750 字 (11 页)3000 字 (12 页)3250 字 (13 页)3500 字 (14 页)3750 字 (15 页)4000 字 (16 页)4250 字 (17 页)4500 字 (18 页)4750 字 (19 页)5000 字 (20 页)5250 字 (21 页)5500 字 (22 页)5750 字 (23 页)6000 字 (24 页)6250 字 (25 页)6500 字 (26 页)6750 字 (27 页)7000 字 (28 页)7250 字 (29 页)7500 字 (30 页)7750 字 (31 页)8000 字 (32 页)8250 字 (33 页)8500 字 (34 页)8750 字 (35 页)9000 字 (36 页)9250 字 (37 页)9500 字 (38 页)9750 字 (39 页)10000 字 (40 页)10250 字 (41 页)10500 字 (42 页)10750 字 (43 页)11000 字 (44 页)11250 字 (45 页)11500 字 (46 页)11750 字 (47 页)12000 字 (48 页)12250 字 (49 页)12500 字 (50 页)12750 字 (51 页)13000 字 (52 页)13250 字 (53 页)13500 字 (54 页)13750 字 (55 页)14000 字 (56 页)14250 字 (57 页)14500 字 (58 页)14750 字 (59 页)15000 字 (60 页)15250 字 (61 页)15500 字 (62 页)15750 字 (63 页)16000 字 (64 页)16250 字 (65 页)16500 字 (66 页)16750 字 (67 页)17000 字 (68 页)17250 字 (69 页)17500 字 (70 页)17750 字 (71 页)18000 字 (72 页)18250 字 (73 页)18500 字 (74 页)18750 字 (75 页)19000 字 (76 页)19250 字 (77 页)19500 字 (78 页)19750 字 (79 页)20000 字 (80 页)20250 字 (81 页)20500 字 (82 页)20750 字 (83 页)21000 字 (84 页)21250 字 (85 页)21500 字 (86 页)21750 字 (87 页)22000 字 (88 页)22250 字 (89 页)22500 字 (90 页)22750 字 (91 页)23000 字 (92 页)23250 字 (93 页)23500 字 (94 页)23750 字 (95 页)24000 字 (96 页)24250 字 (97 页)24500 字 (98 页)24750 字 (99 页)25000 字 (100 页)估价 £ 0. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。. Bigtable 还支持一些其它的特性,这些特性允许用户以更复杂的方法操作数据。首先,Bigtable 支持单行上事务处理,利用这个功能,用户可以对存储在一个单独行关键字下的数据执行原子性的读取- 更新- 写入操作。虽然Bigtable 提供了一个允许用户跨行关键字(at the clients. 随着写操作的执行,memtable 的大小不断增加。当memtable 的尺寸到达一个临界值的时候,这个memtable 就会被冻结,然后创建一个新的memtable ;被冻结住memtable 会被转换成SSTable 并写入GFS (alex 注:我们称这种Compaction 行为为Minor Compaction )。Minor Compaction 过程有两个目的:一是收缩tablet 服务器内存使用,二是在服务器灾难恢复过程中,减少必须从提交日志里读取的数据量。在Compaction 过程中,引入(incoming )的读写操作仍能继续。. 我们建立一个包括N 台tablet 服务器的Bigtable 集群,通过改变N 的值来测量Bigtable 的性能和可扩展性。tablet 服务器配置了1GB 的内存,数据写入到一个包含1786 台机器、每台机器有2 个400G IDE 硬盘驱动的GFS 单元上。N 台客户机生成测试Bigtable 工作负载。(我们使用和tablet 服务器相同数目的客户机以确保客户机不会成为瓶颈。)每台机器有主频2GHZ 的双核Opteron 处理器,配置了足以容纳所有进程工作集的物理内存,以及一张千兆以太网卡。这些机器都分配到一个两层的、树状的交换网络里,在根节点上的可用总带宽大约100-200Gbps 。所有的机器采用相同的主机设备,因此,任何两台机器间的往返时间都小于1ms 。. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. Copyright © 2004-2010 论文图书馆*六周年* -论文下载,职称论文下载、发表代理-专业服务、六年信誉、值得信赖! 版权所有
全国免费电话:400-6618-400 Email:lwlib. 图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi.

Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. 选择服务论文课堂作业报告文献综述毕业论文提案毕业论文毕业论文修改专题研究论文金融建模文法校对模拟试题解答个人陈述抄袭捡查字数要求500 字 (2 页)750 字 (3 页)1000 字 (4 页)1250 字 (5 页)1500 字 (6 页)1750 字 (7 页)2000 字 (8 页)2250 字 (9 页)2500 字 (10 页)2750 字 (11 页)3000 字 (12 页)3250 字 (13 页)3500 字 (14 页)3750 字 (15 页)4000 字 (16 页)4250 字 (17 页)4500 字 (18 页)4750 字 (19 页)5000 字 (20 页)5250 字 (21 页)5500 字 (22 页)5750 字 (23 页)6000 字 (24 页)6250 字 (25 页)6500 字 (26 页)6750 字 (27 页)7000 字 (28 页)7250 字 (29 页)7500 字 (30 页)7750 字 (31 页)8000 字 (32 页)8250 字 (33 页)8500 字 (34 页)8750 字 (35 页)9000 字 (36 页)9250 字 (37 页)9500 字 (38 页)9750 字 (39 页)10000 字 (40 页)10250 字 (41 页)10500 字 (42 页)10750 字 (43 页)11000 字 (44 页)11250 字 (45 页)11500 字 (46 页)11750 字 (47 页)12000 字 (48 页)12250 字 (49 页)12500 字 (50 页)12750 字 (51 页)13000 字 (52 页)13250 字 (53 页)13500 字 (54 页)13750 字 (55 页)14000 字 (56 页)14250 字 (57 页)14500 字 (58 页)14750 字 (59 页)15000 字 (60 页)15250 字 (61 页)15500 字 (62 页)15750 字 (63 页)16000 字 (64 页)16250 字 (65 页)16500 字 (66 页)16750 字 (67 页)17000 字 (68 页)17250 字 (69 页)17500 字 (70 页)17750 字 (71 页)18000 字 (72 页)18250 字 (73 页)18500 字 (74 页)18750 字 (75 页)19000 字 (76 页)19250 字 (77 页)19500 字 (78 页)19750 字 (79 页)20000 字 (80 页)20250 字 (81 页)20500 字 (82 页)20750 字 (83 页)21000 字 (84 页)21250 字 (85 页)21500 字 (86 页)21750 字 (87 页)22000 字 (88 页)22250 字 (89 页)22500 字 (90 页)22750 字 (91 页)23000 字 (92 页)23250 字 (93 页)23500 字 (94 页)23750 字 (95 页)24000 字 (96 页)24250 字 (97 页)24500 字 (98 页)24750 字 (99 页)25000 字 (100 页)估价 £ 0. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. 3 节所述,一个读操作必须读取组成tablet 状态的所有SSTable 的数据。如果这些SSTable 不在内存中,那么就需要多次访问硬盘。我们通过允许客户程序对特定局部性群组的SSTable 指定Bloom 过滤器【7 】,来减少硬盘访问的次数。通过bloom 过滤器我们可以查询一个SSTable 是否包含了特定行/ 列对的数据。对于某些应用程序,只使用了少量的tablet 服务器内粗来存储Bloom 过滤器,却大幅度减少了读操作需要的磁盘访问次数。Bloom 过滤器的使用也意味着对不存在的行或列的大多数查询不需要访问硬盘。. 0047%, 在这期间由于Chubby 不可用而导致BigTable 中的部分数据不能访问(Chubby 不能访问的原因可能是Chubby 本身失效或者网络问题)。单个集群里受Chubby 失效影响最大的百分比是0. BigTable 还依赖一个高可用的、持久化的分布式锁服务组件,叫做Chubby 【8 】。一个Chubby 服务包括了5 个活动的副本,其中一个副本被选为Master ,并且积极处理请求。只有在大多数副本正常运行,并且彼此之间能够互相通信的情况下,Chubby 服务才是可用的。当有副本失效的时候,出现故障时Chubby 使用Paxos 算法【9,23 】保证副本的一致性。Chubby 提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁使用,对文件的读写操作都是原子的。Chubby 客户程序库提供对Chubby 文件的一致性缓存。每个Chubby 客户程序都维护一个与Chubby 服务的会话。如果客户程序不能在租约到期的时间内重新签订会话租约,这个会话就过期失效了(A client ’s session expires if it is unable to renew its session lease within the lease expiration time. 客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。. 许多近期的项目已经处理了很多难题,例如在广域网上提供了分布式存储或者高级服务,通常是“Internet 规模”的。这其中包括了分布式的Hash 表方面的工作,这项工作由一些诸如CAN 【29 】、Chord 【32 】、Tapestry 【37 】和Pastry 【30 】的项目发起。这些系统的强调的关注点不是由于Bigtable 出现的,比如高度变化的带宽、不可信的参与者、频繁的更改配置等;去中心化和拜占庭式容错(alex 注:Byzantine ,即拜占庭式的风格,也就是一种复杂诡秘的风格。Byzantine Fault 表示:对于处理来说,当发错误时处理器并不停止接收输入,也不停止输出,错就错了,只管算,对于这种错误来说,这样可真是够麻烦了,因为用户根本不知道错误发生了,也就根本谈不上处理错误了。在多处理器的情况下,这种错误可能导致运算正确结果的处理器也产生错误的结果,这样事情就更麻烦了,所以一定要避免处理器产生这种错误。) 也不是Bigtable 的目标。. 随着写操作的执行,memtable 的大小不断增加。当memtable 的尺寸到达一个临界值的时候,这个memtable 就会被冻结,然后创建一个新的memtable ;被冻结住memtable 会被转换成SSTable 并写入GFS (alex 注:我们称这种Compaction 行为为Minor Compaction )。Minor Compaction 过程有两个目的:一是收缩tablet 服务器内存使用,二是在服务器灾难恢复过程中,减少必须从提交日志里读取的数据量。在Compaction 过程中,引入(incoming )的读写操作仍能继续。. 当集群管理系统启动了一个master 之后,master 首先要了解当前tablet 的分配状态,之后才能够修改它们。master 在启动的时候执行以下步骤:(1 )master 在Chubby 中获取一个唯一的master 锁,用来阻止并发的master 实例;(2 )master 扫描Chubby 的服务器目录,获取寻找正在运行的服务器;(3 )master 和每一个正在运行的tablet 服务器通信,搜寻哪些tablet 已经分配到了tablet 服务器中;(4 )master 服务器扫描元数据表获取tablet 的集合。只要扫描发现了一个还没有分配的tablet ,master 就将这个tablet 加入未分配的tablet 集合,该集合使该talbet 有机会参与talbet 分配。. 在普通操作中使用单个日志提供了重大的性能收益,但是将恢复的工作复杂化了。当一个tablet 服务器宕机时,它服务的tablet 将会被移动到大量其它的tablet 服务器上:每个tablet 服务器通常都装载少量原来的服务器的tablet 。为了恢复一个tablet 的状态,新的tablet 服务器要为该tablet 重新应用原来的tablet 服务器写的提交日志中的修改操作。然而,这些tablet 修改操作被混合在同一个物理日志文件中。一种方法可以是对每一个新的tablet 服务器读取完整的提交日志文件,然后只重新应用它需要恢复的tablet 的相关条目。然而,在这种模式下,假如100 台机器中每台都加载了来自失效的tablet 服务器的一个单独的tablet ,那么这个日志文件就要被读取100 次(每个服务器读取一次)。. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。. 就提供给应用程序开发者的分布式数据存储模型而言,我们相信,分布式B-Tree 或者分布式Hash 表提供的键值对模型有很大的局限性。键值对模型是很有用的组件,但是它们不应该是提供给开发者唯一的组件。我们选择的模型比简单的键值对丰富的多,它支持稀疏的、半结构化的数据。尽管如此,它也足够简单,可以标榜为高效普通文件的代表(it lends itself to a very efficient flat-file representation );它也是透明的(通过局部性群组),允许我们的使用者对系统的重要行为进行调整。. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. 图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. )批量写入的接口,但是,Bigtable 目前还不支持通用的跨行事务处理。其次,Bigtable 允许把数据项用做整数计数器。最后,Bigtable 支持在服务器的地址空间内执行脚本程序。脚本程序使用Google 开发的用于数据处理的Sawzall 语言【28 】书写。目前,我们基于Sawzall 的API 还不允许客户脚本将数据写回Bigtable ,但是它允许多种形式的数据转换、基于任意表达式的数据过滤、以及通过多种操作符的汇总归纳。.

许多近期的项目已经处理了很多难题,例如在广域网上提供了分布式存储或者高级服务,通常是“Internet 规模”的。这其中包括了分布式的Hash 表方面的工作,这项工作由一些诸如CAN 【29 】、Chord 【32 】、Tapestry 【37 】和Pastry 【30 】的项目发起。这些系统的强调的关注点不是由于Bigtable 出现的,比如高度变化的带宽、不可信的参与者、频繁的更改配置等;去中心化和拜占庭式容错(alex 注:Byzantine ,即拜占庭式的风格,也就是一种复杂诡秘的风格。Byzantine Fault 表示:对于处理来说,当发错误时处理器并不停止接收输入,也不停止输出,错就错了,只管算,对于这种错误来说,这样可真是够麻烦了,因为用户根本不知道错误发生了,也就根本谈不上处理错误了。在多处理器的情况下,这种错误可能导致运算正确结果的处理器也产生错误的结果,这样事情就更麻烦了,所以一定要避免处理器产生这种错误。) 也不是Bigtable 的目标。. 我们得到的最宝贵的经验是简单设计的价值。考虑到我们系统的代码量(大约100000 行生产代码(alex 注:non-test code )),以及随着时间的推移,代码以难以预料的方式演变的现实,我们发现清晰的设计和编码给维护和调试带来的巨大帮助。这方面的一个例子是我们的tablet 服务器成员协议。我们第一版的协议很简单:maste 周期性地和tablet 服务器签订租约,tablet 服务器在租约过期自动退出。不幸的是,这个协议在网络问题面前大大降低系统的可用性,并且对master 服务器恢复时间很敏感。我们多次重新设计这个协议,直到它表现优异。然而,最终的协议太复杂,并且依赖一些Chubby 很少被其他应用程序运用的特性的行为。我们发现我们花费了过量的时间调试一些古怪的边角问题(obscure corner cases) ,不仅在Bigtable 代码中,也在Chubby 代码中。最后,我们废弃了这个协议,转向了一个新的简单的协议,该协议仅仅依赖最广泛使用Chubby 的特性。. Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. 手写; 拼音; 关闭; 百度首页 设置 登录. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. Bigtable 的局部性群组认识到了类似于压缩和磁盘读取方面性能的收益,这是从其他系统观察到的,这些系统以基于列而不是行的存储方式组织数据,这种系统包括C-Store 【1 ,34 】、商业产品例如Sybase IQ 【15 ,36 】、SenSage 【31 】、KDB+ 【22 】,以及MonetDB/X100 【38 】的ColumnDM 存储层。另外一种在普通文件中进行垂直和水平分区并获得很好的数据压缩率的系统是AT&T 的Daytona 数据库【19 】。局部性群组不支持Ailamaki 系统中描述的CPU 级缓存优化【2 】。. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. 我们建立一个包括N 台tablet 服务器的Bigtable 集群,通过改变N 的值来测量Bigtable 的性能和可扩展性。tablet 服务器配置了1GB 的内存,数据写入到一个包含1786 台机器、每台机器有2 个400G IDE 硬盘驱动的GFS 单元上。N 台客户机生成测试Bigtable 工作负载。(我们使用和tablet 服务器相同数目的客户机以确保客户机不会成为瓶颈。)每台机器有主频2GHZ 的双核Opteron 处理器,配置了足以容纳所有进程工作集的物理内存,以及一张千兆以太网卡。这些机器都分配到一个两层的、树状的交换网络里,在根节点上的可用总带宽大约100-200Gbps 。所有的机器采用相同的主机设备,因此,任何两台机器间的往返时间都小于1ms 。. 在向GFS 写提交日志时有时引起性能颠簸,原因是多种多样的(比如,写操作相关GFS 服务器崩溃;或者穿过到达特定组合的三个GFS 服务器的网络拥塞或者过载)。为了使修改操作免受GFS 瞬时延迟的影响,每个tablet 服务器实际上有两个日志写入线程,每个线程写自己的日志文件,并且同一时刻,两个线程只有其中之一是活跃的。如果写入活跃日志文件的效率很低,日志文件写入切换到另外一个线程,在提交日志队列中的修改操作就会由新的活跃日志写入线程写入。日志条目包含序列号,这使得恢复进程可以省略掉由于日志进程切换而造成的重复条目。. BigTable 还依赖一个高可用的、持久化的分布式锁服务组件,叫做Chubby 【8 】。一个Chubby 服务包括了5 个活动的副本,其中一个副本被选为Master ,并且积极处理请求。只有在大多数副本正常运行,并且彼此之间能够互相通信的情况下,Chubby 服务才是可用的。当有副本失效的时候,出现故障时Chubby 使用Paxos 算法【9,23 】保证副本的一致性。Chubby 提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁使用,对文件的读写操作都是原子的。Chubby 客户程序库提供对Chubby 文件的一致性缓存。每个Chubby 客户程序都维护一个与Chubby 服务的会话。如果客户程序不能在租约到期的时间内重新签订会话租约,这个会话就过期失效了(A client ’s session expires if it is unable to renew its session lease within the lease expiration time. 当集群管理系统启动了一个master 之后,master 首先要了解当前tablet 的分配状态,之后才能够修改它们。master 在启动的时候执行以下步骤:(1 )master 在Chubby 中获取一个唯一的master 锁,用来阻止并发的master 实例;(2 )master 扫描Chubby 的服务器目录,获取寻找正在运行的服务器;(3 )master 和每一个正在运行的tablet 服务器通信,搜寻哪些tablet 已经分配到了tablet 服务器中;(4 )master 服务器扫描元数据表获取tablet 的集合。只要扫描发现了一个还没有分配的tablet ,master 就将这个tablet 加入未分配的tablet 集合,该集合使该talbet 有机会参与talbet 分配。. Bigtable 是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB 级的数据。Google 的很多项目将数据存储在Bigtable 中,包括Web 索引、Google Earth 、Google Finance 。这些应用对Bigtable 提出的要求差异非常大,无论是在数据规模(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对所有Google 这些产品,Bigtable 还是成功地提供了一个灵活的、高性能的解决方案。本文描述了Bigtable 提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的布局和格式;并且我们还将描述Bigtable 的设计和实现。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。.

定制论文服务 更多信息

Ca ”的列。每个锚链接数据项只有一个版本( alex注:注意时间戳标识了列的版本, t9和 t8分别标识了两个锚链接的版本) ;而contents 列则有三个版本,分别由时间戳t3 ,t5 ,和t6 标识。. 就提供给应用程序开发者的分布式数据存储模型而言,我们相信,分布式B-Tree 或者分布式Hash 表提供的键值对模型有很大的局限性。键值对模型是很有用的组件,但是它们不应该是提供给开发者唯一的组件。我们选择的模型比简单的键值对丰富的多,它支持稀疏的、半结构化的数据。尽管如此,它也足够简单,可以标榜为高效普通文件的代表(it lends itself to a very efficient flat-file representation );它也是透明的(通过局部性群组),允许我们的使用者对系统的重要行为进行调整。. 每一次Minor Compaction 都会创建一个新的SSTable 。如果这个行为未经检查地持续下去,读操作可能需要合并来任意个SSTable 的更新;反之,我们通过定期在后台执行Merging Compaction 过程限制这类文件(shijin :SStable )的数量。Merging Compaction 过程读取一些SSTable 和memtable 的内容,输出一个新的SSTable 。只要Merging Compaction 过程完成了,作为输入的SSTable 和memtable 就可以丢弃了。. 0047%, 在这期间由于Chubby 不可用而导致BigTable 中的部分数据不能访问(Chubby 不能访问的原因可能是Chubby 本身失效或者网络问题)。单个集群里受Chubby 失效影响最大的百分比是0. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. 手写; 拼音; 关闭; 百度首页 设置 登录. 虽然我们在选择压缩算法的时候强调的是速度而不是压缩的空间,但是这种两步压缩模式效果却惊人的好。比如,在Webtable 的例子里,我们使用这种压缩方式来存储网页内容。在一次实验中,我们在一个压缩的局部性群组中存储了大量的网页。针对实验的目的,对每个文档我们限制其只有一个版本,而不是存储对我们可用的所有版本。该模式在空间上达到了10:1 的压缩比。这比经典的Gzip 在压缩HTML 页面时3:1 或者4:1 的空间压缩比好的多;这是由于Webtable 的行的布局方式:从单一主机获取的所有页面紧密存储。利用这个特性,Bentley-McIlroy 算法可以从来自同一个主机的页面里识别大量共享的引用。不仅仅是Webtable ,很多应用程序也通过选择行名来将相似的数据集聚,从而获取较高的压缩率。当我们在Bigtable 中存储同一份数据的多个版本的时候,压缩效率会更高。.

我们建立一个包括N 台tablet 服务器的Bigtable 集群,通过改变N 的值来测量Bigtable 的性能和可扩展性。tablet 服务器配置了1GB 的内存,数据写入到一个包含1786 台机器、每台机器有2 个400G IDE 硬盘驱动的GFS 单元上。N 台客户机生成测试Bigtable 工作负载。(我们使用和tablet 服务器相同数目的客户机以确保客户机不会成为瓶颈。)每台机器有主频2GHZ 的双核Opteron 处理器,配置了足以容纳所有进程工作集的物理内存,以及一张千兆以太网卡。这些机器都分配到一个两层的、树状的交换网络里,在根节点上的可用总带宽大约100-200Gbps 。所有的机器采用相同的主机设备,因此,任何两台机器间的往返时间都小于1ms 。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. 许多近期的项目已经处理了很多难题,例如在广域网上提供了分布式存储或者高级服务,通常是“Internet 规模”的。这其中包括了分布式的Hash 表方面的工作,这项工作由一些诸如CAN 【29 】、Chord 【32 】、Tapestry 【37 】和Pastry 【30 】的项目发起。这些系统的强调的关注点不是由于Bigtable 出现的,比如高度变化的带宽、不可信的参与者、频繁的更改配置等;去中心化和拜占庭式容错(alex 注:Byzantine ,即拜占庭式的风格,也就是一种复杂诡秘的风格。Byzantine Fault 表示:对于处理来说,当发错误时处理器并不停止接收输入,也不停止输出,错就错了,只管算,对于这种错误来说,这样可真是够麻烦了,因为用户根本不知道错误发生了,也就根本谈不上处理错误了。在多处理器的情况下,这种错误可能导致运算正确结果的处理器也产生错误的结果,这样事情就更麻烦了,所以一定要避免处理器产生这种错误。) 也不是Bigtable 的目标。. 有些数据库厂商已经开发了并行的数据库系统,能够存储海量的数据。Oracle 的实时应用集群数据库RAC 【27 】使用共享磁盘存储数据(Bigtable 使用GFS ),并且有一个分布式的锁管理系统(Bigtable 使用Chubby )。IBM 的DB2 并行版本【4 】基于一种类似于Bigtable 的、无共享的架构(a shared-nothing architecture )【33 】。每个DB2 的服务器都负责处理存储在一个本地关系型数据库中的表中的行的一个子集。这两种产品都提供了一个带有事务功能的完整的关系模型。. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. 选择服务论文课堂作业报告文献综述毕业论文提案毕业论文毕业论文修改专题研究论文金融建模文法校对模拟试题解答个人陈述抄袭捡查字数要求500 字 (2 页)750 字 (3 页)1000 字 (4 页)1250 字 (5 页)1500 字 (6 页)1750 字 (7 页)2000 字 (8 页)2250 字 (9 页)2500 字 (10 页)2750 字 (11 页)3000 字 (12 页)3250 字 (13 页)3500 字 (14 页)3750 字 (15 页)4000 字 (16 页)4250 字 (17 页)4500 字 (18 页)4750 字 (19 页)5000 字 (20 页)5250 字 (21 页)5500 字 (22 页)5750 字 (23 页)6000 字 (24 页)6250 字 (25 页)6500 字 (26 页)6750 字 (27 页)7000 字 (28 页)7250 字 (29 页)7500 字 (30 页)7750 字 (31 页)8000 字 (32 页)8250 字 (33 页)8500 字 (34 页)8750 字 (35 页)9000 字 (36 页)9250 字 (37 页)9500 字 (38 页)9750 字 (39 页)10000 字 (40 页)10250 字 (41 页)10500 字 (42 页)10750 字 (43 页)11000 字 (44 页)11250 字 (45 页)11500 字 (46 页)11750 字 (47 页)12000 字 (48 页)12250 字 (49 页)12500 字 (50 页)12750 字 (51 页)13000 字 (52 页)13250 字 (53 页)13500 字 (54 页)13750 字 (55 页)14000 字 (56 页)14250 字 (57 页)14500 字 (58 页)14750 字 (59 页)15000 字 (60 页)15250 字 (61 页)15500 字 (62 页)15750 字 (63 页)16000 字 (64 页)16250 字 (65 页)16500 字 (66 页)16750 字 (67 页)17000 字 (68 页)17250 字 (69 页)17500 字 (70 页)17750 字 (71 页)18000 字 (72 页)18250 字 (73 页)18500 字 (74 页)18750 字 (75 页)19000 字 (76 页)19250 字 (77 页)19500 字 (78 页)19750 字 (79 页)20000 字 (80 页)20250 字 (81 页)20500 字 (82 页)20750 字 (83 页)21000 字 (84 页)21250 字 (85 页)21500 字 (86 页)21750 字 (87 页)22000 字 (88 页)22250 字 (89 页)22500 字 (90 页)22750 字 (91 页)23000 字 (92 页)23250 字 (93 页)23500 字 (94 页)23750 字 (95 页)24000 字 (96 页)24250 字 (97 页)24500 字 (98 页)24750 字 (99 页)25000 字 (100 页)估价 £ 0.

Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. Master 负责探测一个tablet 服务器何时不再为它的tablet 提供服务,并且尽快重新分配那些tablet 。master 通过轮询tablet 服务器锁的状态来探测tablet 服务器何时不再为tablet 提供服务。如果一个tablet 服务器报告它丢失了锁,或者master 最近几次尝试都无法和该服务器通信,master 就会尝试获取该tablet 服务器文件的独占锁;如果master 能够获取独占锁,那么就说明Chubby 是正常运行的,而tablet 服务器要么是宕机了、要么是不能和Chubby 通信了,因此,为了保证该tablet 服务器不能再提供服,master 就删除该tablet 服务器在Chubby 上的服务器文件。一旦服务器文件被删除了,master 就把之前分配给该服务器的所有的tablet 放入未分配的tablet 集合中。为了确保Bigtable 集群面对master 和Chubby 之间网络问题不那么脆弱,master 在它的Chubby 会话过期时会主动退出。但是不管怎样,如上所述,master 的故障不会改变现有tablet 到tablet 服务器的分配。. BigTable 还依赖一个高可用的、持久化的分布式锁服务组件,叫做Chubby 【8 】。一个Chubby 服务包括了5 个活动的副本,其中一个副本被选为Master ,并且积极处理请求。只有在大多数副本正常运行,并且彼此之间能够互相通信的情况下,Chubby 服务才是可用的。当有副本失效的时候,出现故障时Chubby 使用Paxos 算法【9,23 】保证副本的一致性。Chubby 提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁使用,对文件的读写操作都是原子的。Chubby 客户程序库提供对Chubby 文件的一致性缓存。每个Chubby 客户程序都维护一个与Chubby 服务的会话。如果客户程序不能在租约到期的时间内重新签订会话租约,这个会话就过期失效了(A client ’s session expires if it is unable to renew its session lease within the lease expiration time. 虽然我们在选择压缩算法的时候强调的是速度而不是压缩的空间,但是这种两步压缩模式效果却惊人的好。比如,在Webtable 的例子里,我们使用这种压缩方式来存储网页内容。在一次实验中,我们在一个压缩的局部性群组中存储了大量的网页。针对实验的目的,对每个文档我们限制其只有一个版本,而不是存储对我们可用的所有版本。该模式在空间上达到了10:1 的压缩比。这比经典的Gzip 在压缩HTML 页面时3:1 或者4:1 的空间压缩比好的多;这是由于Webtable 的行的布局方式:从单一主机获取的所有页面紧密存储。利用这个特性,Bentley-McIlroy 算法可以从来自同一个主机的页面里识别大量共享的引用。不仅仅是Webtable ,很多应用程序也通过选择行名来将相似的数据集聚,从而获取较高的压缩率。当我们在Bigtable 中存储同一份数据的多个版本的时候,压缩效率会更高。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. 我们建立一个包括N 台tablet 服务器的Bigtable 集群,通过改变N 的值来测量Bigtable 的性能和可扩展性。tablet 服务器配置了1GB 的内存,数据写入到一个包含1786 台机器、每台机器有2 个400G IDE 硬盘驱动的GFS 单元上。N 台客户机生成测试Bigtable 工作负载。(我们使用和tablet 服务器相同数目的客户机以确保客户机不会成为瓶颈。)每台机器有主频2GHZ 的双核Opteron 处理器,配置了足以容纳所有进程工作集的物理内存,以及一张千兆以太网卡。这些机器都分配到一个两层的、树状的交换网络里,在根节点上的可用总带宽大约100-200Gbps 。所有的机器采用相同的主机设备,因此,任何两台机器间的往返时间都小于1ms 。. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. 我们得到的最宝贵的经验是简单设计的价值。考虑到我们系统的代码量(大约100000 行生产代码(alex 注:non-test code )),以及随着时间的推移,代码以难以预料的方式演变的现实,我们发现清晰的设计和编码给维护和调试带来的巨大帮助。这方面的一个例子是我们的tablet 服务器成员协议。我们第一版的协议很简单:maste 周期性地和tablet 服务器签订租约,tablet 服务器在租约过期自动退出。不幸的是,这个协议在网络问题面前大大降低系统的可用性,并且对master 服务器恢复时间很敏感。我们多次重新设计这个协议,直到它表现优异。然而,最终的协议太复杂,并且依赖一些Chubby 很少被其他应用程序运用的特性的行为。我们发现我们花费了过量的时间调试一些古怪的边角问题(obscure corner cases) ,不仅在Bigtable 代码中,也在Chubby 代码中。最后,我们废弃了这个协议,转向了一个新的简单的协议,该协议仅仅依赖最广泛使用Chubby 的特性。. 图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi. Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品.   在序列写的基准测试中,我们使用的列关键字的名字从0 到R-1 。这个范围又被划分为10N 个大小相同的区间。核心调度程序把这些区间分配给N 个客户端,分配方式是:一旦客户程序处理完上一个分配给它的区间,调度程序就把下一个可用的的区间分配给它。这种动态分配的方式有助于减轻客户机上运行的其它进程对性能影响的变化。我们在每个行关键字下写入一个单独的字符串。每个字符串都是随机生成的、因此也没有被压缩(alex 注:参考第6 节的压缩小节)。另外,不同行关键字下的字符串也是不同的,因此也就不可能有跨行的压缩。随机写入基准测试采用类似的方法,只是行关键字在写入前先做按R 取模的Hash ,这样就保证了在整个基准测试期间,写入的工作负载大致均匀地分布在行存储空间内。. 我们从支持Bigtable 中得到的一个实际的经验就是,适当的系统级监控是非常重要的(比如,既监控Bigtable 自身,也监控使用Bigtable 的客户程序)。比如,我们扩展了我们的RPC 系统,因此对于一个RPC 的例子,它详细记录了代表RPC 的很多重要操作。这个特性允许我们检测和修正很多的问题,比如tablet 数据结构上的锁的竞争、在提交Bigtable 修改操作时对GFS 的写入非常慢的问题、以及在元数据表的tablet 不可用时,元数据表无法访问的问题。关于监控的用途的另外一个例子是,每个Bigtable 集群都在Chubby 中注册了。这可以允许我们追踪所有集群,发现它们的大小、检查运行的我们软件的版本、他们接收的流量,以及检查是否有类似于意外高延迟等问题。. 客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。. 就提供给应用程序开发者的分布式数据存储模型而言,我们相信,分布式B-Tree 或者分布式Hash 表提供的键值对模型有很大的局限性。键值对模型是很有用的组件,但是它们不应该是提供给开发者唯一的组件。我们选择的模型比简单的键值对丰富的多,它支持稀疏的、半结构化的数据。尽管如此,它也足够简单,可以标榜为高效普通文件的代表(it lends itself to a very efficient flat-file representation );它也是透明的(通过局部性群组),允许我们的使用者对系统的重要行为进行调整。.

我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. 手写; 拼音; 关闭; 百度首页 设置 登录. 虽然我们在选择压缩算法的时候强调的是速度而不是压缩的空间,但是这种两步压缩模式效果却惊人的好。比如,在Webtable 的例子里,我们使用这种压缩方式来存储网页内容。在一次实验中,我们在一个压缩的局部性群组中存储了大量的网页。针对实验的目的,对每个文档我们限制其只有一个版本,而不是存储对我们可用的所有版本。该模式在空间上达到了10:1 的压缩比。这比经典的Gzip 在压缩HTML 页面时3:1 或者4:1 的空间压缩比好的多;这是由于Webtable 的行的布局方式:从单一主机获取的所有页面紧密存储。利用这个特性,Bentley-McIlroy 算法可以从来自同一个主机的页面里识别大量共享的引用。不仅仅是Webtable ,很多应用程序也通过选择行名来将相似的数据集聚,从而获取较高的压缩率。当我们在Bigtable 中存储同一份数据的多个版本的时候,压缩效率会更高。. 随着写操作的执行,memtable 的大小不断增加。当memtable 的尺寸到达一个临界值的时候,这个memtable 就会被冻结,然后创建一个新的memtable ;被冻结住memtable 会被转换成SSTable 并写入GFS (alex 注:我们称这种Compaction 行为为Minor Compaction )。Minor Compaction 过程有两个目的:一是收缩tablet 服务器内存使用,二是在服务器灾难恢复过程中,减少必须从提交日志里读取的数据量。在Compaction 过程中,引入(incoming )的读写操作仍能继续。. 如果master 将一个tablet 从一个tablet 服务器移到另外一个tablet 服务器,源tablet 服务器会对这个tablet 做一次Minor Compaction 。这个Compaction 操作减少了tablet 服务器日志文件中没有压缩的状态的数目,从而减少了恢复的时间。Compaction 完成之后,该tablet 服务器停止为该tablet 提供服务。在真正卸载tablet 之前,tablet 服务器还会再做一次(通常会很快)Minor Compaction ,以消除tablet 服务器日志中第一次minor compaction 执行过程中产生的未压缩的状态残留。当第二次minor compaction 完成以后,tablet 就在不需要任何日志条目恢复的情况下被装载到另一个tablet 服务器上了。. 图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi.   在序列写的基准测试中,我们使用的列关键字的名字从0 到R-1 。这个范围又被划分为10N 个大小相同的区间。核心调度程序把这些区间分配给N 个客户端,分配方式是:一旦客户程序处理完上一个分配给它的区间,调度程序就把下一个可用的的区间分配给它。这种动态分配的方式有助于减轻客户机上运行的其它进程对性能影响的变化。我们在每个行关键字下写入一个单独的字符串。每个字符串都是随机生成的、因此也没有被压缩(alex 注:参考第6 节的压缩小节)。另外,不同行关键字下的字符串也是不同的,因此也就不可能有跨行的压缩。随机写入基准测试采用类似的方法,只是行关键字在写入前先做按R 取模的Hash ,这样就保证了在整个基准测试期间,写入的工作负载大致均匀地分布在行存储空间内。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。.

手写; 拼音; 关闭; 百度首页 设置 登录. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. 2 节);存储BigTable 的模式信息(每张表的列族信息);以及存储访问控制列表。如果Chubby 长时间无法访问,BigTable 就会失效。最近我们在跨越11 个Chubby 服务实例的14 个BigTable 集群上测量了这个影响。Bigtable 服务器时钟的平均比率是0. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. Bigtable 是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB 级的数据。Google 的很多项目将数据存储在Bigtable 中,包括Web 索引、Google Earth 、Google Finance 。这些应用对Bigtable 提出的要求差异非常大,无论是在数据规模(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对所有Google 这些产品,Bigtable 还是成功地提供了一个灵活的、高性能的解决方案。本文描述了Bigtable 提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的布局和格式;并且我们还将描述Bigtable 的设计和实现。. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. Bigtable 的局部性群组认识到了类似于压缩和磁盘读取方面性能的收益,这是从其他系统观察到的,这些系统以基于列而不是行的存储方式组织数据,这种系统包括C-Store 【1 ,34 】、商业产品例如Sybase IQ 【15 ,36 】、SenSage 【31 】、KDB+ 【22 】,以及MonetDB/X100 【38 】的ColumnDM 存储层。另外一种在普通文件中进行垂直和水平分区并获得很好的数据压缩率的系统是AT&T 的Daytona 数据库【19 】。局部性群组不支持Ailamaki 系统中描述的CPU 级缓存优化【2 】。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. 许多近期的项目已经处理了很多难题,例如在广域网上提供了分布式存储或者高级服务,通常是“Internet 规模”的。这其中包括了分布式的Hash 表方面的工作,这项工作由一些诸如CAN 【29 】、Chord 【32 】、Tapestry 【37 】和Pastry 【30 】的项目发起。这些系统的强调的关注点不是由于Bigtable 出现的,比如高度变化的带宽、不可信的参与者、频繁的更改配置等;去中心化和拜占庭式容错(alex 注:Byzantine ,即拜占庭式的风格,也就是一种复杂诡秘的风格。Byzantine Fault 表示:对于处理来说,当发错误时处理器并不停止接收输入,也不停止输出,错就错了,只管算,对于这种错误来说,这样可真是够麻烦了,因为用户根本不知道错误发生了,也就根本谈不上处理错误了。在多处理器的情况下,这种错误可能导致运算正确结果的处理器也产生错误的结果,这样事情就更麻烦了,所以一定要避免处理器产生这种错误。) 也不是Bigtable 的目标。. 选择服务论文课堂作业报告文献综述毕业论文提案毕业论文毕业论文修改专题研究论文金融建模文法校对模拟试题解答个人陈述抄袭捡查字数要求500 字 (2 页)750 字 (3 页)1000 字 (4 页)1250 字 (5 页)1500 字 (6 页)1750 字 (7 页)2000 字 (8 页)2250 字 (9 页)2500 字 (10 页)2750 字 (11 页)3000 字 (12 页)3250 字 (13 页)3500 字 (14 页)3750 字 (15 页)4000 字 (16 页)4250 字 (17 页)4500 字 (18 页)4750 字 (19 页)5000 字 (20 页)5250 字 (21 页)5500 字 (22 页)5750 字 (23 页)6000 字 (24 页)6250 字 (25 页)6500 字 (26 页)6750 字 (27 页)7000 字 (28 页)7250 字 (29 页)7500 字 (30 页)7750 字 (31 页)8000 字 (32 页)8250 字 (33 页)8500 字 (34 页)8750 字 (35 页)9000 字 (36 页)9250 字 (37 页)9500 字 (38 页)9750 字 (39 页)10000 字 (40 页)10250 字 (41 页)10500 字 (42 页)10750 字 (43 页)11000 字 (44 页)11250 字 (45 页)11500 字 (46 页)11750 字 (47 页)12000 字 (48 页)12250 字 (49 页)12500 字 (50 页)12750 字 (51 页)13000 字 (52 页)13250 字 (53 页)13500 字 (54 页)13750 字 (55 页)14000 字 (56 页)14250 字 (57 页)14500 字 (58 页)14750 字 (59 页)15000 字 (60 页)15250 字 (61 页)15500 字 (62 页)15750 字 (63 页)16000 字 (64 页)16250 字 (65 页)16500 字 (66 页)16750 字 (67 页)17000 字 (68 页)17250 字 (69 页)17500 字 (70 页)17750 字 (71 页)18000 字 (72 页)18250 字 (73 页)18500 字 (74 页)18750 字 (75 页)19000 字 (76 页)19250 字 (77 页)19500 字 (78 页)19750 字 (79 页)20000 字 (80 页)20250 字 (81 页)20500 字 (82 页)20750 字 (83 页)21000 字 (84 页)21250 字 (85 页)21500 字 (86 页)21750 字 (87 页)22000 字 (88 页)22250 字 (89 页)22500 字 (90 页)22750 字 (91 页)23000 字 (92 页)23250 字 (93 页)23500 字 (94 页)23750 字 (95 页)24000 字 (96 页)24250 字 (97 页)24500 字 (98 页)24750 字 (99 页)25000 字 (100 页)估价 £ 0. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. 在向GFS 写提交日志时有时引起性能颠簸,原因是多种多样的(比如,写操作相关GFS 服务器崩溃;或者穿过到达特定组合的三个GFS 服务器的网络拥塞或者过载)。为了使修改操作免受GFS 瞬时延迟的影响,每个tablet 服务器实际上有两个日志写入线程,每个线程写自己的日志文件,并且同一时刻,两个线程只有其中之一是活跃的。如果写入活跃日志文件的效率很低,日志文件写入切换到另外一个线程,在提交日志队列中的修改操作就会由新的活跃日志写入线程写入。日志条目包含序列号,这使得恢复进程可以省略掉由于日志进程切换而造成的重复条目。. 现存tablet 的集合只有在以下事件发生时才会改变:建立了一个新表或者删除了一个旧表、两个现存tablet 合并组成一个大的tablet 、或者一个现存tablet 被分割成两个小的tablet 。master 可以跟踪这些改变,因为除了最后一个事件外的两个事件都是由它初始化的。tablet 分割事件需要特殊处理,因为它是由tablet 服务器初始化的。tablet 服务器通过在元数据表中为新的tablet 记录信息的方式提交分割操作。在分割操作提交之后tablet 服务器会通知master 。假如分割操作通知丢失(tablet 服务器或者master 宕机),master 在请求tablet 服务器装载已经被分割的tablet 的时候会探测到一个新的tablet 。由于在元数据tablet 中发现的tablet 条目只是列举了master 请求加载的tablet 的一部分,tablet 服务器会通知master 分割信息。.

更多信息 定制论文服务:

虽然我们在选择压缩算法的时候强调的是速度而不是压缩的空间,但是这种两步压缩模式效果却惊人的好。比如,在Webtable 的例子里,我们使用这种压缩方式来存储网页内容。在一次实验中,我们在一个压缩的局部性群组中存储了大量的网页。针对实验的目的,对每个文档我们限制其只有一个版本,而不是存储对我们可用的所有版本。该模式在空间上达到了10:1 的压缩比。这比经典的Gzip 在压缩HTML 页面时3:1 或者4:1 的空间压缩比好的多;这是由于Webtable 的行的布局方式:从单一主机获取的所有页面紧密存储。利用这个特性,Bentley-McIlroy 算法可以从来自同一个主机的页面里识别大量共享的引用。不仅仅是Webtable ,很多应用程序也通过选择行名来将相似的数据集聚,从而获取较高的压缩率。当我们在Bigtable 中存储同一份数据的多个版本的时候,压缩效率会更高。. 手写; 拼音; 关闭; 百度首页 设置 登录. 图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi. Bigtable 的局部性群组认识到了类似于压缩和磁盘读取方面性能的收益,这是从其他系统观察到的,这些系统以基于列而不是行的存储方式组织数据,这种系统包括C-Store 【1 ,34 】、商业产品例如Sybase IQ 【15 ,36 】、SenSage 【31 】、KDB+ 【22 】,以及MonetDB/X100 【38 】的ColumnDM 存储层。另外一种在普通文件中进行垂直和水平分区并获得很好的数据压缩率的系统是AT&T 的Daytona 数据库【19 】。局部性群组不支持Ailamaki 系统中描述的CPU 级缓存优化【2 】。. Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. 我们在仔细分析了一个类似Bigtable 的系统的种种潜在用途之后,决定选用这个数据模型。我们先举个具体的例子,这个例子促使我们做了很多设计决策;假设我们想要备份海量的网页及相关信息,这些数据可以用于很多不同的项目,我们姑且称这个特殊的表为Webtable 。在Webtable 里,我们使用URL 作为行关键字,使用网页的各种属性(aspect )作为列名,网页的内容存在“contents: ”列中,并用获取该网页的时间戳作为标识(alex注:即按照获取时间不同,存储了多个版本的网页数据 ) ,如图一所示。. 0047%, 在这期间由于Chubby 不可用而导致BigTable 中的部分数据不能访问(Chubby 不能访问的原因可能是Chubby 本身失效或者网络问题)。单个集群里受Chubby 失效影响最大的百分比是0. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。.

BigTable 还依赖一个高可用的、持久化的分布式锁服务组件,叫做Chubby 【8 】。一个Chubby 服务包括了5 个活动的副本,其中一个副本被选为Master ,并且积极处理请求。只有在大多数副本正常运行,并且彼此之间能够互相通信的情况下,Chubby 服务才是可用的。当有副本失效的时候,出现故障时Chubby 使用Paxos 算法【9,23 】保证副本的一致性。Chubby 提供了一个名字空间,里面包括了目录和小文件。每个目录或者文件可以当成一个锁使用,对文件的读写操作都是原子的。Chubby 客户程序库提供对Chubby 文件的一致性缓存。每个Chubby 客户程序都维护一个与Chubby 服务的会话。如果客户程序不能在租约到期的时间内重新签订会话租约,这个会话就过期失效了(A client ’s session expires if it is unable to renew its session lease within the lease expiration time. Bigtable 是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB 级的数据。Google 的很多项目将数据存储在Bigtable 中,包括Web 索引、Google Earth 、Google Finance 。这些应用对Bigtable 提出的要求差异非常大,无论是在数据规模(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对所有Google 这些产品,Bigtable 还是成功地提供了一个灵活的、高性能的解决方案。本文描述了Bigtable 提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的布局和格式;并且我们还将描述Bigtable 的设计和实现。. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。. Ca ”的列。每个锚链接数据项只有一个版本( alex注:注意时间戳标识了列的版本, t9和 t8分别标识了两个锚链接的版本) ;而contents 列则有三个版本,分别由时间戳t3 ,t5 ,和t6 标识。. 我们首先考虑单个tablet 服务器的性能。随机读的性能比其它所有操作慢一个数量级或以上(by the order of magnitude or more )。每个随机读操作都涉及通过网络从GFS 传输64KB 的SSTable 到tablet 服务器,这其中只有一个1000-byte 的值被用到。Tablet 服务器每秒大约执行1200 次读操作,也就是说每秒大约从GFS 读取75MB (64*1200/1024 )的数据。由于网络协议层的消耗、SSTable 解析、以及BigTable 代码执行,这个传输带宽足以占满tablet 服务器的CPU ,这个带宽也几乎足以占满我们系统中使用的网络链接。大多数采用这种访问模式的BigTable 应用程序减小Block 到一个很小的值,通常取8KB 。. 0047%, 在这期间由于Chubby 不可用而导致BigTable 中的部分数据不能访问(Chubby 不能访问的原因可能是Chubby 本身失效或者网络问题)。单个集群里受Chubby 失效影响最大的百分比是0.

Master 负责探测一个tablet 服务器何时不再为它的tablet 提供服务,并且尽快重新分配那些tablet 。master 通过轮询tablet 服务器锁的状态来探测tablet 服务器何时不再为tablet 提供服务。如果一个tablet 服务器报告它丢失了锁,或者master 最近几次尝试都无法和该服务器通信,master 就会尝试获取该tablet 服务器文件的独占锁;如果master 能够获取独占锁,那么就说明Chubby 是正常运行的,而tablet 服务器要么是宕机了、要么是不能和Chubby 通信了,因此,为了保证该tablet 服务器不能再提供服,master 就删除该tablet 服务器在Chubby 上的服务器文件。一旦服务器文件被删除了,master 就把之前分配给该服务器的所有的tablet 放入未分配的tablet 集合中。为了确保Bigtable 集群面对master 和Chubby 之间网络问题不那么脆弱,master 在它的Chubby 会话过期时会主动退出。但是不管怎样,如上所述,master 的故障不会改变现有tablet 到tablet 服务器的分配。. 2 节);存储BigTable 的模式信息(每张表的列族信息);以及存储访问控制列表。如果Chubby 长时间无法访问,BigTable 就会失效。最近我们在跨越11 个Chubby 服务实例的14 个BigTable 集群上测量了这个影响。Bigtable 服务器时钟的平均比率是0. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. 现存tablet 的集合只有在以下事件发生时才会改变:建立了一个新表或者删除了一个旧表、两个现存tablet 合并组成一个大的tablet 、或者一个现存tablet 被分割成两个小的tablet 。master 可以跟踪这些改变,因为除了最后一个事件外的两个事件都是由它初始化的。tablet 分割事件需要特殊处理,因为它是由tablet 服务器初始化的。tablet 服务器通过在元数据表中为新的tablet 记录信息的方式提交分割操作。在分割操作提交之后tablet 服务器会通知master 。假如分割操作通知丢失(tablet 服务器或者master 宕机),master 在请求tablet 服务器装载已经被分割的tablet 的时候会探测到一个新的tablet 。由于在元数据tablet 中发现的tablet 条目只是列举了master 请求加载的tablet 的一部分,tablet 服务器会通知master 分割信息。. 每一次Minor Compaction 都会创建一个新的SSTable 。如果这个行为未经检查地持续下去,读操作可能需要合并来任意个SSTable 的更新;反之,我们通过定期在后台执行Merging Compaction 过程限制这类文件(shijin :SStable )的数量。Merging Compaction 过程读取一些SSTable 和memtable 的内容,输出一个新的SSTable 。只要Merging Compaction 过程完成了,作为输入的SSTable 和memtable 就可以丢弃了。. 客户程序可以控制一个局部性群组的SSTable 是否压缩;如果压缩, 用什么格式压缩。用户指定的压缩格式应用到每个SSTable 的块中(块的大小由局部性群组的调整参数操纵)。尽管为每个分别压缩浪费了少量空间(alex 注:相比于对整个SSTable 进行压缩,分块压缩压缩率较低),我们却受益于在只读取小部分数据SSTable 的时候就不必解压整个文件了。许多客户程序使用双步(two-pass )定制压缩模式。第一步采用Bentley and McIlroy ’s 模式[6] ,这种模式横跨一个很大窗口压缩常见的长字符串;第二步采用快速压缩算法,即在一个16KB 数据的小窗口中寻找重复数据。两步压缩都很快,在现代的机器上,编码的速率达到100-200MB/s ,解码的速率达到400-1000MB/s 。. 如果master 将一个tablet 从一个tablet 服务器移到另外一个tablet 服务器,源tablet 服务器会对这个tablet 做一次Minor Compaction 。这个Compaction 操作减少了tablet 服务器日志文件中没有压缩的状态的数目,从而减少了恢复的时间。Compaction 完成之后,该tablet 服务器停止为该tablet 提供服务。在真正卸载tablet 之前,tablet 服务器还会再做一次(通常会很快)Minor Compaction ,以消除tablet 服务器日志中第一次minor compaction 执行过程中产生的未压缩的状态残留。当第二次minor compaction 完成以后,tablet 就在不需要任何日志条目恢复的情况下被装载到另一个tablet 服务器上了。. Copyright © 2004-2010 论文图书馆*六周年* -论文下载,职称论文下载、发表代理-专业服务、六年信誉、值得信赖! 版权所有
全国免费电话:400-6618-400 Email:lwlib.

777c4a0...

许多近期的项目已经处理了很多难题,例如在广域网上提供了分布式存储或者高级服务,通常是“Internet 规模”的。这其中包括了分布式的Hash 表方面的工作,这项工作由一些诸如CAN 【29 】、Chord 【32 】、Tapestry 【37 】和Pastry 【30 】的项目发起。这些系统的强调的关注点不是由于Bigtable 出现的,比如高度变化的带宽、不可信的参与者、频繁的更改配置等;去中心化和拜占庭式容错(alex 注:Byzantine ,即拜占庭式的风格,也就是一种复杂诡秘的风格。Byzantine Fault 表示:对于处理来说,当发错误时处理器并不停止接收输入,也不停止输出,错就错了,只管算,对于这种错误来说,这样可真是够麻烦了,因为用户根本不知道错误发生了,也就根本谈不上处理错误了。在多处理器的情况下,这种错误可能导致运算正确结果的处理器也产生错误的结果,这样事情就更麻烦了,所以一定要避免处理器产生这种错误。) 也不是Bigtable 的目标。. 有些数据库厂商已经开发了并行的数据库系统,能够存储海量的数据。Oracle 的实时应用集群数据库RAC 【27 】使用共享磁盘存储数据(Bigtable 使用GFS ),并且有一个分布式的锁管理系统(Bigtable 使用Chubby )。IBM 的DB2 并行版本【4 】基于一种类似于Bigtable 的、无共享的架构(a shared-nothing architecture )【33 】。每个DB2 的服务器都负责处理存储在一个本地关系型数据库中的表中的行的一个子集。这两种产品都提供了一个带有事务功能的完整的关系模型。. 2 节);存储BigTable 的模式信息(每张表的列族信息);以及存储访问控制列表。如果Chubby 长时间无法访问,BigTable 就会失效。最近我们在跨越11 个Chubby 服务实例的14 个BigTable 集群上测量了这个影响。Bigtable 服务器时钟的平均比率是0. BigTable 数据在内部使用Google SSTable 文件格式存储。SSTable 提供一个从键(key )到值(value )的持久化的、已排序、不可更改的映射(Map ),这里的key 和value 的都是任意的字节(Byte )串。对SSTable 提供了如下操作:查询与一个指定key 值相关的value ,或者遍历指定key 值范围内的所有键值对。从内部看,SSTable 是一连串的数据块(通常每个块的大小是64KB ,但是这个大小是可以配置的)。SSTable 使用块索引(通常存储在SSTable 的最后)来定位数据块;在打开SSTable 的时候,索引被加载到内存。一次查找可以通过一次磁盘搜索完成:首先执行二分查找在内存索引里找到合适数据块的位置,然后在从硬盘中读取合适的数据块。也可以选择把整个SSTable 都映射到内存中,这样就可以在不用访问硬盘的情况下执行查询搜索了。. 每一次Minor Compaction 都会创建一个新的SSTable 。如果这个行为未经检查地持续下去,读操作可能需要合并来任意个SSTable 的更新;反之,我们通过定期在后台执行Merging Compaction 过程限制这类文件(shijin :SStable )的数量。Merging Compaction 过程读取一些SSTable 和memtable 的内容,输出一个新的SSTable 。只要Merging Compaction 过程完成了,作为输入的SSTable 和memtable 就可以丢弃了。. Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. 我们在仔细分析了一个类似Bigtable 的系统的种种潜在用途之后,决定选用这个数据模型。我们先举个具体的例子,这个例子促使我们做了很多设计决策;假设我们想要备份海量的网页及相关信息,这些数据可以用于很多不同的项目,我们姑且称这个特殊的表为Webtable 。在Webtable 里,我们使用URL 作为行关键字,使用网页的各种属性(aspect )作为列名,网页的内容存在“contents: ”列中,并用获取该网页的时间戳作为标识(alex注:即按照获取时间不同,存储了多个版本的网页数据 ) ,如图一所示。.

截止到2006 年8 月有388 个非测试用的Bigtable 集群运行在各种各样的Google 机器集群上,合计大约有24500 个tablet 服务器。表1 显示了每个集群上tablet 服务器的大致分布情况。这些集群中,许多用于开发目的,因此在引人注意的一段时期内比较空闲。通过观察一个由14 个忙碌集群、8069 个tablet 服务器组成的群组,我们看到整体的流量超过了每秒120 万次请求,发送到系统的RPC 请求导致的网络负载达到了741MB/s ,系统发出的RPC 请求网络负载大约是16GB/s 。

3 节所述,一个读操作必须读取组成tablet 状态的所有SSTable 的数据。如果这些SSTable 不在内存中,那么就需要多次访问硬盘。我们通过允许客户程序对特定局部性群组的SSTable 指定Bloom 过滤器【7 】,来减少硬盘访问的次数。通过bloom 过滤器我们可以查询一个SSTable 是否包含了特定行/ 列对的数据。对于某些应用程序,只使用了少量的tablet 服务器内粗来存储Bloom 过滤器,却大幅度减少了读操作需要的磁盘访问次数。Bloom 过滤器的使用也意味着对不存在的行或列的大多数查询不需要访问硬盘。. Bigtable 还支持一些其它的特性,这些特性允许用户以更复杂的方法操作数据。首先,Bigtable 支持单行上事务处理,利用这个功能,用户可以对存储在一个单独行关键字下的数据执行原子性的读取- 更新- 写入操作。虽然Bigtable 提供了一个允许用户跨行关键字(at the clients. 截止到2006 年8 月有388 个非测试用的Bigtable 集群运行在各种各样的Google 机器集群上,合计大约有24500 个tablet 服务器。表1 显示了每个集群上tablet 服务器的大致分布情况。这些集群中,许多用于开发目的,因此在引人注意的一段时期内比较空闲。通过观察一个由14 个忙碌集群、8069 个tablet 服务器组成的群组,我们看到整体的流量超过了每秒120 万次请求,发送到系统的RPC 请求导致的网络负载达到了741MB/s ,系统发出的RPC 请求网络负载大约是16GB/s 。. Professional Academic Writing, Editing & Research 母语专家给予您全天候高质量论文定制写作服务. 我们建立一个包括N 台tablet 服务器的Bigtable 集群,通过改变N 的值来测量Bigtable 的性能和可扩展性。tablet 服务器配置了1GB 的内存,数据写入到一个包含1786 台机器、每台机器有2 个400G IDE 硬盘驱动的GFS 单元上。N 台客户机生成测试Bigtable 工作负载。(我们使用和tablet 服务器相同数目的客户机以确保客户机不会成为瓶颈。)每台机器有主频2GHZ 的双核Opteron 处理器,配置了足以容纳所有进程工作集的物理内存,以及一张千兆以太网卡。这些机器都分配到一个两层的、树状的交换网络里,在根节点上的可用总带宽大约100-200Gbps 。所有的机器采用相同的主机设备,因此,任何两台机器间的往返时间都小于1ms 。. 就提供给应用程序开发者的分布式数据存储模型而言,我们相信,分布式B-Tree 或者分布式Hash 表提供的键值对模型有很大的局限性。键值对模型是很有用的组件,但是它们不应该是提供给开发者唯一的组件。我们选择的模型比简单的键值对丰富的多,它支持稀疏的、半结构化的数据。尽管如此,它也足够简单,可以标榜为高效普通文件的代表(it lends itself to a very efficient flat-file representation );它也是透明的(通过局部性群组),允许我们的使用者对系统的重要行为进行调整。. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. 我们在仔细分析了一个类似Bigtable 的系统的种种潜在用途之后,决定选用这个数据模型。我们先举个具体的例子,这个例子促使我们做了很多设计决策;假设我们想要备份海量的网页及相关信息,这些数据可以用于很多不同的项目,我们姑且称这个特殊的表为Webtable 。在Webtable 里,我们使用URL 作为行关键字,使用网页的各种属性(aspect )作为列名,网页的内容存在“contents: ”列中,并用获取该网页的时间戳作为标识(alex注:即按照获取时间不同,存储了多个版本的网页数据 ) ,如图一所示。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. Ca ”的列。每个锚链接数据项只有一个版本( alex注:注意时间戳标识了列的版本, t9和 t8分别标识了两个锚链接的版本) ;而contents 列则有三个版本,分别由时间戳t3 ,t5 ,和t6 标识。. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. Bigtable 是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB 级的数据。Google 的很多项目将数据存储在Bigtable 中,包括Web 索引、Google Earth 、Google Finance 。这些应用对Bigtable 提出的要求差异非常大,无论是在数据规模(从URL 到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对所有Google 这些产品,Bigtable 还是成功地提供了一个灵活的、高性能的解决方案。本文描述了Bigtable 提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的布局和格式;并且我们还将描述Bigtable 的设计和实现。. 一个教训是,我们发现,很多类型的错误都会导致大型分布式系统受损,不仅仅是通常的网络中断、或者很多分布式协议中设想的fail-stop 错误(alex 注:fail-stop failture ,指一旦系统fail 就stop ,不输出任何数据;fail-fast failture ,指fail 不马上stop ,在短时间内return 错误信息,然后再stop )。比如,我们遇到过下面这些类型的错误导致的问题:内存数据损坏、网络中断、时钟偏差、机器挂起、扩展的和非对称的网络分区(alex 注:extended and asymmetric network partitio ns ,不明白什么意思。partition 也有中断的意思,但是我不知道如何用在这里)、我们使用的其它系统的Bug (比如Chubby )、GFS 配额溢出、计划内和计划外的硬件维护。随着我们在这些问题中得到更多经验,我们通过修改各种协议来解决(address )这些问题。比如,我们在RPC 机制中加入了检验和Checksum 。我们通过移除系统的其他部分针对另一部分作出的假设来解决这些问题。例如,我们不再假设一个给定的Chubby 操作只返回固定错误码集合中的一个值。. 在普通操作中使用单个日志提供了重大的性能收益,但是将恢复的工作复杂化了。当一个tablet 服务器宕机时,它服务的tablet 将会被移动到大量其它的tablet 服务器上:每个tablet 服务器通常都装载少量原来的服务器的tablet 。为了恢复一个tablet 的状态,新的tablet 服务器要为该tablet 重新应用原来的tablet 服务器写的提交日志中的修改操作。然而,这些tablet 修改操作被混合在同一个物理日志文件中。一种方法可以是对每一个新的tablet 服务器读取完整的提交日志文件,然后只重新应用它需要恢复的tablet 的相关条目。然而,在这种模式下,假如100 台机器中每台都加载了来自失效的tablet 服务器的一个单独的tablet ,那么这个日志文件就要被读取100 次(每个服务器读取一次)。. 在过去两年半时间里,我们设计、实现并部署了一个用于管理结构化数据的分布式的存储系统—在Google ,我们称之为Bigtable 。Bigtable 的设计目的是可靠地适应PB 级别的数据和成千上万台机器。Bigtable 已经实现了下面的几个目标:广泛的适用性、可扩展、高性能和高可用性。已经有超过60 个Google 的产品和项目在使用Bigtable ,包括Google Analytics 、Google Finance 、Orkut 、Personalized Search 、Writely 和Google Earth 。这些产品使用Bigtable 完成迥异的工作负载需求,这些需求从面向吞吐量的批处理作业到对终端用户而言延时敏感的数据服务。它们使用的Bigtable 集群的配置也有很大的差异,从少数机器到成千上万台服务器,这些服务器里最多可存储几百TB 的数据。.

Bigtable 的局部性群组认识到了类似于压缩和磁盘读取方面性能的收益,这是从其他系统观察到的,这些系统以基于列而不是行的存储方式组织数据,这种系统包括C-Store 【1 ,34 】、商业产品例如Sybase IQ 【15 ,36 】、SenSage 【31 】、KDB+ 【22 】,以及MonetDB/X100 【38 】的ColumnDM 存储层。另外一种在普通文件中进行垂直和水平分区并获得很好的数据压缩率的系统是AT&T 的Daytona 数据库【19 】。局部性群组不支持Ailamaki 系统中描述的CPU 级缓存优化【2 】。. 我们在仔细分析了一个类似Bigtable 的系统的种种潜在用途之后,决定选用这个数据模型。我们先举个具体的例子,这个例子促使我们做了很多设计决策;假设我们想要备份海量的网页及相关信息,这些数据可以用于很多不同的项目,我们姑且称这个特殊的表为Webtable 。在Webtable 里,我们使用URL 作为行关键字,使用网页的各种属性(aspect )作为列名,网页的内容存在“contents: ”列中,并用获取该网页的时间戳作为标识(alex注:即按照获取时间不同,存储了多个版本的网页数据 ) ,如图一所示。. 客户程序可以控制一个局部性群组的SSTable 是否压缩;如果压缩, 用什么格式压缩。用户指定的压缩格式应用到每个SSTable 的块中(块的大小由局部性群组的调整参数操纵)。尽管为每个分别压缩浪费了少量空间(alex 注:相比于对整个SSTable 进行压缩,分块压缩压缩率较低),我们却受益于在只读取小部分数据SSTable 的时候就不必解压整个文件了。许多客户程序使用双步(two-pass )定制压缩模式。第一步采用Bentley and McIlroy ’s 模式[6] ,这种模式横跨一个很大窗口压缩常见的长字符串;第二步采用快速压缩算法,即在一个16KB 数据的小窗口中寻找重复数据。两步压缩都很快,在现代的机器上,编码的速率达到100-200MB/s ,解码的速率达到400-1000MB/s 。. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. 我们得到的最宝贵的经验是简单设计的价值。考虑到我们系统的代码量(大约100000 行生产代码(alex 注:non-test code )),以及随着时间的推移,代码以难以预料的方式演变的现实,我们发现清晰的设计和编码给维护和调试带来的巨大帮助。这方面的一个例子是我们的tablet 服务器成员协议。我们第一版的协议很简单:maste 周期性地和tablet 服务器签订租约,tablet 服务器在租约过期自动退出。不幸的是,这个协议在网络问题面前大大降低系统的可用性,并且对master 服务器恢复时间很敏感。我们多次重新设计这个协议,直到它表现优异。然而,最终的协议太复杂,并且依赖一些Chubby 很少被其他应用程序运用的特性的行为。我们发现我们花费了过量的时间调试一些古怪的边角问题(obscure corner cases) ,不仅在Bigtable 代码中,也在Chubby 代码中。最后,我们废弃了这个协议,转向了一个新的简单的协议,该协议仅仅依赖最广泛使用Chubby 的特性。. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。.

我们得到的最宝贵的经验是简单设计的价值。考虑到我们系统的代码量(大约100000 行生产代码(alex 注:non-test code )),以及随着时间的推移,代码以难以预料的方式演变的现实,我们发现清晰的设计和编码给维护和调试带来的巨大帮助。这方面的一个例子是我们的tablet 服务器成员协议。我们第一版的协议很简单:maste 周期性地和tablet 服务器签订租约,tablet 服务器在租约过期自动退出。不幸的是,这个协议在网络问题面前大大降低系统的可用性,并且对master 服务器恢复时间很敏感。我们多次重新设计这个协议,直到它表现优异。然而,最终的协议太复杂,并且依赖一些Chubby 很少被其他应用程序运用的特性的行为。我们发现我们花费了过量的时间调试一些古怪的边角问题(obscure corner cases) ,不仅在Bigtable 代码中,也在Chubby 代码中。最后,我们废弃了这个协议,转向了一个新的简单的协议,该协议仅仅依赖最广泛使用Chubby 的特性。. 如图5 所示,tablet 的持久化状态信息保存在GFS 上。更新操作提交到存储撤销(REDO) 记录的提交日志中。在这些更新操作中,最近提交的那些存放在一个叫做memtable 的排序的缓冲区中;较早的更新存放在一系列SSTable 中。为了恢复一个tablet ,tablet 服务器在元数据表中读取它的元数据。这些元数据包含组成一个tablet 的SSTable 列表和一组还原点(redo points ),这些点是指向包含tablet 数据的任一提交日志的指针。tablet 服务器把SSTable 的索引读进内存,之后通过应用还原点之后提交的所有更新来重构memtable 。. 重写所有的SSTable 到一个新的SSTable 的Merging Compaction 过程叫作Major Compaction 。由非Major Compaction 产生的SSTable 可以包含特殊的删除条目,这些删除条目能够禁止仍然可用的较早SSTable 中已删除的数据(STables produced by non-major compactions can contain special deletion  entries that suppres s deleted data in older SSTables that are still live )。另一方面,Major Compaction 过程生成的SSTable 不包含已经删除的信息或数据。Bigtable 循环扫描它所有的tablet 并且定期对它们应用Major Compaction 。Major Compaction 机制允许Bigtable 回收已经删除的数据使用的资源,并且确保已删除的数据及时从系统内消失(alex 注:实际是回收资源。数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存储敏感数据的服务是非常重要的。. 现存tablet 的集合只有在以下事件发生时才会改变:建立了一个新表或者删除了一个旧表、两个现存tablet 合并组成一个大的tablet 、或者一个现存tablet 被分割成两个小的tablet 。master 可以跟踪这些改变,因为除了最后一个事件外的两个事件都是由它初始化的。tablet 分割事件需要特殊处理,因为它是由tablet 服务器初始化的。tablet 服务器通过在元数据表中为新的tablet 记录信息的方式提交分割操作。在分割操作提交之后tablet 服务器会通知master 。假如分割操作通知丢失(tablet 服务器或者master 宕机),master 在请求tablet 服务器装载已经被分割的tablet 的时候会探测到一个新的tablet 。由于在元数据tablet 中发现的tablet 条目只是列举了master 请求加载的tablet 的一部分,tablet 服务器会通知master 分割信息。. Bigtable 通过行关键字的字典顺序来维护数据。表中一定范围内的行被动态分区。每个分区叫做一个”Tablet ”,Tablet 是数据分布和负载均衡的单位。这样做的结果是,读取一定范围内的少数行很高效,并且往往只需要跟少数机器通信。用户可以通过选择他们的行关键字来开发这种特性,这样可以为他们的数据访问获得好的本地性(get good locality) 。举例来说,我们在关键字com. BigTable 使用Chubby 跟踪记录tablet 服务器。当一个tablet 服务器启动时,它在一个指定的Chubby 目录下建立一个有唯一名字的文件,并且获取该文件的独占锁。master 监控着这个目录(服务器目录)y 以便范闲tablet 服务器。如果tablet 服务器失去了Chubby 上的独占锁—比如由于网络断开导致tablet 服务器丢失Chubby 会话—它就停止对tablet 提供服务。(Chubby 提供了一种高效的机制,利用这种机制,tablet 服务器能够在不招致网络拥堵的情况下检查其是否还持有该锁)。只要该文件还存在,tablet 服务器就会试图重新获得对该独占锁;如果文件不存在了,那么tablet 服务器就永远不能再提供服务了,它会自行退出(so it kills itself )。只要tablet 服务器终止(比如,集群的管理系统将该tablet 服务器的主机从集群中移除),它会尝试释放它持有的锁,以便master 尽快重新分配它的tablet 。. 尽管如此,性能并不是线性增长。在大多数的基准测试中,当tablet 服务器的数量从1 台增加到50 台时,每台服务器的吞吐量会有一个明显的下降。这种下降是由于多台服务器配置中的负载不均衡导致的,通常是由于其它的程序争夺CPU 和网络。我们的负载均衡算法试图处理这种不均衡,但是基于两个主要原因导致这个算法效果不尽如人意:一个是由于减少tablet 的移动而导致重新均衡负载能力受限(当tablet 被移动了,那么短时间内—通常是1 秒内—这个tablet 是不可用的),另一个是在基准测试进行中其产生的负载会有波动(alex 注:the load generated by our benchmarks shifts around as the benchmark progresses )。. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. 0047%, 在这期间由于Chubby 不可用而导致BigTable 中的部分数据不能访问(Chubby 不能访问的原因可能是Chubby 本身失效或者网络问题)。单个集群里受Chubby 失效影响最大的百分比是0.

图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi. 截止到2006 年8 月有388 个非测试用的Bigtable 集群运行在各种各样的Google 机器集群上,合计大约有24500 个tablet 服务器。表1 显示了每个集群上tablet 服务器的大致分布情况。这些集群中,许多用于开发目的,因此在引人注意的一段时期内比较空闲。通过观察一个由14 个忙碌集群、8069 个tablet 服务器组成的群组,我们看到整体的流量超过了每秒120 万次请求,发送到系统的RPC 请求导致的网络负载达到了741MB/s ,系统发出的RPC 请求网络负载大约是16GB/s 。. 随着写操作的执行,memtable 的大小不断增加。当memtable 的尺寸到达一个临界值的时候,这个memtable 就会被冻结,然后创建一个新的memtable ;被冻结住memtable 会被转换成SSTable 并写入GFS (alex 注:我们称这种Compaction 行为为Minor Compaction )。Minor Compaction 过程有两个目的:一是收缩tablet 服务器内存使用,二是在服务器灾难恢复过程中,减少必须从提交日志里读取的数据量。在Compaction 过程中,引入(incoming )的读写操作仍能继续。. 虽然我们在选择压缩算法的时候强调的是速度而不是压缩的空间,但是这种两步压缩模式效果却惊人的好。比如,在Webtable 的例子里,我们使用这种压缩方式来存储网页内容。在一次实验中,我们在一个压缩的局部性群组中存储了大量的网页。针对实验的目的,对每个文档我们限制其只有一个版本,而不是存储对我们可用的所有版本。该模式在空间上达到了10:1 的压缩比。这比经典的Gzip 在压缩HTML 页面时3:1 或者4:1 的空间压缩比好的多;这是由于Webtable 的行的布局方式:从单一主机获取的所有页面紧密存储。利用这个特性,Bentley-McIlroy 算法可以从来自同一个主机的页面里识别大量共享的引用。不仅仅是Webtable ,很多应用程序也通过选择行名来将相似的数据集聚,从而获取较高的压缩率。当我们在Bigtable 中存储同一份数据的多个版本的时候,压缩效率会更高。. 我们从支持Bigtable 中得到的一个实际的经验就是,适当的系统级监控是非常重要的(比如,既监控Bigtable 自身,也监控使用Bigtable 的客户程序)。比如,我们扩展了我们的RPC 系统,因此对于一个RPC 的例子,它详细记录了代表RPC 的很多重要操作。这个特性允许我们检测和修正很多的问题,比如tablet 数据结构上的锁的竞争、在提交Bigtable 修改操作时对GFS 的写入非常慢的问题、以及在元数据表的tablet 不可用时,元数据表无法访问的问题。关于监控的用途的另外一个例子是,每个Bigtable 集群都在Chubby 中注册了。这可以允许我们追踪所有集群,发现它们的大小、检查运行的我们软件的版本、他们接收的流量,以及检查是否有类似于意外高延迟等问题。. Master 负责探测一个tablet 服务器何时不再为它的tablet 提供服务,并且尽快重新分配那些tablet 。master 通过轮询tablet 服务器锁的状态来探测tablet 服务器何时不再为tablet 提供服务。如果一个tablet 服务器报告它丢失了锁,或者master 最近几次尝试都无法和该服务器通信,master 就会尝试获取该tablet 服务器文件的独占锁;如果master 能够获取独占锁,那么就说明Chubby 是正常运行的,而tablet 服务器要么是宕机了、要么是不能和Chubby 通信了,因此,为了保证该tablet 服务器不能再提供服,master 就删除该tablet 服务器在Chubby 上的服务器文件。一旦服务器文件被删除了,master 就把之前分配给该服务器的所有的tablet 放入未分配的tablet 集合中。为了确保Bigtable 集群面对master 和Chubby 之间网络问题不那么脆弱,master 在它的Chubby 会话过期时会主动退出。但是不管怎样,如上所述,master 的故障不会改变现有tablet 到tablet 服务器的分配。. Com 投诉/建议:Tel:13074882005 闽ICP备09044015号
专科/本科毕业论文/现成论文QQ: 519390826 职称论文/发表论文QQ: 86887671 硕士论文/学术不端检测QQ: 1600786865 加盟/合作/投诉QQ: 86685388
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除. 有些数据库厂商已经开发了并行的数据库系统,能够存储海量的数据。Oracle 的实时应用集群数据库RAC 【27 】使用共享磁盘存储数据(Bigtable 使用GFS ),并且有一个分布式的锁管理系统(Bigtable 使用Chubby )。IBM 的DB2 并行版本【4 】基于一种类似于Bigtable 的、无共享的架构(a shared-nothing architecture )【33 】。每个DB2 的服务器都负责处理存储在一个本地关系型数据库中的表中的行的一个子集。这两种产品都提供了一个带有事务功能的完整的关系模型。.

Array糯米 新闻 hao123 地图 视频 贴吧 登录 设置 更多产品. 图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL 。contents 列族容纳的是网页的内容,anchor 列族容纳引用该网页的锚链接文本。CNN 的主页被Sports Illustrater 和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsi. 客户程序可以控制一个局部性群组的SSTable 是否压缩;如果压缩, 用什么格式压缩。用户指定的压缩格式应用到每个SSTable 的块中(块的大小由局部性群组的调整参数操纵)。尽管为每个分别压缩浪费了少量空间(alex 注:相比于对整个SSTable 进行压缩,分块压缩压缩率较低),我们却受益于在只读取小部分数据SSTable 的时候就不必解压整个文件了。许多客户程序使用双步(two-pass )定制压缩模式。第一步采用Bentley and McIlroy ’s 模式[6] ,这种模式横跨一个很大窗口压缩常见的长字符串;第二步采用快速压缩算法,即在一个16KB 数据的小窗口中寻找重复数据。两步压缩都很快,在现代的机器上,编码的速率达到100-200MB/s ,解码的速率达到400-1000MB/s 。. 客户程序库会缓存tablet 的位置信息。如果客户程序不知道一个tablet 的位置信息,或者发现它缓存的地址信息不正确,那么客户程序就递归移动到tablet 位置层次;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby 读操作。如果客户端缓存的地址信息过期了,那么寻址算法可能进行多达6 次(alex 注:其中的三次通信发现缓存过期,另外三次更新缓存数据)网络来回通信,因为过期缓存条目只有在没有查到数据(upon misses )的时候才能发现 ( 假设元数据tablet 没有被频繁的移动)。尽管tablet 的位置信息是存放在内存里的,所以不需访问GFS ,但是,通常我们会通过预取tablet 地址来进一步的减少访问开销:无论何时读取元数据表,都会为不止一个tablet 读取元数据。. 当集群管理系统启动了一个master 之后,master 首先要了解当前tablet 的分配状态,之后才能够修改它们。master 在启动的时候执行以下步骤:(1 )master 在Chubby 中获取一个唯一的master 锁,用来阻止并发的master 实例;(2 )master 扫描Chubby 的服务器目录,获取寻找正在运行的服务器;(3 )master 和每一个正在运行的tablet 服务器通信,搜寻哪些tablet 已经分配到了tablet 服务器中;(4 )master 服务器扫描元数据表获取tablet 的集合。只要扫描发现了一个还没有分配的tablet ,master 就将这个tablet 加入未分配的tablet 集合,该集合使该talbet 有机会参与talbet 分配。. Ca ”的列。每个锚链接数据项只有一个版本( alex注:注意时间戳标识了列的版本, t9和 t8分别标识了两个锚链接的版本) ;而contents 列则有三个版本,分别由时间戳t3 ,t5 ,和t6 标识。.   在序列写的基准测试中,我们使用的列关键字的名字从0 到R-1 。这个范围又被划分为10N 个大小相同的区间。核心调度程序把这些区间分配给N 个客户端,分配方式是:一旦客户程序处理完上一个分配给它的区间,调度程序就把下一个可用的的区间分配给它。这种动态分配的方式有助于减轻客户机上运行的其它进程对性能影响的变化。我们在每个行关键字下写入一个单独的字符串。每个字符串都是随机生成的、因此也没有被压缩(alex 注:参考第6 节的压缩小节)。另外,不同行关键字下的字符串也是不同的,因此也就不可能有跨行的压缩。随机写入基准测试采用类似的方法,只是行关键字在写入前先做按R 取模的Hash ,这样就保证了在整个基准测试期间,写入的工作负载大致均匀地分布在行存储空间内。.

3 Comments

  1. Andreas
  2. Meyer
  3. Faust

发表评论

Your email address will not be published. Required fields are marked *