質問

データベースにURLを保存しています。新しいものを挿入すると、そのURLがすでにデータベースに存在するかどうかを確認したいと思います。

一般的な慣行(私が間違っていない場合)は、MD5またはSHA-1などを使用してURLをハッシュすることです...そして、データベースでそのフィールドをチェックして、新しいものを挿入する前に複製することです。

MD5が衝突を生み出すことができることを知っています。

私に何を提案しますか?私のニーズは次のとおりです。

  • DBサイズ: 最終的には、データベースに関する1億から2億人の記録になります

  • パフォーマンス/スピード: ハッシュサイズが小さいため、データベースには重複の重い負荷チェックがありません(もちろん、そのフィールドにはコースのインデックスがあります)

  • 許容範囲: 100,000のレコードごとに1つの衝突が発生しても気にしません。私のニーズは、0%の衝突(大きなハッシュ)ではなく、パフォーマンス(小さなハッシュ)に向けています。

  • 意図的に衝突を生成するための奇形のURLによる攻撃の可能性: 非常に低い

  • このような攻撃が成功した場合に可能な最大ダメージ: 非常に低い

質問:

  • MD5で十分だと思いますか(提案するより良いもの)?

  • たぶんMD5は偶数です 過剰になります 私にとっては、より簡単なものを使用することで、パフォーマンスのメリットを真剣に得ることができますか?

よろしくお願いします!

役に立ちましたか?

解決

MD5または同様の比較的安価なハッシュを使用するのはどうですか(多分 クォーク?)、そして一致するエントリの完全なURLをチェックする衝突のまれなケースでは?このようにして、ほとんどの場合、安価なハッシュチェックがありますが、実際に重複したURLを挿入することもありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top