sql >> データベース >  >> NoSQL >> Redis

MurmurHash-それは何ですか?

    Murmurは、暗号化されていない使用に適した、優れた汎用ハッシュ関数のファミリーです。オースティンアップルビーが述べたように、MurmurHashには次の利点があります。

    • シンプル(生成されたアセンブリ命令の数に関して)
    • 良好な分布(実質的にすべてのキーセットとバケットサイズのカイ2乗検定に合格。
    • 良好な雪崩挙動(最大バイアス0.5%)。
    • 優れた衝突耐性(Bob Jenkinのfrog.c拷問テストに合格。4バイトのキーでは衝突は不可能、小さな(1〜7ビット)差分はありません)。
    • Intel / AMDハードウェアでの優れたパフォーマンス、ハッシュ品質とCPU消費の間の適切なトレードオフ。

    確かにこれを使用してUUIDをハッシュできます(他の高度なハッシュ関数のように:CityHash、Jenkins、Paul Hsiehなど)。現在、Redisビットセットは4 GBビット(512 MB)に制限されています。したがって、128ビットのデータ(UUID)を32ビット(ハッシュ値)に減らす必要があります。ハッシュ関数の品質がどうであれ、衝突が発生します。

    Murmurのような設計されたハッシュ関数を使用すると、分布の品質が最大化され、衝突の数が最小化されますが、他の保証はありません。

    汎用ハッシュ関数の品質を比較するリンクは次のとおりです。

    http://www.azillionmonkeys.com/qed/hash.html

    http://www.strchr.com/hash_functions

    http://blog.aggregateknowledge.com/2011/12/05/choosing-a-good-hash-function-part-1/

    http://blog.aggregateknowledge.com/2011/12/29/choosing-a-good-hash-function-part-2/

    http://blog.aggregateknowledge.com/2012/02/02/choosing-a-good-hash-function-part-3/



    1. arrayFiltersでフィルターされた位置演算子を使用して更新を適用する方法

    2. Javaを使用したRedis(キャッシュ)の単一の値を指す複数のキー

    3. mongodbで複数の配列要素を更新する方法

    4. Azure上のMongoDB:適切なインスタンスタイプを選択する方法は?