leveldb的密钥大小更改

时间:2016-04-19 21:53:20

标签: leveldb

我们使用leveldb索引磁盘的数据块,并为每个磁盘使用一个leveldb实例。 索引的键是 由于某些历史原因,指纹存在于密钥中(我不知道) 我们计划从密钥中删除这个指纹后缀(因为我们得出结论,我们可以通过inode和page_offset来保持密钥的唯一性。)

问题是从旧版本升级到更新版本,我们需要在短时间内维护两个索引,直到第一个索引变为空闲。 问题是,有没有办法使用相同的旧索引并更改新密钥插入的密钥大小,并且在查找期间只使用 忽略后缀部分的旧密钥?

如果我的问题不是很清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以在leveldb::Options.comparator上进行一些工作,默认情况下为leveldb::BytewiseComparatorImpl 例如,您可以定义名为IgnoreSuffixComparatorImpl的类:

#include "leveldb/comparator.h"
class IgnoreSuffixComparatorImpl : public Comparator {
  ...
  virtual int Compare(const Slice& a, const Slice& b) const {
     return removeSuffix(a).compare(removeSuffix(b));
  }
  ...
}

然后,当你初始化db时,你可以使用新的比较器:

options.comparator = new IgnoreSuffixComparatorImpl();
s = leveldb::DB::Open(options, db_path, manifest, &db);