对于最近的 MVC3 项目,我最终将文件存储在 MSSQL 数据库中byte[]
(MVC3 将其转换为 varbinary(max) 列)。
一旦文件被提交到数据库,它们就永远不会改变。
现在我试图变得非常聪明,即使用户一遍又一遍地添加同一个文件,也要避免多次存储同一个文件。
我避免这种情况的第一个想法是创建一个 where 查询来尝试查找是否存在与byte[]
我尝试添加的匹配项。然而,我担心这是一个过于繁重的查询,因为文件的大小可能在 100Mb 左右,并且可能有多个人同时添加它们。
为了更聪明,我可以使用有关文件的一些信息来缩小搜索范围。我目前在模型中有以下相关列。
public byte[] FileData { get; set; }
public String MimeType { get; set; }
public double FileSizeMb { get; set; }
我可以搜索是否有任何文件具有相同的 mime 类型和文件大小,还可以添加一个哈希值,byte[]
看看我是否可以在尝试匹配byte[]
. 这样我只比较当我有一个正确大小的正确类型和相同哈希的文件时,它应该不那么重..
有没有更好的选择来实现这一点?我将如何最好地解决这个问题?
如果有什么不同,我使用的是 mssql 2012。