BigTable读后笔记

  • GFS可能出现重复记录或者padding,Bigtable如何处理这种情况使得对外提供强一致性模型?
ANS: Bigtable写入GFS的数据分为两种: 1)操作日志,当Tablet Server发生故障时,它上面服务的子表会被集群中的其他Tablet Server继续提供服务,加载子表可能需要回放操作日志,每条操作日志唯一的序号,通过它可以去除重复的操作日志。
2)每个子表包含的SSTable数据,如果写入GFS失败可以重试并产生多条重复记录,但是Bigtable只会索引最后一条写入成功的记录。
  • 为什么Bigtable设计成Root、Meta、User三级结构,而不是两级或者四级结构?
ANS:采用这种三层结构的存储模式,可以标识2^34 个 Tablet 的地址(如果每个 Tablet 存储 128MB 数据,那么一共可以存储 2^61 字节数据)。
  • 读取某一行用户数据,最多需要几次请求?分别是什么?
ANS:客户程序使用的库会缓存 Tablet 的位置信息。如果客户程序没有缓存某个 Tablet 的地址信息,或者发现它缓存的地址信息不正确,客户程序就在树状的存储结构中递归的查询 Tablet 位置信息;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次 Chubby 读操作;如果客户端缓存的地址信息过期了,那么寻址算法可能需要最多6次网络来回通信才能更新数据,因为只有在缓存中没有查到数据的时候才能发现数据过期
  • 如何保证同一个tablet不会被多台机器同时服务?
ANS: Master将子表分配给某个Tablet Server服务时需要确保没有其他的TS正在服务这个子表。通过Chubby的互斥锁机制保证的,TS启动时需要获取Chubby互斥锁,当TS出现故障,Master需要等到TS的互斥锁失效,才能把它上面的子表迁移到其他TS上。
  • Tablet在内存中的数据结构如何设计?
(row:string, column:string, timestamp:int64) ->string
map<RowKey, map<ColummnFamily:Qualifier, map<Timestamp, Value>>>
  • 如何设计SSTable的存储格式?
 按字典排序。
数据在SSTable连续存放,可以满足随机读取和顺序读取两种需求。
按主键有序存储,每个SSTable由若干个大小相近的数据块组成,每个数据包含若干行。数据块的大小在8到64KB之间。
  • minor、merging、major这三种compaction有什么区别?
minor每次都创建一个新的SSTABLE;
因为读操作可能需要合并来自多个SSTABLE的更新,通过定期在后台执行Merging合并文件,限制文件的数量。合并所有SSTABLE的Merging过程叫作Major,已经不包含已经删除的信息或数据。
Minor Compaction是为了防止内存占用过多,Merging和Major Compaction是为了防止文件个数过多。
  • Tablet Server的缓存如何实现?
为了提高读操作的性能,Tablet 服务器使用二级缓存的策略。扫描缓存是第一级缓存,主要缓存 Tablet服务器通过 SSTable 接口获取的 Key-Value 对;Block 缓存是二级缓存,缓存的是从 GFS 读取的SSTable的Block。对于经常要重复读取相同数据的应用程序来说,扫描缓存非常有效;对于经常要读取刚刚读过的数据附近的数据的应用程序来说,Block 缓存更有用(例如,顺序读,或者在一个热点的行的局部性群组中随机读取不同的列)。
  • 如果tablet出现故障,需要将服务迁移到其它机器,这个过程需要排序操作日志。如何实现?
使用单个日志显著提高了普通操作的性能,但是将恢复的工作复杂化了。
为了避免多次读取日志文件,我们首先把日志按照关键字排序。
为了并行排序, 我们先将日志分割成64MB的段,之后在不同的Tablet服务器对段进行并行排序。这个排序工作由Master服务器来协同处理,并且在一个Tablet服务器表明自己需要从commit日志文件恢复Tablet时开始执行。
  • 如何使得tablet迁移过程停服务时间尽量短?
ANS:当 Master 服务器将一个 Tablet 从一个 Tablet 服务器移到另外一个 Tablet 服务器时,源 Tablet 服务器会对这个 Tablet 做一次 Minor Compaction。这个 Compaction 操作减少了 Tablet 服务器的日志文件中没有归并的记录,从而减少了恢复的时间。Compaction 完成之后,该服务器就停止为该 Tablet 提供服务。在卸载 Tablet 之前,源 Tablet 服务器还会再做一次(通常会很快)Minor Compaction,以消除前面在一次压缩过程中又产生的未归并的记录。第二次 Minor Compaction 完成以后,Tablet 就可以被装载到新的 Tablet 服务器上了,并且不需要从日志中进行恢复。
两次Minor Compaction
  • tablet分裂的流程是怎样的?
