首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在LSM-树中,memtable到底是如何刷新到磁盘上的SSTable的?

在LSM-树中,memtable到底是如何刷新到磁盘上的SSTable的?
EN

Stack Overflow用户
提问于 2022-08-04 03:54:13
回答 2查看 177关注 0票数 1

就实现而言,memtable (在Cassandra、RocksDB、LevelDB或任何LSM-树中)到底是如何并发到SSTable的?

我了解到,记忆表是一些结构化的排序数据,就像一棵红黑树,但是我们如何将它转换成一个排序的键/值对文件呢?我们是否在for-循环中遍历从最小键到最大树的树,然后一个一个地将数据插入内存缓冲区(以SSTable格式),然后将其写入磁盘?我们是否使用某种树序列化方法(如果是的话,它如何仍然是SSTable格式的)?我们可以用一个min堆作为memtable吗?在刷新时,继续获取min元素并将其添加到我们的数组中进行刷新吗?

我在试着理解超具体的细节。我在看这个文件,但是很难理解它:https://github.com/facebook/rocksdb/blob/fbfcf5cbcd3b09b6de0924d3c52a744a626135c0/db/flush_job.cc

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-05 02:36:33

你是对的。

备忘录被从最小的循环到最大的,并写成文件。

在实际应用中,还有其他东西也写入到文件中,但是文件的基础是包含以前在memtable中的所有键的部分。例如,布卢姆筛选器,查找稀疏索引,以及其他元数据,如计数,最大键,最小键

你不需要一个小矮人。,因为数据已在跳过列表中排序。

票数 1
EN

Stack Overflow用户

发布于 2022-08-04 22:21:39

RocksDB的默认备忘录表是使用skiplist实现的,它是一个具有二进制搜索功能的链接列表,类似于B+树。当写入SST表时,它按排序顺序迭代所有键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73230187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档