2016-04-19 8 views
0

ディスクのインデックスブロックにleveldbを使用し、ディスクごとに1つのleveldbインスタンスを使用しています。 インデックスのキーは 歴史的な理由でキーに存在していました 私たちはキーからこのフィンガープリントサフィックスを取り除くことを計画しています(私たちは一意性inodeとpage_offsetを持つキーの)leveldbのキーサイズの変更

問題は、古いバージョンから新しいバージョンへのアップグレードです。ここでは、最初のインデックスが空になるまで2つのインデックスを短時間維持する必要があります。 質問は、同じ古いインデックスを使用し、新しいキー挿入のキーサイズを変更し、ルックアップ時に接尾辞部分を無視する古いキーにだけを使用する方法はありますか?

私の質問があまり明確でない場合は教えてください。

答えて

0

leveldb::Options.comparatorについては、デフォルトでleveldb::BytewiseComparatorImplです。あなたのinitデシベル、新しいコンパレータを使用することができたときに、その後

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

:あなたはIgnoreSuffixComparatorImplという名前のクラスを定義することができる。例えば

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

はあなたにSEL-魚をありがとうございます。 私は似たようなことをやってくれました。 キーを比較しながら最初のものとしてキーの長さを含めるようにコンパレータを変更しました。したがって、新しいインデックスキーは古いキーと共存できます。返信ありがとうございます。 –

+0

@SureshChowta cool! –