0

このアプリケーションでは、ユーザーがさまざまなドキュメントを生成して送信できるようにします。これらのいくつかは常に一意ですが、それらの大部分は静的です。実際のデータに FileStream を使用して、ファイルを SQL 2008 DB に保存します。ファイルが既に保存されていることを検出する方法を探しているので、重複を保存しません。

MD5 を使用してハッシュを生成し、そのハッシュを SQL データベースへのキーとして使用することを考えています。私が恐れているのは、衝突が発生する可能性です。

私が持っているいくつかの質問は次のとおりです。

1: ハッシュで衝突が発生する可能性は? 一意のキーは、ファイル名、ファイルのサイズ、およびハッシュの組み合わせとして扱う必要がありますか?

2: 得られたハッシュをデータベースに保存するものは何ですか? バイナリフィールドとして保存する必要がありますか?

4

1 に答える 1

1

これは非常に一般的な面接の質問の 1 つです。そのため、長い議論が必要です:)。

  1. 誕生日のパラドックス- とても高いです。ただし、一定時間内に取得できる一部のデータ (サイズ、最初/最後の X バイトなど) では、「ハッシュ」が長くなるため、衝突の可能性がより受け入れやすくなります。最初に、より長いハッシュ (Sha256?) を生成するものを使用します。

  2. Sha256ハッシュのBase64文字列+その他の有用なビット(またはバイナリではないと思われるその他のインデックス可能なフィールド)を使用します。

ファイル名はバイナリデータ自体の一部ではなく、独立して変更できるため、「ハッシュ」の一部としてファイル名を使用しないことに注意してください。

于 2013-05-28T16:26:31.713 に答える