当前位置: 首页 > 网络应用技术

谈论Rocksdb(4)存储结构-Pian Ruo Jinghong,Wan Ruo You Dragon

时间:2023-03-08 21:37:16 网络应用技术

  先前的章节分别在RockSDB的基本概念和相关操作中提到。让我们谈谈RockSDB的存储结构。根据文件的存储结构,返回并了解RockSDB的相关操作。

  首先写WAL,然后写下记忆。记忆达到一定的阈值后,切换到不可变的记忆。背景齐平线负责在时间0层上生成有序文件(SST)的时间顺序中的不变记忆。背景合并线程负责组合上层SST合并以生成下部SST。

  Subtest在特定时间对SST文件的视图负责,当前文件记录了最新的清单文件名。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。用户可以根据RocksDB构建自己的列家族。许多应用程序使用RocksDB作为Libary,尽管他提供了服务器或CLI接口。

  以上是文件的特定含义和处理过程。让我谈谈内存和SST的两个主要数据存储结构。其余的存储结构可以理解含义和角色。基本上,细节不需要了解细节。如果您需要它,则可以自己学习。

  RockSDB的记忆的默认实现是Skiplist.Skiplist是有序的数据集。当业务场景使用范围扫描并同时编写时,这是一个非常有效的数据结构。

  但是,某些应用程序在不同时会编写和扫描,而另一些应用程序根本不进行扫描。Skiplist可能无法为这些应用程序提供最佳性能。因此,RockSDB支持可插入的API,允许应用程序提供其自己的可记忆实现。

  开发图书馆提供了三个可记住的记忆:

  矢量记忆适合将数据批量加载到数据库中。每个插件都插入向量末尾的新元素。当它刷新可记忆的存储空间时,将向量中的元素排序并写入L0中的文件。

  前缀记忆允许有效地处理GES,PUTS和与Key-key-Prefix进行扫描。

  如果以上两种情况不在上面,建议使用默认的Skiplist。

  在大多数情况下,基于Skiplist的记忆可以更好地阅读,写作,随机访问和序列化扫描性能。此外,他还提供了其他Memtables没有的有用功能,例如并发插入和插入提示。

  Hash类型可记住的两种不同的实现,一个是Hashskiplist,另一个是HashlinkList。正如其名称所述,Hashskiplist用Hash表组织数据,每个Hash Barrel都是Skiplist,而Hashlinklist则使用Hash表和Hash Tabt和Hash Table和Hash Table和Hash Table组织,每个哈希枪管ISIT都是一个分类的linkedlist。类型都是减少查询期间的比较数,而两者之间的差异实际上是Skiplist和LinkedList之间的差异。一个很好的用途是将它们组合在可有条理的SSST格式中,然后将数据存储在RAM FS中。

  当数据查询或插入键时,可以通过选项提取目标键前缀。Prefix_extractor要查找特定的哈希桶。在哈希桶中,所有比较都是比较(内部)键比较,就像Skiplist的记忆力一样。

  基于哈希(Hash)的危险限制最大的限制是在进行多个前缀扫描时复制和排序,这非常缓慢且废物记忆。

  Sstable是排序的字符串表的缩写。它是著名的巨型基础层的数据存储格式。HBase和Cassandra的基础硬盘存储也基于此格式。

  Sstable的格式是该文件本身是一个分类,不可变的,持久的键/值对映射。键和值可以是任何字节字符串。KeyValue根据固定的比较规则以有序的方式写入文件中。该文件的内部划分分为一系列块(块不会太大,可以自定义,默认的4KB,通常为64kb,rocksdb,相应的配置项:table_options.block_size),具有必要的索引信息。通过这种方式,您可以按顺序读取内部密钥值记录,并且也可以根据某个关键值快速定位。

  如图所示,从头到尾将SST文件分为5个部分。

  页脚修复了48个字节,指出了文件中索引框和metaindexblock的偏移信息。这是元信息信息。它位于sstable文件的尾部。IndexBlock占据了一个块空间,以记录DataBlock相关的元数据信息MetainDexBlock以占用一个块空间。元数据块,包括过滤器,属性,属性(整个表的属性信息),压缩词典,范围删除墓碑Metablock,可能占据多个块的多个块空间存储bon滤波器二进制数据和其他元信息数据数据数据库可能占据多个块空间。:压缩类型,CRC,如下图所示:

  这是Metablock中的Bloom过滤器。Bloom过滤器的作用是任何钥匙集合。位图可用于构建一个位阵列的算法。要确定该位数组可用于确定此密钥是否可能存在或绝对不存在此密钥集合中,该键用于减少查询数量加速查询速度。布鲁姆过滤器的特定知识点可以查看我的上一篇文章------------------------------------------------------------------------------------------------------------------------------------------------

  以上部分是块的结构。只有页脚不同。这是固定格式。

  序列化后,页脚的长度固定为48个字节(旧)或53个字节(新)。格式如下:

  页脚中的信息指出了MetainDexBlock和IndexBlock的位置,然后找到了Metablock和Datablock。

  读取SST文件时,是从文件末尾读取这48或53个字节,然后获取页脚信息。

  上述解释是与RockSDB相关的存储知识,基本上可以覆盖常用的部分。需要详细了解的其他朋友可以按需学习。在实施各种LSM树时,值得学习。

  RockSDB的主题还应编写两个高级特征和性能优化。请期待它。

  原始:https://juejin.cn/post/7099644906892689445