BT的子表的数据分成内存中的MemTable和GFS中的多个SSTable,由于BT中同一个子表只被一台TS服务,进行分裂也较为简单。BT上执行分裂操作不需要进行实际的数据拷贝工作,只需要将内存中的索引信息分布两份。分裂之后两个子表各自写不同的MemTable,等到执行Compaction操作时再根据分裂后的子表范围生成不同的SSTable,无用的数据自然成为垃圾被回收。另外,用户表的分裂需要修改元数据表,元数据表的分裂需要修改根表。
  • tablet合并的流程是怎样的?
合并操作由Master发起,相比分裂操作要更加复杂,由于待合并的两个子表可能被不同的TS加载,所以第一步需要迁移其中一个子表,以使它们在同一个TS上,接着通知TS执行子表合并。

BigTable读后笔记的更多相关文章

  1. GFS读后笔记

    GFS读后笔记 Q&A 为什么存储三个副本?而不是两个或者四个? ANS: 可能取得某些平衡点 Chunk的大小为何选择64MB?这个选择主要基于哪些考虑? ANS: GFS主要支持appen ...

  2. [MapReduce] Google三驾马车:GFS、MapReduce和Bigtable

    声明:此文转载自博客开发团队的博客,尊重原创工作.该文适合学分布式系统之前,作为背景介绍来读. 谈到分布式系统,就不得不提Google的三驾马车:Google FS[1],MapReduce[2],B ...

  3. Bigtable 论文 阅读笔记 - 原理部分

    不支持markdown,桑心.更好的阅读体验请看:Github/Bigtable.md Paper: Google Bigtable paper Notes author: Lhfcws Wu Tim ...

  4. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)

    摘自:http://www.ituring.com.cn/article/4002# NoSQL系统的数据操作接口应该是非SQL类型的.但在NoSQL社区,NoSQL被赋予了更具有包容性的含义,其意为 ...

  5. LSM-Tree (BigTable 的理论模型)(转)

    Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题. MergeDump的理论 ...

  6. (zz) 谷歌技术"三宝"之BigTable

    006年的OSDI有两篇google的论文,分别是BigTable和Chubby.Chubby是一个分布式锁服务,基于Paxos算法:BigTable是一个用于管理结构化数据的分布式存储系统,构建在G ...

  7. 7.HBase In Action 第一章-HBase简介(1.2.1 典型的网络搜索问题:Bigtable的起原)

    Search is the act of locating information you care about: for example, searching for pages in a text ...

  8. Dynamo和Bigtable对比

    数据结构化问题        首先要提到的是两者存储数据属性上的区别,虽然两者都是以key/value形式进行存储,但Dynamo偏向存储原数据,因为其所存储的数据是非结构化数据,对value的解析完 ...

  9. Bigtable: A Distributed Storage System for Structured Data

    https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf Abstr ...

随机推荐

  1. python爬虫(一)抓取 色影无忌图片

    原文地址: http://www.30daydo.com/article/56 由于平时爱好摄影.所以喜欢看看色影无忌论坛的获奖摄影作品,所以写了个小script用来抓取上面的获奖图片,亲自測试能够使 ...

  2. 服务器负载均衡lvs(Linux Virtual Server)

    服务器负载均衡lvs(Linux Virtual Server) 一.总结 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 三.Linu ...

  3. [AngularFire2] Signup and logout

    import {AuthProviders, FirebaseAuthState, FirebaseAuth, AuthMethods} from "angularfire2";i ...

  4. #308 (div.2) B. Vanya and Books

    1.题目描写叙述:点击打开链接 2.解题思路:本题要求统计数位的个数,简单的试验一下发现有例如以下规律:一个n位数的个数有9*(10^n)个.因此全部n位数的数位是n*9*(10^n)个.因此能够利用 ...

  5. RandomStringUtils RandomUtils

    上一篇是StringUtils 链接http://www.cnblogs.com/tele-share/p/8060129.html 1.RandomStringUtils 1.1模拟实现random ...

  6. Android 三种方式实现自定义圆形进度条ProgressBar

    一.通过动画实现 定义res/anim/loading.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...

  7. Windows下启动ActiveMq端口被占用的解决办法

    cd /D E:\RuntimeSoft\apache-activemq-5.11.0\binactivemq.bat start结果提示:端口号被占用. Windows下查看端口号被占用开始--运行 ...

  8. C++ public、protected、private 继承方式的区别

    访问修饰符 public.protected.private,无论是修饰类内成员(变量.函数),还是修饰继承方式,本质上实现的都是可见性的控制. Difference between private, ...

  9. UITableView的一些常用设置和代理方法

    - (void)viewDidLoad { [super viewDidLoad]; tableview = [[UITableView alloc]initWithFrame:CGRectMake( ...

  10. SharePoint Permission Analyzer 权限分析仪

    SharePoint Permission Analyzer 权限分析仪         这是一个很好的应用,为了分析SharePoint权限.它会扫描整个网站集,建一个站点的权限架构.       ...