- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
众多数据库使用到的LSM(面试题)
2021-03-19
很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等。所以在面试过程中会经常被问到,最新重新又复习了一遍 LSM Tree 的原理。
特点
总的来说就是通过将大量的随机写转换为挨次写,从而极大地提升了数据写入的功能,虽然与此同时牺牲了部分读的功能。
只适合存储 key 值有序且写入大于读取的数据,或者读取操作通常是 key 值连续的数据。
存储模型
WAL
在设计数据库的时候经常被使用,当插入一条数据时,数据先挨次写入 WAL 文件中,之后插入到内存中的 MemTable 中。这样就保证了数据的长久化,不会丢失数据,并且都是挨次写,速度很快。当程序挂掉重启时,可以从 WAL 文件中重新恢复内存中的 MemTable。
MemTable
MemTable 对应的就是 WAL 文件,是该文件内容在内存中的存储结构,通常用 SkipList 来实现。MemTable 供应了 k-v 数据的写入、删除以及读取的操作接口。其内部将 k-v 对依据 key 值有序存储,这样便利之后快速序列化到 SSTable 文件中,仍旧保持数据的有序性。
Immutable Memtable
顾名思义,Immutable Memtable 就是在内存中只读的 MemTable,由于内存是有限的,通常我们会设置一个阀值,当 MemTable 占用的内存达到阀值后就自动转换为 Immutable Memtable,Immutable Memtable 和 MemTable 的区分就是它是只读的,系统此时会生成新的 MemTable 供写操作连续写入。
之所以要使用 Immutable Memtable,就是为了避开将 MemTable 中的内容序列化到磁盘中时会堵塞写操作。
SSTable
SSTable 就是 MemTable 中的数据在磁盘上的有序存储,其内部数据是依据 key 从小到大陈列的。通常为了加快查找的速度,需要在 SSTable 中加入数据索引,可以快读定位到指定的 k-v 数据。
SSTable 通常接受的分级的结构,例如 LevelDB 中就是如此。MemTable 中的数据达到指定阀值后会在 Level 0 层创建一个新的 SSTable。当某个 Level 下的文件数超过肯定值后,就会将这个 Level 下的一个 SSTable 文件和更高一级的 SSTable 文件合并,由于 SSTable 中的 k-v 数据都是有序的,相当于是一个多路归并排序,所以合并操作相当快速,最终生成一个新的 SSTable 文件,将旧的文件删除,这样就完成了一次合并过程。
常用操作的实现
写入
在 LSM Tree 中,写入操作是相当快速的,只需要在 WAL 文件中挨次写入当次操作的内容,成功之后将该 k-v 数据写入 MemTable 中即可。虽然做了一次磁盘 IO,但是由于是挨次追加写入操作,效率相对来说很高,并不会导致写入速度的降低。数据写入 MemTable 中其实就是往 SkipList 中插入一条数据,过程也相当简约快速。
更新
更新操作其实并不真正存在,和写入一个 k-v 数据没有什么不同,只是在读取的时候,会从 Level0 层的 SSTable 文件开头查找数据,数据在低层的 SSTable 文件中必定比高层的文件中要新,所以总能读取到最新的那条数据。也就是说此时在整个 LSM Tree 中可能会同时存在多个 key 值相同的数据,只要在之后合并 SSTable 文件的时候,才会将旧的值删除。
删除
删除一条记录的操作比较特殊,并不马上将数据从文件中删除,而是记录下对这个 key 的删除操作标记,同插入操作相同,插入操作插入的是 k-v 值,而删除操作插入的是 k-del 标记,只要当合并 SSTable 文件时才会真正的删除。
Compaction
当数据不断从 Immutable Memtable 序列化到磁盘上的 SSTable 文件中时,SSTable 文件的数量就不断添加,而且其中可能有很多更新和删除操作并不马上对文件进行操作,而只是存储一个操作记录,这就形成了整个 LSM Tree 中可能有大量相同 key 值的数据,占据了磁盘空间。
为了节省磁盘空间占用,把握 SSTable 文件数量,需要将多个 SSTable 文件进行合并,生成一个新的 SSTable 文件。比如说有 5 个 10 行的 SSTable 文件要合并成 1 个 50 行的 SSTable 文件,但是其中可能有 key 值反复的数据,我们只需要保留其中最新的一条即可,这个时候重生成
您可能关注的文档
最近下载
- 降钙素原抗体产品技术要求标准2024年.pdf VIP
- 2013-2022同等学历申硕学位英语真题(含答案).pdf VIP
- 2023年全国职业院校技能大赛食品安全与质量检测题库1-10.docx VIP
- 内部培训刑法知识考试题库大全及答案下载.pdf VIP
- 2025至2030全球及中国车载摄像头模块组件行业项目调研及市场前景预测评估报告.docx
- 2023-2024学年安徽省合肥重点中学九年级(上)第一次月考道德与法治试卷.pdf VIP
- 人教版(2024新版)九年级上册化学全册教案教学设计.docx
- 中国油田分布明细-含分布图.docx VIP
- 6.4 酵母菌子囊孢子的观察(原理讲解).pdf VIP
- AIGC技术在非物质文化遗产设计保护中的应用探索 .pdf VIP
文档评论(0)