在SQL中存储图像字段的最佳和大规模解决方案是什么?

时间:2013-06-24 13:27:02

标签: c# .net sql-server database

在我的项目中,我有一个大型数据库,有大约60个表。 我应该保存并收集许多图像文件(大约5000个),它们的平均大小约为2MB。

我的数据库的估计大小将是10 GB甚至更高!

首先在代码中考虑这些模型:

class Document
{
   [Key]
   public int Id {get;set}
// ...
   public virtual ICollection<ImageDocument> Images {get;set;}
}

class ImageDocument
{
   [Key]
   public int Id {get;set}
// ...
   public Document Document {get;set;}
}

如您所见,每个文档都有一些ImageDocuments

我的解决方案:

考虑以下两步:

  1. ImageDocuments添加到相关文档,然后添加生成的 通过调用Add中的SaveChangeEntityFramework方法来记录文档 DbContext

  2. 为每个ImageDocuments调用创建的存储过程     相关文件。被调用的存储过程使用bcp命令     从数据库中提取图像文件并将其保存在特定的路径中     然后,服务器从数据库中删除ImageDocument的数据。

  3. 它有效,但我有这样的问题

    1. 我无法创建备份集成文件。
    2. 由于我的保存事务而导致的原子性违规被破坏 一些小额交易。
    3. 一致性-冲突。也许在调用存储过程系统 陷入崩溃。
    4. 耐久性-冲突。因为删除ImageDocument记录到 发布数据库空间。
    5. 现在我的问题是,有没有更好的解决方案来解决问题?

      如果我们可以在SQL服务器中创建一个文件字段来维护文件分隔数据库文件中的内容,那就太棒了。

1 个答案:

答案 0 :(得分:2)

如果您使用的是SQL Server,则应该使用FileStreams。直接通过SQL代理到磁盘。

http://msdn.microsoft.com/en-us/library/gg471497.aspx