(机翻)LSM 树:数据库、搜索引擎等的首选数据结构

我深入了解 LSM 树的迷人世界,以及它们如何彻底改变大量数据的存储和检索方式。 🌳💡

一、什么是LSM树?

1.1 LSM树设计概述

LSM树是Log-Structured-Merge Tree的缩写,是一种巧妙的算法设计,可以帮助我们存储海量数据,而无需永远等待写入。它首先将数据存储在内存中,速度快如闪电。但由于我们无法将所有内容都保存在内存中,因此 LSM 树会定期将数据刷新到磁盘。

但这是更酷的地方!它将数据组织成有序结构层,每个结构层都包含越来越多的压缩数据。顶层访问速度最快,但压缩程度最低。随着数据的堆积,它被压缩并写入称为 SSTable(排序字符串表)的新层。我们可以根据我们正在处理的数据类型来决定需要多少层以及应用多少压缩。这个技巧帮助我们最小化磁盘 I/O 操作并使我们的数据存储超级高效!

二、LSM Tree 中的 write 是如何工作的?

让我们更深入地了解 LSM 树中的写入方式。想象一下:您有一个称为 LSM 树的奇特数据结构,它可以帮助您处理大量数据,同时保持快速处理。

当你想向 LSM Tree 写入数据时,就像把它扔进一顶魔法帽一样。第一站是LSM Tree的内存层,它就像帽子的顶部。该层非常快,因为它存储在内存中。因此,当您添加新数据时,它会直接进入内存层,确保快速写入操作。

然而,无限期地将所有数据保留在内存中是不切实际的,因此LSM树定期将数据从内存层刷新到磁盘。

但这里有一个巧妙的部分:在数据刷新到磁盘并组织到 SSTable 之前,它还会写入预写日志 (WAL) 中。预写日志充当备份,确保数据的持久性。它作为对数据库所做的所有更改的日志,在系统故障或崩溃时充当安全网。


2.1 LSM树中的写入流程

因此,当发生写入操作时,数据首先写入内存层以实现快速性能。同时,更改会记录在预写日志中,以确保数据完整性。然后,每隔一定时间或当内存层达到某个阈值时,数据就会刷新到磁盘并组织到 SSTable 中。

SSTable(或排序字符串表)本质上只是写入磁盘的排序键值对。

SSTables 最好的事情之一是它们在搜索和读取数据方面非常高效。当您积累更多数据时,会创建更多级别的 SSTable,每一层都比前一层压缩得更多。级别数和压缩量可能会根据用例而有所不同,但总体思路是在逐层压缩时继续压缩数据。

现在,您可能想知道为什么 LSM Tree 使用这种方法。答案很简单:它非常适合最大限度地减少磁盘 I/O 操作。通过定期大批量写入磁盘,您可以减少磁盘访问数据时必须上下旋转的次数。

三、如何从LSM树中读取数据?

当您想要从 LSM 树读取数据时,该过程从用户查询开始。您正在搜索一条特定的信息,LSM 树会立即采取行动来为您找到它。

LSM 树检查的第一个地方是内存层。请记住,该层的访问速度非常快,因为它存储在内存中。因此,如果您要查找的数据恰好在这一层中,万岁! LSM 树可以快速检索它,您可以立即获得所需的信息。

但是,如果您要搜索的数据不在内存层中怎么办?好吧,别担心,LSM 树也有一个计划!它继续进行下一步,其中涉及搜索磁盘层,其中数据存储在我们所谓的 SSTable 中。

现在,这就是布隆过滤器发挥作用的地方。将布隆过滤器想象成一个聪明的小助手,帮助 LSM 树缩小搜索范围。在深入研究每个 SSTable 之前,LSM 树会查询布隆过滤器以查看您要查找的数据是否存在于特定的 SSTable 中。布隆过滤器给出了一个概率答案——它要么说“数据可能存在”,要么说“数据肯定不存在”。

LSM树的读取流程


如果布隆过滤器指示数据可能存在于特定的 SSTable 中,则 LSM 树会再次开始操作并开始搜索该 SSTable。它扫描 SSTable 中已排序的键值对,直到找到您要查找的数据(耶!)或意识到它不存在。

另一方面,如果布隆过滤器自信地声明数据肯定不存在于特定的 SSTable 中,则 LSM 树会跳过该 SSTable 并移至下一个。这就好像布隆过滤器充当了可靠的指南,向 LSM 树展示哪些 SSTable 值得探索,哪些可以跳过,从而节省时间和精力。

这就是 LSM 树中读取的方式!检查内存层、利用布隆过滤器和搜索磁盘上的 SSTable 相结合,可以高效、快速地检索数据。

四、各种 LSM 用例。

LSM树的用例


  1. NoSQL 数据库LSM 树的主要用例之一是 NoSQL 数据库。这些数据库旨在处理大量非结构化或半结构化数据,LSM 树架构完全符合其需求。 LSM 树提供出色的写入性能,这对于管理 NoSQL 数据库中通常遇到的高数据摄取率至关重要。有效处理写入密集型工作负载的能力使 LSM 树成为存储和管理这些数据库处理的大量数据的理想选择。

  2. 时间序列数据库是 LSM 树的另一个亮点领域。时间序列数据的特征在于其带有时间戳的性质,其中数据点与特定的时间间隔相关联。 LSM 树凭借其排序结构提供了时间序列数据的高效存储和检索。这允许基于时间戳快速访问数据点,从而实现基于时间的数据的高效分析和查询。

  3. 搜索引擎中,LSM 树在促进快速、准确的搜索操作中发挥着至关重要的作用。搜索引擎需要快速索引和检索大量数据以提供相关的搜索结果。 LSM 树能够处理大型数据集并提供高效的读取操作,非常适合搜索引擎架构。它们允许快速检索索引数据,使搜索查询闪电般快速并提供无缝的用户体验。

  4. 日志系统LSM 树也在日志系统中找到了自己的位置,例如用于实时事件流或日志处理的日志系统。在日志系统中,数据需要以仅附加的方式写入,以保留事件的顺序。 LSM 树在这种情况下表现出色,因为它们通过将新数据顺序附加到内存层来提供高效的写入操作。预写日志(WAL)保证了系统故障时的持久性和恢复性,进一步增强了日志系统的可靠性。

因此,无论是处理 NoSQL 数据库中的大量数据、高效管理时间序列数据、为闪电般快速的搜索引擎提供支持,还是实现可靠的日志系统,LSM 树都已成为各个领域的首选。它们独特的特性,例如高效的写入性能、可扩展性和数据压缩,使其成为当今数据密集型应用程序中的宝贵资产。

六、原文地址:

LSM Trees: the Go-To Data Structure for Databases, Search Engines, and More

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容