重複の可能性:
データベースに安全に格納できる文字列の HashCode を .net (c#) で作成するにはどうすればよいですか?
データベースに何十万もの URL を保存することを計画しています。UrlInfo テーブルの各行は、URL 自体が論理的な主キーであり、変更できません。URL はかなり長くなる可能性があるため、新しい行を追加するときに一致する可能性のあるものをすばやく見つける方法として、URL をハッシュすることにしました。ハッシュは私の真のキーではなく、可能な一致をすばやく見つける方法です。さらに、ドメインごとに RegEx パターンを使用して、URL の本質を抽出し、他の URL と比較できるようにしています。正規表現の結果もハッシュとして保存していますが、重複の可能性があるかどうかは心配していません。
物事をハッシュするために使用してきた C# の string.GetHashCode() メソッドが、.Net の実装間で一意であることが保証されていないことを知るまで、すべてが順調に進んでいました。これは、ハッシュ関数を ASP.Net から SQLServer CLR コードに移動しようとしたときに気付きました。Web アプリは .Net 4.0 を使用し、SQLServer 2008 R2 は .Net 3.5 を使用していることを知りました。同じ文字列に対して個別のハッシュ結果が得られたため、string.GetHashCode() を使用しないようにする必要があります。これは、アプリを将来のバージョンの .Net にアップグレードするときにこの変更について心配する必要がないためです。
だから、質問:
データベースにハッシュを保存しているため、アーキテクチャの臭いはありますか? より良い方法はありますか?明らかに、Microsoft は私がハッシュ結果を保存することを望んでいません!
文字列をハッシュするための優れた C# 置換アルゴリズムを誰かが推奨できますか? Jon's hereを見ましたが、文字列に対して機能するように変更する方法が正確にはわかりません(ASCIIコードを使用して各文字をループしますか?)。
ハッシュアルゴリズムを使用するよりも優れた文字列圧縮アルゴリズムはありますか?
ありがとう
多くの人から素晴らしい反応。どうもありがとうございます!!!