leveldb 文档

news/2024/7/12 3:12:00 标签: 云存储, leveldb, rocksdb, ceph
  • 1. leveldb 文档
    • 1.1. index.md
      • 1.1.1. 常规操作
      • 1.1.2. 进阶操作
    • 1.2. impl.md
    • 1.3. File
    • 1.4. Log files
    • 1.5. Sort tables
      • 1.5.1. manifest
      • 1.5.2. Current
      • 1.5.3. Info logs
      • 1.5.4. 其他
    • 1.6. Level 0

leveldb__20">1. leveldb 文档

文章目录

  • 1. leveldb 文档
    • 1.1. index.md
      • 1.1.1. 常规操作
      • 1.1.2. 进阶操作
    • 1.2. impl.md
    • 1.3. File
    • 1.4. Log files
    • 1.5. Sort tables
      • 1.5.1. manifest
      • 1.5.2. Current
      • 1.5.3. Info logs
      • 1.5.4. 其他
    • 1.6. Level 0

了解一款软件最快的方式是看文档、部署、使用,这里看下文档

1.1. index.md

index.md

这个文章翻译的比较通顺

index中主要提到leveldb的功能和特性

1.1.1. 常规操作

  • 打开数据库
  • 状态获取(主要用来用来捕获错误)
  • 关闭数据库
  • 读/写

1.1.2. 进阶操作

  • 原子性更新和批量更新(主要使用 leveldb::WriteBatch 实现)
  • 同步写入 – 默认异步写入,为了确保某些记录的数据可靠性可单独设置同步写入
  • 并发 – 单进程的线程共享 leveldb::DB 对象
  • 迭代 – 打印所有kv、打印指定范围kv、反向迭代(一般比较慢)
  • 快照 – 提供一致性只读视图(没太理解这个概念)
    有个使用场景就是,遍历某个时间点的数据库
  • slice 针对迭代器返回的key和value,其他的后面遇到再补充
  • 比较器 – 比较k v
    • 向后兼容 – kv结构版本
  • 性能优化 – 配置include/options.h 中默认值
    • block size-- 默认未压缩的为4096 byte
    • 压缩
    • 缓存
    • key布局
    • key读取过滤
  • 数据校验
  • 近似空间大小 – 获取key区间占用文件系统的金丝大小
  • 环境变量 – 用户可以通过实现 leveldb::Env 定制环境变量
  • 可移植性 – 其他平台的适配

1.2. impl.md

impl.md

1.3. File

本质上,leveldb的实现思路和单点的bigtable类似,文件组织形式不通,主要有如下类型的文件

1.4. Log files

