ハッシュのセット(MD5の最初の64ビットなので、非常にランダムに分散されます)があり、新しいハッシュがセットに含まれているかどうかを確認し、それをセットに追加できるようにしたいと考えています。
セットはそれほど大きくはなく、最大のものは数百万の要素になりますが、数百のセットがあるため、すべてをメモリに保持することはできません。
私がこれまでに持っていたいくつかのアイデア:
- すべてをsqliteテーブルに保持しようとしましたが、すべてをメモリに収めることができなくなると、非常に遅くなります。
- ブルームフィルターは、エラー率が非常に高いように聞こえます。私は小さなエラー率を気にしません(64ビットハッシュはすでに4G要素セットで1つの衝突を与えます)が、1%のようなエラー率は非常に高すぎます。
- ファイルにギャップのあるハッシュのソート済みリストを保持し、十分なギャップがない場合はサイズを変更します。ハッシュは均一に分散されているため、このような非常に単純なスキームでも機能するはずです。
私は本当に明白な何かを逃していますか?優れたディスクベースのハッシュテーブルを実装するためのヒントはありますか?