news 2026/7/10 8:50:14

【Leveldb】 SSTable存储格式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Leveldb】 SSTable存储格式

SSTable内部的存储格式为:

<beginning_of_file> [data block 1] [data block 2] ... [data block N] [meta block 1] ... [meta block K] [metaindex block] [index block] [Footer] (fixed size; starts at file_size - sizeof(Footer)) <end_of_file>

文件内包含内部指针。这样的指针称为BlockHandle,包含以下信息:

offset: varint64 size: varint64
  1. 文件中的键值对按顺序存储在多个文件的data block中。data block按照block_builder.cc中的逻辑进行格式化,然后在根据option判断是否要压缩。
  2. data block后面存储一系列meta block
  3. 再后面存储的是metaindex block。存储的key是meta block的名字,value为指向meta block的BlockHandle。
  4. index block:每个kv对对应一个data block,key>=data block的lastkey小于后续一个data block的第一个key,value是指向data block的BlockHandle。
  5. 再文件的尾部包含一个固定长度的footer。包含的内容如下:
metaindex_handle: char[p]; // Block handle for metaindex index_handle: char[q]; // Block handle for index padding: char[40-p-q];// zeroed bytes to make fixed length // (40==2*BlockHandle::kMaxEncodedLength) magic: fixed64; // == 0xdb4775248b80fb57 (little-endian)

filter Meta Block

如果在打开数据库时指定了FilterPolicy,则会在每个表中存储一个filter block。metaindex block包含一个kv对,将 filter. 映射到filter block的 BlockHandle,其中 是过滤器策略的 Name() 方法返回的字符串。
Filter Block存储了一系列的过滤器,其中第 i个过滤器所包含的数据,是对所有满足以下条件的 Key 调用FilterPolicy::CreateFilter()生成的输出结果:这些 Key 所属的Data Block,其在文件中的物理偏移量必须恰好落在[ i * base ... (i + 1) * base - 1 ]这个区间内。目前,“base” 的大小被固定为 2KB。
举个例子:如果数据块 X 和数据块 Y 的起始物理偏移量都落在[ 0KB .. 2KB - 1 ]这个范围内,那么 X 和 Y 里面的所有 Key 都会被打包凑在一起,共同调用一次FilterPolicy::CreateFilter()聚合成一个过滤器。这个生成的过滤器,将被作为第一个过滤器(即 filter 0)存储在filter block中。
Filter Block的格式如下:

[filter 0] [filter 1] [filter 2] ... [filter N-1] [offset of filter 0] : 4 bytes [offset of filter 1] : 4 bytes [offset of filter 2] : 4 bytes ... [offset of filter N-1] : 4 bytes [offset of beginning of offset array] : 4 bytes lg(base) : 1 byte

offset of filter数组用来快速查找对应的过滤器(过滤器的长度不是固定的,所以需要索引来快速查找)。

“stats” Meta Block

这个元数据块包含一系列统计数据。键是统计数据的名称,值包含统计数据本身。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 8:49:03

【大数据课程设计/毕业设计】大数据支撑的亚健康趋势分析与可视化监测系统的设计与实现 基于健康数据挖掘的亚健康干预辅助可视化系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/10 8:48:14

TencentDB Agent Memory 四层记忆系统架构与生产部署指南

1. 这不是“加个插件”——TencentDB Agent Memory 的四层记忆系统到底在解决什么问题&#xff1f; 很多人看到“Agent Memory 部署”第一反应是&#xff1a;不就是配个 Redis 或 PostgreSQL 当缓存&#xff1f;点几下控制台&#xff0c;填个连接串&#xff0c;跑个 demo 就完事…

作者头像 李华
网站建设 2026/7/10 8:47:24

3D动画革命:UniRig自动骨骼绑定终极指南

3D动画革命&#xff1a;UniRig自动骨骼绑定终极指南 【免费下载链接】UniRig [SIGGRAPH 2025] One Model to Rig Them All: Diverse Skeleton Rigging with UniRig 项目地址: https://gitcode.com/gh_mirrors/un/UniRig 你是否曾为3D模型的手动骨骼绑定而烦恼&#xff1…

作者头像 李华
网站建设 2026/7/10 8:45:16

惠城中老年假发如何通过材质和工艺实现自然遮盖白发?

很多惠城中老年朋友发现自己白发增多后&#xff0c;第一反应就是频繁染发。染发剂里的化学成分渗入头皮&#xff0c;时间一长毛囊受损、头发越掉越多&#xff0c;发质干枯分叉&#xff0c;还会引起头皮敏感。有的人转而考虑假发&#xff0c;但又怕买到材质粗糙、看起来不自然的…

作者头像 李华
网站建设 2026/7/10 8:42:27

2026知识付费行业四大变革趋势:全域SaaS技术架构与选型落地研究

2026 知识付费行业全域 SaaS 技术架构与选型落地指封面一、行业发展背景 随着AI技术普及、互联网流量见顶及行业监管体系持续完善&#xff0c;国内知识付费行业已告别早期流量红利时代。传统单一录播课程、粗放式流量运营模式增长动能持续衰减&#xff0c;行业竞争逻辑发生根本…

作者头像 李华