.log 文件 日志文件
记录最新的更新方式为追加,存储在内存
LOG大小达到 [block size默认大小](# 1.1.3)时会转化为一个Sort tables,且创建一个新的LOG

1.5. Sort tables

.sst/.ldb文件 Sort tables持久化文件,存储在磁盘

  • 存储内容
    • 以key排序存储
    • 记录的要么是key,要么是key被删除的标记(删除标记的意义在于删除的时候不用查找旧的sort table中的内容)
  • 组织形式
  • 通过level的方式组织sort table
  • 从log文件中生成的sort table在 level0
  • 当level0的.sst/.ldb个数超过4个就会进行合并,把所有的level0和与当前level0有重叠的level1进行合并,每个level1文件大小2MB
  • 只有不同的level0文件可能存在重复的key
  • level和合并的文件大小关系为 sst/ldb size > 10^L(MB),例如leve1 10M level2 100M level3 200M

leveldb的设计精髓–level就在这里体现了

  • log文件达到限定大小时压缩成level0
  • level0 文件个数达到4个压缩成level1
  • level1 文件总大小达到10M以上就压缩成level2

只有level0 是通过文件个数来压缩的

一致压缩下去

1.5.1. manifest

mainifest记录了key与sorted table的对应关系,每次打开db都会新建一个manifest,以log格式(后面详细看)追加存储

1.5.2. Current

current文件记录了当前正在使用的manifest的文件名,以txt格式存储

1.5.3. Info logs

数据库运行日志

1.5.4. 其他

  • LOCK

锁文件

  • .dbtmp

临时文件 – 这个还注意过

1.6. Level 0

log文件超过一定大小(默认为block size 4M),会创建一个新的memtable和log文件,并把后续的个更新定向到新得文件

实现细节

  • 将前一个memtable内容写到sstable中
  • 丢弃这个memtable
  • 删除旧的log和memtable
  • 把新的sstable写入level0

后面几点没读完,读完再补


http://www.niftyadmin.cn/n/1075464.html

相关文章

nfs-ganesha导出cephfs为nfs

1. 概述2. 前提条件3. 版本说明4. 安装 4.1. 配置yum源4.2. 安装软件 5. 配置6. 使用7. 部署问题 7.1. nfs挂载之后无法创建文件、文件夹 8. 剩下的问题9. 参考文档 1. 概述 cephfs直接使用不变,需要安装较多的依赖,相对来说nfs更加通用。 FSAL_CEPH 调…

Ceph rbd的寻址(rbd块文件的下载)

1. Ceph rbd 与 rgw的寻址(rbd块/对象存储文件的下载) 1.1. 索引的存储1.2. rbd 的寻址1.3. 小笔记1.4. rgw的寻址1.5. 数据恢复思路 1.5.1. 场景1.5.2. 思路 1. Ceph rbd 与 rgw的寻址(rbd块/对象存储文件的下载) 1.1. 索引的存储 ceph的索引都存储在omap中 rbd – 每个r…

OpenStack集成Ceph

1. 版本说明2. 前期准备 2.1. 创建keyring2.2. 创建pool2.3. 安装依赖包 3. glance 对接 3.1. glance-api.conf 4. 对接nova 4.1. libvirt配置4.2. nova conf配置 5. 对接cinder 5.1. /etc/cinder/cinder.conf5.2. virsh secret(所有计算节点)5.3. 配置cinder type 6. 测试 6.1…

rgw index对象存储在rocksdb中的组织形式

0.1. 定位index对象0.2. 分析rocksdb 0.1. 定位index对象 找到某个桶的bucket index对象 radosgw-admin bucket stats --bucket test "id": "c96a8bc3-c206-46a9-9f4a-71f80f7a8e95.24169.1"查到他在哪个osd ceph osd map default.rgw.buckets.index .…

LinuxMint/Ubantu修改hostname 主机名

由于在安装LinuxMint sonya的时候没有认真设置主机名(hostname), 所以主机名为自动生成的一段字符串. 我的username为wz, 主机名为wzGJ552,打开终端的时候, 顶部显示wzwz_GJ552. 一看就特别难受, 作为强迫症当然受不了, 于是改之. sudo vi /etc/host…

Certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown.

1. 问题描述2. 解决方式 1. 问题描述 |组件|版本|备注| |Ubuntu Docker Image|20.04|| 使用镜像时无论是镜像默认源还是清华源、阿里源都报错 Certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown. Could not handshake:…

[BZOJ1232][Usaco2008Nov]安慰奶牛cheer

1232: [Usaco2008Nov]安慰奶牛cheer Time Limit: 10 Sec Memory Limit: 162 MB Submit: 886 Solved: 654 [Submit][Status][Discuss]Description Farmer John变得非常懒, 他不想再继续维护供奶牛之间供通行的道路. 道路被用来连接N (5 < N < 10,000)个牧场, 牧场被连续…

ios30---pthread, NSThread, GCD, NSOperation

pthread&#xff08;线程库&#xff0c;很早就有的技术&#xff0c;了解&#xff09;&#xff1a;一套通用的多线程API适用于Unix\Linux\Windows等系统&#xff08;java开发也有pthread&#xff09;跨平台\可移植使用难度大(全是C函数) C语言 程序员管理线程生命周期&#xff0…