欢迎来到天天文库
浏览记录
ID:50473761
大小:31.48 KB
页数:6页
时间:2020-03-09
《谷歌经典论文BigTable翻译.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、前记几年前在读Google的BigTable论文的时候,当时并没有理解论文里面表达的思想,因而囫囵吞枣,并没有注意到SSTable的概念。再后来开始关注HBase的设计和源码后,开始对BigTable传递的思想慢慢的清晰起来,但是因为事情太多,没有安排出时间重读BigTable的论文。在项目里,我因为自己在学HBase,开始主推HBase,而另一个同事则因为对Cassandra比较感冒,因而他主要关注Cassandra的设计,不过我们两个人偶尔都会讨论一下技术、设计的各种观点和心得,然后他偶然的说了一句:Cassa
2、ndra和HBase都采用SSTable格式存储,然后我本能的问了一句:什么是SSTable?他并没有回答,可能也不是那么几句能说清楚的,或者他自己也没有尝试的去问过自己这个问题。然而这个问题本身却一直困扰着我,因而趁着现在有一些时间深入学习HBase和Cassandra相关设计的时候先把这个问题弄清楚了。SSTable的定义要解释这个术语的真正含义,最好的方法就是从它的出处找答案,所以重新翻开BigTable的论文。在这篇论文中,最初对SSTable是这么描述的(第三页末和第四页初):SSTableTheGoog
3、le SSTable fileformatisusedinternallytostoreBigtabledata.An SSTable providesa persistent,orderedimmutablemapfromkeystovalues,wherebothkeysandvaluesarearbitrarybytestrings. Operationsareprovidedtolookupthevalueassociatedwithaspecified key,andtoiterateoverallkey
4、/valuepairsinaspecifiedkeyrange.Internally,eachSSTablecontainsasequenceofblocks(typicallyeachblockis64KBinsize,butthisisconfigurable).Ablockindex(storedattheendoftheSSTable)isusedtolocateblocks;theindexisloadedintomemorywhentheSSTableisopened.Alookupcanbeperfo
5、rmedwithasinglediskseek:wefirstfindtheappropriateblockbyperformingabinarysearchinthein-memoryindex,andthenreadingtheappropriateblockfromdisk.Optionally,anSSTablecanbecompletelymappedintomemory,whichallowsustoperformlookupsandscanswithouttouchingdisk.简单的非直译:SST
6、able是Bigtable内部用于数据的文件格式,它的格式为文件本身就是一个排序的、不可变的、持久的Key/Value对Map,其中Key和value都可以是任意的byte字符串。使用Key来查找Value,或通过给定Key范围遍历所有的Key/Value对。每个SSTable包含一系列的Block(一般Block大小为64KB,但是它是可配置的),在SSTable的末尾是Block索引,用于定位Block,这些索引在SSTable打开时被加载到内存中,在查找时首先从内存中的索引二分查找找到Block,然后一次磁盘
7、寻道即可读取到相应的Block。还有一种方案是将这个SSTable加载到内存中,从而在查找和扫描中不需要读取磁盘。这个貌似就是HFile第一个版本的格式么,贴张图感受一下:在HBase使用过程中,对这个版本的HFile遇到以下一些问题(参考这里):1.解析时内存使用量比较高。2.BloomFilter和Block索引会变的很大,而影响启动性能。具体的,BloomFilter可以增长到100MB每个HFile,而Block索引可以增长到300MB,如果一个HRegionServer中有20个HRegion,则他们分别
8、能增长到2GB和6GB的大小。HRegion需要在打开时,需要加载所有的Block索引到内存中,因而影响启动性能;而在第一次Request时,需要将整个BloomFilter加载到内存中,再开始查找,因而BloomFilter太大会影响第一次请求的延迟。而HFile在版本2中对这些问题做了一些优化,具体会在HFile解析时详细说明。SSTable作为存储使用
此文档下载收益归作者所有