13

我想将图像存储在 sql 数据库中。图像的大小在 50kb 到 1mb 之间。我正在阅读有关 FileStream 和 FileTable 的信息,但我不知道该选择哪个。每行将有 2 个图像和一些其他字段。

图像永远不会被更新/删除,每天将插入大约 3000 行。

在这种情况下推荐哪个?

4

3 回答 3

14

最初,将文件(=二进制数据)存储在数据库中总是一个坏主意。通常的解决方法是将文件路径存储在数据库中并确保文件实际存在于该路径中。但是,可以使用varbinary(MAX)数据类型将文件存储在数据库中。

是在中引入的,它通过不将数据存储在数据库文件(仅指针)中来处理varbinary列,而是将数据存储在文件系统上的不同文件中,从而显着提高了性能。

是在中引入的,它是对 filestream 的增强,因为它直接向 SQL 提供元数据,并且允许访问 SQL 之外的文件(您可以浏览文件)。

建议:一定要使用 FileStream,同时使用 FileTable 可能也不错。

更多阅读(短):http ://www.databasejournal.com/features/mssql/filestream-and-filetable-in-sql-server-2012.html

于 2017-01-19T11:03:08.647 回答
2

在 SQL Server 中,BLOB 可以是将varbinary(max)数据存储在表中的标准数据,也可以是将数据varbinary(max)存储在文件系统中的 FILESTREAM 对象。数据的大小和用途决定了您应该使用数据库存储还是文件系统存储。

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

  • 正在存储的对象平均大于 1 MB。
  • 快速读取访问很重要。
  • 您正在开发将中间层用于应用程序逻辑的应用程序。

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

FILETABLE 的好处:

  • 存储在 SQL Server 数据库中的文件数据的 Windows API 兼容性。Windows API 兼容性包括以下内容:

    • 对 FILESTREAM 数据的非事务性流式访问和就地更新。
    • 目录和文件的分层命名空间。
    • 文件属性的存储,例如创建日期和修改日期。
    • 支持 Windows 文件和目录管理 API。
  • 与其他 SQL Server 功能的兼容性,包括管理工具、服务和对 FILESTREAM 和文件属性数据的关系查询功能。

于 2018-10-13T09:49:09.883 回答
-2

这取决于。我个人更喜欢链接到表格内的图像。它更简单,目录中的文件可以单独备份。

你必须考虑几件事情:

  1. 您将如何处理图像。只有链接可以让您轻松地将图像合并到网页中(使用 Web 服务器的propper 配置)。

  2. 图像有多少 - 如果它们存储在数据库中并且它们很多 - 这将增加数据库和备份的大小。

  3. 图像是否经常更改-在这种情况下,最好将它们放在数据库中以在数据库中拥有备份的实际状态。

于 2015-09-01T14:33:59.723 回答