2012-07-31 22 views
0

對於最近的MVC3項目,我最終將文件存儲在MSSQL數據庫中作爲byte[](MVC3將此變爲varbinary(max)列)。如何使用C#和MVC3在MSSQL數據庫中搜索字節[]/varbinary

一旦文件被提交到數據庫,他們將永遠不會改變。

現在我試圖做到真正的聰明,並避免多次存儲相同的文件,即使用戶一遍又一遍地添加相同的文件。

我的第一個想法是避免這種情況是創建一個where查詢來嘗試查找是否存在我試圖添加的byte[]的現有匹配項。然而,我擔心這個查詢過於沉重,因爲文件大小可能在100Mb左右,並且可能有多個人同時添加它們。

要嘗試更聰明我可以使用一些關於該文件的信息來縮小搜索範圍。我目前在模型中有以下相關列。

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

我可以搜索是否存在具有相同的MIME類型和文件大小的任何文件以及可能加入byte[]的哈希太看看我是否能得到一個匹配過這些之前,我嘗試匹配byte[]。這種方式即時通訊只有當我有一個正確的大小的正確類型和相同的散列,這應該是不重的文件比較..

有沒有更好的選擇來實現這一目標?我將如何最好地解決這個問題?

如果這是我使用MSSQL 2012

回答

1

你應該計算你的FileData的散列(當然是在Web服務器端),並使用散列和文件大小進行搜索。如果你有一個匹配,你應該下載FileData到網絡服務器和比較(而不是其他方式)。

1

我認爲存儲字節的原始長度和C#計算哈希應該足夠任何區別。

+0

這是正確的100%的時間嗎?沒有相同長度和相同散列的機會,永遠不會? – JensB 2012-07-31 19:56:08

相關問題