蚁工厂
24-05-02 11:11 微博认证:科技博主

教程 LSM in a Week http://t.cn/A6TFP4sZ
本课程将教你如何使用Rust语言构建一个简单的LSM树存储引擎。
“日志结构合并树(Log-structured merge trees,简称LSM树)是一种用于维护键值对的数据结构。这种数据结构在分布式数据库系统,如TiDB和CockroachDB中被广泛使用,作为它们底层的存储引擎。基于LevelDB的RocksDB,是LSM树存储引擎的一个实现。它提供了许多键值访问功能,并在许多生产系统中使用。

一般来说,LSM树是一种对追加操作友好的数据结构。将LSM树与其他键值数据结构如红黑树(RB-Tree)和B树进行比较会更加直观。对于红黑树和B树,所有数据操作都是就地进行的。也就是说,当你想要更新与键对应的值时,引擎会用新值覆盖其原有的内存或磁盘空间。但在LSM树中,所有的写操作,即插入、更新、删除,都是延迟应用到存储中的。引擎将这些操作批量到SST(排序字符串表)文件中,并将它们写入磁盘。一旦写入磁盘,引擎就不会直接修改它们。在一个特定的后台任务——压缩(compaction)中,引擎将合并这些文件以应用更新和删除。

这种架构设计使得LSM树易于使用。

数据在持久化存储上是不可变的。并发控制更加直接。将后台任务(压缩)卸载到远程服务器是可能的。直接从像S3这样的云原生存储系统存储和提供数据也是可行的。
改变压缩算法允许存储引擎在读取、写入和空间放大之间进行平衡。这种数据结构非常通用,通过调整压缩参数,我们可以为不同的工作负载优化LSM结构。

本课程将教你如何用Rust编程语言构建基于LSM树的存储引擎。
先决条件

你应该了解Rust编程语言的基础知识。阅读Rust书籍就足够了。
你应该了解键值存储引擎的基本概念,即我们为什么需要一个复杂的设计来实现持久性。如果你之前没有数据库系统和存储系统的经验,你可以在PingCAP Talent Plan中实现Bitcask。
了解LSM树的基础知识不是必需的,但我们建议你阅读一些关于它的资料,例如LevelDB的总体思路。提前了解它们会让你熟悉诸如可变和不可变内存表、SST、压缩、WAL等概念。

🌟 你应该从本教程中期待什么

完成本课程后,你应该深刻理解基于LSM的存储系统是如何工作的,获得设计这类系统的实践经验,并将在学习和职业中应用你所学的知识。你将理解这些存储系统的设计权衡,并找到设计一个满足你的工作负载要求/目标的基于LSM的存储系统的最优方法。这个非常深入的教程涵盖了现代存储系统(如RocksDB)的所有基本实现细节和设计选择,基于作者在几个类似LSM的存储系统中的经验,你将能够直接将所学应用于工业界和学术界。

🌟 结构

本教程是一个包含多个部分(周)的广泛课程。每周有七个章节;你可以在2到3小时内完成每个章节。每个部分的前六章将指导你构建一个工作系统,而每周的最后一章将是小吃时间章节,它将实现一些在你之前六天构建的基础上的简单事物。每个章节都将有必需的任务、检查你的理解问题和奖励任务。”

发布于 山东