10 | Bigtable(三):SSTable存储引擎详解
徐文浩
你好,我是徐文浩。
在上一讲里,我们已经了解了 Bigtable 的整体架构,知道作为一个分布式数据系统,里面“分布式”的部分是怎么设计的了。那么,今天我就带你一起来详细深入到 Bigtable 的“数据”部分里,去看看它是怎么回事儿。而且今天的这一讲,我们会“超越”Bigtable 的论文,深入到 MemTable 和 SSTable 的具体实现。搞清楚这些问题,不仅对你学懂 Bigtable 不可或缺,也对你深入理解计算机底层原理有所帮助。
在学习完这一讲之后,我希望你能掌握好这两个知识点:
首先,自然是 Bigtable 本身的单个 Tablet 是如何提供服务的。
其次,是我们如何利用好硬件特性,以及合理的算法和数据结构,让单个 Tablet 提供足够强劲的性能。
当你把这两个知识点掌握清楚了,你就能很容易学会怎么实现一个单机存储引擎,并且能够对硬件性能、算法与数据结构的实际应用有一些心得。
Bigtable 的读写操作
在讲解 Bigtable 底层是怎么读写数据之前,我们先来看一看,Bigtable 读写数据的 API 长什么样子。下面是论文里面提供的一段代码:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Bigtable的SSTable存储引擎实现细节,旨在帮助读者深入理解Bigtable的数据部分。文章首先介绍了Bigtable的读写操作API,并展示了对数据表进行操作以及随机读取数据的示例代码。随后,文章重点探讨了Bigtable如何实现高性能的随机数据写入。通过将硬盘随机写转化为顺序写,并利用BloomFilter进行快速过滤,Bigtable实现了高效的随机数据写入。文章还详细解释了数据写入过程中的内存表(MemTable)和SSTable的转换机制,以及如何处理数据的修改和删除。最后,文章强调了Bigtable的数据模型中多版本数据的特点,以及后台程序定期进行的类似“垃圾回收”的操作。通过这些机制,Bigtable实现了高性能的随机读写操作,充分利用硬件特性和合理的算法和数据结构,为读者提供了深入理解计算机底层原理的帮助。 文章通过深入解析Bigtable的SSTable存储引擎实现细节,帮助读者全面了解了Bigtable的数据部分,以及如何实现高性能的随机读写操作。内容丰富,涵盖了数据存储引擎的具体实现细节,对于想深入理解Bigtable和计算机底层原理的读者具有重要参考价值。文章还介绍了Bigtable在尽可能减少随机读取的情况下,来访问数据的优化步骤,包括压缩算法、布隆过滤器缓存和两级缓存机制。这些优化步骤大大减少了访问硬盘的次数,提高了系统性能。总体而言,本文为读者提供了深入了解Bigtable技术特点和优化策略的重要参考资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》,新⼈⾸单¥59
《大数据经典论文解读》,新⼈⾸单¥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-11120
- Alex因为数据连续存储,删除数据就需要先打标记,再Major Compaction时忽略掉原SSTable里删除标记的数据生成新的SSTable2021-10-1213
- 天空小白菜先回答老师的问题,标记本质上也是数据的一个版本,读数据时默认是读最新版本,如果读到的最新版本是删除标记,那么就直接返回数据不存在即可。数据的真正擦除可以在compaction的时候实现。 提个问题,bigtable支持单行的事务,由于一行可能涉及到多个列族,而不同列族的数据又是存储在不同的gfs文件中,那么单行事物就有意味着对多个tablet server请求的原子性,请问bigtable在这个地方是如何实现的。2021-12-222
- Somnus💫收获满满,看下来其实大多都是计算机中非常常规的思想,学习了操作系统,但是Google能将这些东西落到应用生产,真的很牛!不管是操作系统的设计,还是分布式解决一些问题,点到面,其实本质思想都是相同的,关键是怎么用起来。2021-10-231
- 夜空中最亮的星收获满满2021-10-111
- YaoQi老师, 看完有个疑问: 磁盘的顺序读写和随机读写是文件系统控制的, 怎么保证写文件是顺序写呢?2023-10-13归属地:广东
- 密码123456首先,为什么会出现过期的SSTable?因为多个SSTable已经合并好了,才会出现。既然新的SStable已经生成,那么老的自然要标记出来,并把它清理。2023-04-08归属地:江苏
- Eternal老师的文章开门见山告诉你要点,学会要点的收益,文风很nice2023-03-19归属地:中国香港
- demo数据的真正删除是在合并SSTable也就是进行多路归并的时候进行的,这样还是顺序读写,性能高,如果不标记逻辑删除而使用物理删除,那就是随机硬盘的随机读写了,性能会非常差.2022-11-18归属地:北京
- piboye老师, 能重点解读一下 tablet 的扩容之后的迁移吗?2022-01-16
收起评论