LevelDBで自動インクリメントキーを生成するための良い戦略は何ですか? 私の目標は、挿入された順序でキーを反復処理できるようにすることです。
3 に答える
LevelDB インスタンスは一度に 1 つのアプリケーションからしかアクセスできないため、アプリケーションで 64 ビット long を使用してインクリメントすることもできます。DB を開くとき (および書き込みを許可する前) に、最後に挿入されたキーを見つけるには、Iterator の SeekToLast() メソッドを使用できます。
integer keys に関する質問で指摘したように、バイナリ整数を使用する場合は、データベースのカスタム Comparator を作成する必要があります。そうしないと、バイナリの昇順で取得できません。難しいことではありませんが、必要性を見落としている可能性があります。
あなたが何を求めているのかよくわかりません。追加する唯一のデータがエントリをログとして記録することになっているキーである場合は、はい、整数キーを使用してください。
ただし、キーを挿入する場合は、他の理由を検索することに加えて、後で挿入順に反復する必要があるため、もう少し複雑になります。
基本的に、各キー値に 2 つのキーを挿入し、プレフィックスを使用してキーが「値キー」か「順序付けキー」かを判断します。たとえば、Frank、John、Sally、Amy をキーとして使用し、プレフィックス ~N を Name キーに使用し、~I を Iterator キーに使用するとします。
データベースは次のようになります。キーから名前を取得するだけなので、「反復子キー」には値が関連付けられていないことに注意してください。整数値を使用して特別な Comparator を必要とするのではなく、数値に 2 桁の文字列を使用したかのように示しました。
~I00Frank
~I01John
~I02Sally
~I03Amy
~NAmy => Amy's details
~NFrank => frank's details
~NJohn => John's details
~NSally => Sally's details