データベーステーブルの主キーを作成するためにハッシュアルゴリズムを使用しています。私はSHA-1アルゴリズムを使用しています。データベースには、SHA-1の実装も含まれています。ハッシュを計算する関数は、16進数の値を40文字で返します。したがって、私はchar(40)
カラムに16進文字を格納しています。データベースにSHA-1を40桁の16進数よりも少ない領域に格納
テーブルには、> 200 Mio以上の行があります。私はハッシュを格納するデータ集約的ではない方法を探しています。 40文字×200ミオ。行はいくつかのGBの記憶容量を必要とします... hexはbase16なので、私は基本的な256にそれを約20文字に必要な文字の量を減らすことを望んで格納しようとすることができると考えました。ベース256での圧縮の実装に関するヒントや論文はありますか? ブロブとして
これはプログラミング上の質問で、これは話題にはなりません。格納しようとしているオブジェクトは160ビットの数値で、16進数を文字列として格納するのではなく、160ビットの数値として保存するだけです。 (同様に、5桁の10進数を格納しようとすると、 'char [5]'ではなく 'int'に格納します)。 –
@DavidRicherby私は' int'を格納できません私は衝突のない鍵が必要で、ハッシュ関数の出力は 'char(40)'です。 intに16進文字列を格納すると、その数が非常に多くなるので、より多くのバイトが必要になると思います。 –
もちろん、 'int'は160ビットの数値を保持しません。しかし、ある種の整数形式でデータを格納すると、スペースは少なくなります。文字列として格納すると、1バイトあたり4ビットの有用なデータが得られます(基本システムが16ビット文字セットを使用している場合よりも少なくなります)。 –