【问题标题】:Whats the best way to store/handle file attachments in WPF with a local database?使用本地数据库在 WPF 中存储/处理文件附件的最佳方法是什么?
【发布时间】:2012-01-09 19:45:04
【问题描述】:

这是应用的快速背景

基本上..

  1. 每台机器多个用户(通常只有一个)
  2. 在每台机器上运行的本地 sql server 数据库拥有自己的数据
  3. WPF 应用能够将表格中的数据导出到 zip 文件中

就目前而言,我无法更改其开启的环境。

我看到处理保存/上传附件到 docs(pdf,doc) 的两个选项 目前,据我所知,没有尺寸要求或所需的扩展

  1. 将每个文件作为 varbinary 直接保存到数据库中,并使用 FK 和参考表将这些文件附件返回到应用程序中以供打开

  2. 具有相同的 FK 和引用表,但我将文件保存到本地硬盘驱动器上的某个文件夹(哈希 + 加密?)。然后我将该文件重命名为通用名称并将该文件的名称和位置存储在数据库中。

当我在 Web 开发中处理这个问题时,第一个选项似乎很糟糕,但是由于我有一个应用程序服务器,所以我不必担心可能的用户干扰。

我喜欢选项二,但文件可以由用户移动,并且会破坏所有内容,并且可能会留下数据库中的孤立子记录或孤立文件的选项。

对此有最佳实践吗?

【问题讨论】:

    标签: c# sql-server file attachment


    【解决方案1】:

    这完全取决于您的要求。

    如果您希望能够将 SQL 数据库从一台机器复制到另一台机器,或者如果您希望通过还原数据库备份来进行完整的灾难恢复,那么选项 1 是您的最佳选择。当然,这意味着您的数据库可以变得非常大。

    如果你想保持你的数据库很小,并且你可以确保你的目录或文件系统受到保护,并且你不需要上面提到的要求,那么选项 2 是一个不错的选择。

    我不知道您的要求,但对于我过去的项目,选项 1 一直是最好的。

    【讨论】:

      【解决方案2】:

      这是性能与一致性的问题。我有一个从本地 SQL Server 数据库中的二进制列提供的 1 GB 图像集合(每个约 100 KB),并且工作顺利。我们甚至允许将数据库安装为多个用户的远程服务器,并且仍然可以正常工作(但我们不支持大量并发用户)。

      我们曾经有一个 Access DB,文件在磁盘上,但用户经常弄乱文件结构,文件丢失等。事实证明,将它们存储在 DB 中非常可靠,对性能也没有那么糟糕。备份、权限管理和导入/导出非常简单。

      除非您有其他规定的性能要求,否则我会推荐选项 1。

      【讨论】:

        【解决方案3】:

        如果使用 SQL Server 的支持版本,最好的办法是使用 FILESTREAM data type,因为它提供了很多性能优势,值得一提,除非所有存储的对象都小于 1MB。

        来自文章:

        如果满足以下条件,则应考虑使用 文件流:

        正在存储的对象平均大于 1 MB。

        快速读取访问很重要。

        您正在开发使用中间层的应用程序 逻辑。

        对于较小的对象,在数据库中存储 varbinary(max) BLOB 通常提供更好的流媒体性能。

        希望有帮助!

        【讨论】:

        • 看了看,它看起来正是我想要的。解决了让 sql server 处理指针引用并消除超过 varbinary max 的可能性。以及将其保存在文件系统而不是数据库文件中。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 2011-01-03
        • 2018-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        相关资源
        最近更新 更多