用本地数据库在WPF中存储/处理文件附件的最佳方法是什么?

本文关键字:文件 最佳 是什么 方法 处理 数据库 WPF 存储 | 更新日期: 2023-09-27 18:16:18

这是应用程序的快速背景

基本上

.

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

就目前的情况而言,我无法改变它的环境。

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

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

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

当我在web开发中处理这个问题时,

第一个选项似乎有点矫情,但是因为我有一个应用服务器,所以我不必担心可能的用户干扰。

我喜欢选项2,但是用户可以移动这些文件,这样就会把所有的东西都弄乱,并且可能会在数据库中留下孤儿记录或孤儿文件的选项。

是否有最佳实践?

用本地数据库在WPF中存储/处理文件附件的最佳方法是什么?

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

摘自文章:

如果下列条件为真,则应考虑使用文件流:

存储的对象平均大于1mb。

快速读访问很重要。

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

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

希望有帮助!

这完全取决于你的要求。

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

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

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

这是性能VS一致性的问题。我从本地SQL Server数据库中的二进制列提供了1 GB的图像集合(每个约100 KB),并且工作顺利。我们甚至允许为多个用户安装DB作为远程服务器,并且仍然工作得很好(尽管我们不支持很多并发用户)。

我们曾经在磁盘上有一个Access DB,但是用户经常把文件结构弄乱,文件丢失,等等。将它们存储在数据库中已被证明是非常可靠的,并且对性能没有太大影响。备份,权限管理和导入/导出非常容易。

我推荐选项1,除非你有性能要求。