0

最近のMVC3プロジェクトでは、ファイルをMSSQLデータベースに保存することにbyte[]なりました(MVC3はこれをvarbinary(max)列に変換します)。

ファイルがデータベースにコミットされると、変更されることはありません。

ユーザーが同じファイルを何度も追加したとしても、同じファイルを複数回保存しないように、本当に賢くしようとしています。

これを回避するための最初のアイデアは、byte[]追加しようとしている に既存の一致があるかどうかを検索する where クエリを作成することでした。ただし、ファイルのサイズが約 100Mb になる可能性があり、同時に複数の人がファイルを追加する可能性があるため、これはクエリが重すぎるのではないかと心配しています。

さらに賢くするために、ファイルに関する情報を使用して検索を絞り込むことができます。現在、モデルには次の関連する列があります。

public byte[] FileData { get; set; }        
public String MimeType { get; set; }
public double FileSizeMb { get; set; }

同じ MIME タイプとファイル サイズのファイルがあるかどうかを検索し、 のハッシュを追加することもbyte[]できます。. byte[]そうすれば、適切なタイプの適切なサイズと同じハッシュを持つファイルがある場合にのみ比較できます。これは、それほど重くないはずです..

これを達成するためのより良いオプションはありますか? この問題をどのように解決するのが最善でしょうか?

違いがある場合は、mssql 2012 を使用しています。

4

2 に答える 2

1

FileData(もちろん Web サーバー側で) のハッシュを計算し、ハッシュとファイル サイズを使用して検索する必要があります。一致する場合は、FileDataWeb サーバーにダウンロードして比較する必要があります (その逆ではありません)。

于 2012-07-31T19:40:45.400 に答える
1

生の長さをバイト単位で格納し、c# によって計算されたハッシュで十分だと思います。

于 2012-07-31T19:39:06.030 に答える