データベースに何百万ものエントリを保存する必要があります。各エントリは、一意の整数識別子のセットによって識別されます。たとえば、値は、それぞれが1億未満である10個の整数識別子のセットによって識別される場合があります。
データベースのサイズを小さくするために、単一の32ビット整数値を使用した次のエンコードを考えました。
識別子1:0-100,000,000 識別子2:100,000,001〜200,000,000 。 。 。 識別子10:900,000,001-1,000,000,000
私はJavaを使用しています。エンコード/デコードする簡単なメソッドを書くことができます。ユーザーコードは、フェッチ/ストア中にエンコード/デコードしていることを知る必要はありません。
私が知りたいのは、そのようなエンコード/デコードを実装するための最も効率的(最速)で推奨される方法は何ですか。単純な実装では、多数の乗算/減算が実行されます。
シフト(またはビット演算)を使用して、異なるパーティションサイズを選択することは可能ですか(各セグメントのサイズは1億に近い必要があります)?
私はどんな提案、アイデア、あるいは全く異なる計画さえも受け入れます。整数識別子が制限されているという事実を利用して、パフォーマンスを著しく損なうことなくストレージサイズを大幅に削減したいと思います。
編集:私はこのフォーラムに投稿された回答のいくつかを通過したことを追加したかっただけです。一般的な解決策は、各識別子のビットを分割することでした。各識別子に2ビットを使用して合計10個の識別子を使用すると、識別子の範囲が大幅に制限されます。