我们使用leveldb索引磁盘的数据块,并为每个磁盘使用一个leveldb实例。 索引的键是 由于某些历史原因,指纹存在于密钥中(我不知道) 我们计划从密钥中删除这个指纹后缀(因为我们得出结论,我们可以通过inode和page_offset来保持密钥的唯一性。)
问题是从旧版本升级到更新版本,我们需要在短时间内维护两个索引,直到第一个索引变为空闲。 问题是,有没有办法使用相同的旧索引并更改新密钥插入的密钥大小,并且在查找期间只使用 忽略后缀部分的旧密钥?
如果我的问题不是很清楚,请告诉我。
答案 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);