Memcachedは、分散コンシステントハッシュを使用して、キーを配置するサーバーを選択しますが、どのハッシュアルゴを使用して、サーバー選択にKetamaアルゴが適用される最終ハッシュに文字列キーをマッピングします。そして、同じようなキーを異なるサーバーに拡散するのに、そのアルゴリズムはどれほど優れているのでしょうか。
1 に答える
hash.cのソースコードによると、memcachedは次のアルゴリズムを使用します。
ここで使用されているハッシュ関数は、1996年のBobJenkinsによるものです。
http://burtleburtle.net/bob/hash/doobs.html
「BobJenkins著、1996年。bob_jenkins@ burtleburtle.net。このコードは、プライベート、教育、または商用のいずれの方法でも使用できます。無料です。」
ボブ・ジェンキンスのウェブサイトから:
現在使用しているものよりも高速で徹底的なハッシュテーブルルックアップ用の新しいハッシュ関数を提供します。また、それがより徹底的であることを確認する方法も提供します。
また、彼の要件は次のとおりです。
- キーは、整列されていない可変長バイト配列です。
- キーがそのような配列である場合があります。
- 独立したハッシュ関数のセットが必要になる場合がありました。
- キーの平均長は8バイトから200バイトの範囲でした。
- キーは、文字列、数字、ビット配列、または奇妙なものである可能性があります。
- テーブルのサイズは、2の累乗を含めて何でもかまいません。
- ハッシュは古いものより高速でなければなりません。
- ハッシュは良い仕事をしなければなりません。
..。
その場合、実際の要件は、優れたハッシュ関数が、ユーザーが実際に使用するキーのハッシュ値を均一に分散する必要があることです。
To get back to your other question, he measured the ability of the algorithm to uniformly distribute hash values, so I would presume that the hash does a good job at spreading similar keys to different servers. If you have concerns, the code is isolated so you should be able to run your own tests.