leveldb - menifest文件格式

MANIFEST文件是Level DB的元信息文件,它主要包括下面一些信息:

void VersionEdit::EncodeTo(std::string* dst) const {
  if (has_comparator_) {  // 记录Comparator
    PutVarint32(dst, kComparator);
    PutLengthPrefixedSlice(dst, comparator_);
  }
  if (has_log_number_) {  // 记录Log Numer
    PutVarint32(dst, kLogNumber);
    PutVarint64(dst, log_number_);
  }
  if (has_prev_log_number_) {  // 记录Prev Log Number,现在已废弃,一般为0
    PutVarint32(dst, kPrevLogNumber);
    PutVarint64(dst, prev_log_number_);
  }
  if (has_next_file_number_) {  // 记录下一个文件序号
    PutVarint32(dst, kNextFileNumber);
    PutVarint64(dst, next_file_number_);
  }
  if (has_last_sequence_) {  // 记录最大的sequence num
    PutVarint32(dst, kLastSequence);
    PutVarint64(dst, last_sequence_);
  }

  // 记录每一级Level下次compaction的起始Key
  for (size_t i = 0; i < compact_pointers_.size(); i++) {
    PutVarint32(dst, kCompactPointer);
    PutVarint32(dst, compact_pointers_[i].first);  // level
    PutLengthPrefixedSlice(dst, compact_pointers_[i].second.Encode());
  }
  // 记录每一级需要删除的文件
  for (DeletedFileSet::const_iterator iter = deleted_files_.begin();
       iter != deleted_files_.end();
       ++iter) {
    PutVarint32(dst, kDeletedFile);
    PutVarint32(dst, iter->first);   // level
    PutVarint64(dst, iter->second);  // file number
  }
  // 记录每一级需要有效的sst以及其smallest与largest的key
  for (size_t i = 0; i < new_files_.size(); i++) {
    const FileMetaData& f = new_files_[i].second;
    PutVarint32(dst, kNewFile);
    PutVarint32(dst, new_files_[i].first);  // level
    PutVarint64(dst, f.number);
    PutVarint64(dst, f.file_size);
    PutLengthPrefixedSlice(dst, f.smallest.Encode());
    PutLengthPrefixedSlice(dst, f.largest.Encode());
  }
}

  

时间: 2024-11-12 00:07:42

leveldb - menifest文件格式的相关文章

MENIFEST文件格式

Manifest-Version: 1.0 Class-Path: ./lib/aopalliance-1.0.jar ./lib/commons-collections-3.2.jar ./lib/commons-dbcp-1.2.1.jar ./lib/commons-logging-1.1.1.jar ./lib/commons-pool-1.2.jar ./lib/disruptor-3.0.0.jar ./lib/hamcrest-core-1.3.jar ./lib/mysql-co

Caffe应用篇----文件格式转换

我们手中有的一般都是图片数据,jpg.bmp格式等,但caffe常使用的数据是db格式(leveldb/lmdb),因此首先我们要将自己数据转换成caffe可运行的格式文件.别捉鸡,caffe有给我们提供工具.根目录的tools文件下convert_imageset.cpp,经编译生成可执行文件,存放于./build/tools/文件,这个文件可帮我们将图片文件转换成db格式. 以分类任务为例,需要4个文件,train.train.txt.val.val.txt,train和val分别存放训练数

caffe学习笔记(十)图像数据转换为db(leveldb/lmdb)文件

在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致.而在caffe中经常使用的数据类型是lmdb或leveldb,因此就产生了这样的一个问题:如何从原始图片文件转换成caffe中能够运行的db(leveldb/lmdb)文件? 在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在根目录下的tools文件夹下.编译之后,生成对应的可执行文件放在 buile/tools/ 下面,

深度学习文章3:将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件

将自己的图像数据转换成caffe需要的db(leveldb/lmdb)文件 在搭建好caffe环境之后,我们往往需要对自己的图像数据进行训练/测试,我们的图像数据往往时图片文件,如jpg,jpeg,png等,然而在caffe中我们需要使用的数据类型是lmdb或leveldb,例如:在之前测试MNIST数据集< 深度学习文章2:使用MNIST数据集验证Caffe是否安装成功 >时,我们运行脚本create_mnist.sh就是生成对应的db文件,运行后在~/caffe/examples/mnis

leveldb学习之sstable(2)

block写入:block_builder block.h和.cc里定义了block的entry存储格式和restart,提供了entry的查找接口以及迭代器.那么如何往写block里写entry呢?leveldb遵循面向对象的设计理念在block_builder类里提供了相关接口. BlockBuilder相关函数: Add( )将entry顺序写入现有block数据块的末端,排序工作在上层的函数完成. Finish( ),当block写满,完成写入重启点数组和重启点个数的写入 Reset(

leveldb学习:sstable(2)

block写入:block_builder block.h和.cc里定义了block的entry存储格式和restart,提供了entry的查找接口以及迭代器.那么怎样往写block里写entry呢?leveldb遵循面向对象的设计理念在block_builder类里提供了相关接口. BlockBuilder相关函数: Add( )将entry顺序写入现有block数据块的末端,排序工作在上层的函数完毕. Finish( ).当block写满,完毕写入重新启动点数组和重新启动点个数的写入 Res

LevelDB源码阅读(1)—— SSTable的生成

leveldb会按照不同版本组织数据(level-0 -> level-n,从新到旧),这些数据以SSTable格式存储于磁盘上.一个SSTable文件可以看成一个基于磁盘.只读的map,支持顺序扫描,同时可以查找某个key.本文就来探究一下SSTable文件的格式,以及创建过程. 1. SSTable文件格式 | - - - - - - - - - - - - - - - - | |   Data Blocks          | | - - - - - - - - - - - - - -

leveldb 源码--总体架构分析

一 本文目的 对leveldb的总体设计框架分析(关于leveldb基本原理,此文不做阐述,读者可以自行检索文章阅读即可),对leveldb中底层数据存储数据格式,内存数据模型,compact,版本管理,快照等机制实现介绍以及整个leveldb实现源码中各文件的源码实现职责,方便快速对leveldb有个总体的掌握 二 各特性机制的实现 1.leveldb的底层数据格式存储 leveldb底层数据格式,网上很多文章都有介绍,在此不做赘述,主要介绍一下上层怎么讲数据写入磁盘中. leveldb中k-

深入leveldb-初步认识leveldb

文章参考http://blog.chinaunix.net/uid-26575352-id-3245476.html 1. leveldb简介 leveldb是google两位工程师实现的单机版k-v存储系统,具有以下几个特点 1. key和value都是任意的字节数组,支持内存和持久化存储 2. 数据都是按照key排序 3. 用户可以重写排序函数 4. 包含基本的数据操作接口,Put(key,value),Get(key),Delete(key) 5. 多操作可以当成一次原子操作 6. 用户可