アルゴリズムの説明: 関数の後ろのコメントは、私のローカルテストでの実行速度 (単位: s) が 1000 倍であることがわかります。MD5Hash が最も速く、他の関数よりもはるかに高速であることがわかります。この関数のアルゴリズムでは、md5 以降の文字列の最初の 7 文字のみに依存します。つまり、最初の 7 文字が同じであれば、取得されるハッシュ値はまったく同じになります。あまり信頼できません....32文字に基づいて計算すると、速度は他のアルゴリズムよりもはるかに遅くなります... MD5Hash を除いて、他のアルゴリズムは文字列の長さの影響を受けます。テストでは英語で 10 文字を使用しました。 各関数の最終的な戻り値 $hash % 701819; 701819 はハッシュの最大容量を表しており、これらのハッシュ関数によって得られる最終的な数値範囲は 0 ~ 701819 を使用することが一般的であると考えられます。素数の結果の分布は比較的均一になります。701819 に近い値としては、175447、350899、1403641、2807303、5614657 があります。 これは何に使えるの... なぜこれらのハッシュ アルゴリズムを整理してテストする必要があるのでしょうか? 私はマルチユーザー ブログを書いています。前回のブログでも述べましたが、これは一般にユーザーを使用する機能です。ブログアドレスとして英語と数字を組み合わせた名前 (第 2 レベルのドメイン名またはディレクトリ)。次に、ユーザー名に基づいてユーザーの ID を取得する方法について質問があります。もう 1 つのクエリはありますか?ハッシュ関数を使えば、ユーザー名を加工して数値を取得し、その数値に対して何らかの処理をする必要がありません(2桁を基準に階層ディレクトリに分けています。目的はそれを防ぐためです)。 1 つのディレクトリに多数のファイルを格納すると (ディスクの取得速度に影響します)、パスが形成され、対応する ID がこのパスの下のファイルに保存されます (個人的にはファイル名としてユーザー名を推奨します)。ユーザーの ID はユーザー名に基づいて直接取得でき、クエリは必要ありません。ユーザー名はファイル名として使用されるため、最終結果が同じであっても、それらは異なるファイルに存在するため、必要はありません。衝突を心配するため。 もちろん...あなたのシステムが完全にユーザー名に基づいて動作する場合、私はこれを前に言いませんでした = =b、私は静かに SELECT を批判します。なぜなら数値は文字列よりも速いからです。 私は DJB アルゴリズムを選択しました。オンライン化後に MD5 配布テストが許容される場合は、それに切り替えることを検討します。 ここから、ハッシュが実際に分散に非常に役立つこともわかります。笑、分散ストレージを必要とするキャッシュ、静的、その他の用途に使用できます。 |