大数据经典论文解读
徐文浩
bothub 创始人
13843 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
大数据经典论文解读
15
15
1.0x
00:00/00:00
登录|注册

10 | Bigtable(三):SSTable存储引擎详解

你好,我是徐文浩。
在上一讲里,我们已经了解了 Bigtable 的整体架构,知道作为一个分布式数据系统,里面“分布式”的部分是怎么设计的了。那么,今天我就带你一起来详细深入到 Bigtable 的“数据”部分里,去看看它是怎么回事儿。而且今天的这一讲,我们会“超越”Bigtable 的论文,深入到 MemTable 和 SSTable 的具体实现。搞清楚这些问题,不仅对你学懂 Bigtable 不可或缺,也对你深入理解计算机底层原理有所帮助。
在学习完这一讲之后,我希望你能掌握好这两个知识点:
首先,自然是 Bigtable 本身的单个 Tablet 是如何提供服务的。
其次,是我们如何利用好硬件特性,以及合理的算法和数据结构,让单个 Tablet 提供足够强劲的性能。
当你把这两个知识点掌握清楚了,你就能很容易学会怎么实现一个单机存储引擎,并且能够对硬件性能、算法与数据结构的实际应用有一些心得。

Bigtable 的读写操作

在讲解 Bigtable 底层是怎么读写数据之前,我们先来看一看,Bigtable 读写数据的 API 长什么样子。下面是论文里面提供的一段代码:
// Open the table
Table *T = OpenOrDie("/Bigtable/web/webtable");
// Write a new anchor and delete and old anchor
RowMutation r1(T, "com.cnn.www");
r1.Set("anchor:www.c-span.org", "CNN")
r1.Delete("anchor:www.abc.com");
Operation op;
Apply(&op, &r1);
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Bigtable的SSTable存储引擎实现细节,旨在帮助读者深入理解Bigtable的数据部分。文章首先介绍了Bigtable的读写操作API,并展示了对数据表进行操作以及随机读取数据的示例代码。随后,文章重点探讨了Bigtable如何实现高性能的随机数据写入。通过将硬盘随机写转化为顺序写,并利用BloomFilter进行快速过滤,Bigtable实现了高效的随机数据写入。文章还详细解释了数据写入过程中的内存表(MemTable)和SSTable的转换机制,以及如何处理数据的修改和删除。最后,文章强调了Bigtable的数据模型中多版本数据的特点,以及后台程序定期进行的类似“垃圾回收”的操作。通过这些机制,Bigtable实现了高性能的随机读写操作,充分利用硬件特性和合理的算法和数据结构,为读者提供了深入理解计算机底层原理的帮助。 文章通过深入解析Bigtable的SSTable存储引擎实现细节,帮助读者全面了解了Bigtable的数据部分,以及如何实现高性能的随机读写操作。内容丰富,涵盖了数据存储引擎的具体实现细节,对于想深入理解Bigtable和计算机底层原理的读者具有重要参考价值。文章还介绍了Bigtable在尽可能减少随机读取的情况下,来访问数据的优化步骤,包括压缩算法、布隆过滤器缓存和两级缓存机制。这些优化步骤大大减少了访问硬盘的次数,提高了系统性能。总体而言,本文为读者提供了深入了解Bigtable技术特点和优化策略的重要参考资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • 在路上
    徐老师好,这一讲解决了我在上一讲产生的好几个疑问,第一是随机写和顺序写为什么性能一样,第二是随机读为什么比写操作慢一个数量级。通过对dblevel-handbook的学习,我对MemTable和SSTable也有了更深的认识。 回答老师的问题,我们可以先看看读写操作在哪些地方会涉及SSTable。在向Bigtable写入数据时,会先写内存MemTable,MemTable增长到一定规模后,将它持久化成一个不可变的SSTable,这个过程是Minor Compaction的一部分,Bigtable在后台合并SSTable,对每一个Key只保留最近若干个版本的Value,这个过程被成为Major Compaction。在从BigTable读取数据时,先从MemTable中读取,读不到就从SSTable中读。为了加快SSTable的读取,BigTable实现了Scan Cache和Block Cache,这些缓存是针对单个SSTable,而不是把好几个SSTable混在一起缓存。因为不同的SSTable是独立的,也就为单独删除一个SSTable提供了可能性。一个Tablet包含哪些SSTable记录在METADATA表中,也就能做到先标记后删除的方式。先标记后删除可以让实际的删除操作在后台执行,加快前台操作的响应时间。
    2021-10-11
    1
    20
  • Alex
    因为数据连续存储,删除数据就需要先打标记,再Major Compaction时忽略掉原SSTable里删除标记的数据生成新的SSTable
    2021-10-12
    1
    3
  • 天空小白菜
    先回答老师的问题,标记本质上也是数据的一个版本,读数据时默认是读最新版本,如果读到的最新版本是删除标记,那么就直接返回数据不存在即可。数据的真正擦除可以在compaction的时候实现。 提个问题,bigtable支持单行的事务,由于一行可能涉及到多个列族,而不同列族的数据又是存储在不同的gfs文件中,那么单行事物就有意味着对多个tablet server请求的原子性,请问bigtable在这个地方是如何实现的。
    2021-12-22
    2
  • Somnus💫
    收获满满,看下来其实大多都是计算机中非常常规的思想,学习了操作系统,但是Google能将这些东西落到应用生产,真的很牛!不管是操作系统的设计,还是分布式解决一些问题,点到面,其实本质思想都是相同的,关键是怎么用起来。
    2021-10-23
    1
  • 夜空中最亮的星
    收获满满
    2021-10-11
    1
  • YaoQi
    老师, 看完有个疑问: 磁盘的顺序读写和随机读写是文件系统控制的, 怎么保证写文件是顺序写呢?
    2023-10-13归属地:广东
  • 密码123456
    首先,为什么会出现过期的SSTable?因为多个SSTable已经合并好了,才会出现。既然新的SStable已经生成,那么老的自然要标记出来,并把它清理。
    2023-04-08归属地:江苏
  • Eternal
    老师的文章开门见山告诉你要点,学会要点的收益,文风很nice
    2023-03-19归属地:中国香港
  • demo
    数据的真正删除是在合并SSTable也就是进行多路归并的时候进行的,这样还是顺序读写,性能高,如果不标记逻辑删除而使用物理删除,那就是随机硬盘的随机读写了,性能会非常差.
    2022-11-18归属地:北京
  • piboye
    老师, 能重点解读一下 tablet 的扩容之后的迁移吗?
    2022-01-16
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部