如何使用C#和MVC3在MSSQL数据库中搜索byte[]/varbinary

本文关键字:byte 搜索 varbinary 数据库 何使用 MVC3 MSSQL | 更新日期: 2024-09-08 05:49:33

对于最近的一个MVC3项目,我最终将文件作为byte[]存储在MSSQL数据库中(MVC3将其转换为varbinary(max)列)。

一旦文件被提交到数据库,它们将永远不会更改。

现在,我试着变得非常聪明,避免多次存储同一个文件,即使用户一遍又一遍地添加相同的文件。

我避免这种情况的第一个想法是创建一个where查询,试图查找是否存在我要添加的byte[]的现有匹配项。然而,我担心这是一个太重的查询,因为文件的大小可能在100Mb左右,并且可能有多个人同时添加它们。

为了更加聪明,我可以使用一些关于文件的信息来缩小搜索范围。我目前在模型中有以下相关列。

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

我可以搜索是否有任何具有相同mime类型和文件大小的文件,也可以添加byte[]的哈希,看看我是否可以在尝试匹配byte[]之前从中获得匹配。这样,只有当我有一个大小合适、类型合适、哈希相同的文件时,我才会进行比较,这个文件应该不那么重。。

有没有更好的选择来实现这一点?我该如何最好地解决这个问题?

如果有什么不同的话,我使用的是mssql2012。

如何使用C#和MVC3在MSSQL数据库中搜索byte[]/varbinary

您应该计算FileData的哈希(当然是在web服务器端),并使用哈希和文件大小进行搜索。如果您有匹配项,您应该将FileData下载到web服务器并进行比较(而不是相反)。

我认为以字节为单位存储原始长度和c#计算的哈希应该足够了。