文件流与文件表
FileStream vs FileTable
我想将图像存储在 sql 数据库中。图像的大小在 50kb 到 1mb 之间。我正在阅读有关 FileStream 和 FileTable 的信息,但我不知道该选择哪个。每行将有 2 个图像和一些其他字段。
图像永远不会 updated/deleted 并且每天将插入大约 3000 行。
在这种情况下推荐哪个?
视情况而定。我个人会更喜欢 link 到 table 内的图像。比较简单,目录下的文件可以单独备份。
你必须考虑几件事:
您将如何处理图像。只有 link 允许您轻松地将图像合并到网页中(使用适当的 Web 服务器配置)。
图像有多少 - 如果它们存储在数据库中并且它们很多 - 这将增加数据库和备份的大小。
图像是否经常更改 - 在这种情况下,将它们放在数据库中可能会更好,以便在数据库中具有备份的实际状态。
最初在数据库中存储文件(= 二进制数据)总是一个坏主意。通常的解决方法是将文件路径存储在数据库中,并确保文件实际存在于该路径中。不过,使用 varbinary(MAX)
数据类型可以将文件存储在数据库中。
sqlfilestream was introduced in sql-server-2008 并通过不将数据存储在数据库文件(仅指针)中,而是在文件系统上的不同文件中处理 varbinary
列,从而显着提高性能。
filetable was introduced with sql-server-2012 是对文件流的增强,因为它直接向 SQL 提供元数据,并且允许访问 SQL 之外的文件(您可以浏览到文件) .
建议:一定要利用 FileStream,同时使用 FileTable 也不错。
更多阅读(短):http://www.databasejournal.com/features/mssql/filestream-and-filetable-in-sql-server-2012.html
在SQL 服务器中,BLOB 可以是标准的varbinary(max)
数据,将数据存储在表中,或者是FILESTREAM varbinary(max)
对象,将数据存储在文件系统中。数据的大小和用途决定了您应该使用数据库存储还是文件系统存储。
如果满足以下条件,您应该考虑使用 FILESTREAM:
- 正在存储的对象平均大于 1 MB。
- 快速读取访问很重要。
- 您正在开发将中间层用于应用程序逻辑的应用程序。
For smaller objects, storing varbinary(max) BLOBs in the database
often provides better streaming performance.
FILETABLE 的好处:
Windows API 存储在 SQL 服务器数据库中的文件数据的兼容性。 Windows API 兼容性包括以下内容:
- 非事务性流访问和对 FILESTREAM 数据的就地更新。
- 目录和文件的分层命名空间。
- 文件属性的存储,例如创建日期和修改日期。
- 支持 Windows 文件和目录管理 APIs.
与其他 SQL 服务器功能的兼容性,包括管理工具、服务以及对 FILESTREAM 和文件属性数据的关系查询功能。
我想将图像存储在 sql 数据库中。图像的大小在 50kb 到 1mb 之间。我正在阅读有关 FileStream 和 FileTable 的信息,但我不知道该选择哪个。每行将有 2 个图像和一些其他字段。
图像永远不会 updated/deleted 并且每天将插入大约 3000 行。
在这种情况下推荐哪个?
视情况而定。我个人会更喜欢 link 到 table 内的图像。比较简单,目录下的文件可以单独备份。
你必须考虑几件事:
您将如何处理图像。只有 link 允许您轻松地将图像合并到网页中(使用适当的 Web 服务器配置)。
图像有多少 - 如果它们存储在数据库中并且它们很多 - 这将增加数据库和备份的大小。
图像是否经常更改 - 在这种情况下,将它们放在数据库中可能会更好,以便在数据库中具有备份的实际状态。
最初在数据库中存储文件(= 二进制数据)总是一个坏主意。通常的解决方法是将文件路径存储在数据库中,并确保文件实际存在于该路径中。不过,使用 varbinary(MAX)
数据类型可以将文件存储在数据库中。
sqlfilestream was introduced in sql-server-2008 并通过不将数据存储在数据库文件(仅指针)中,而是在文件系统上的不同文件中处理 varbinary
列,从而显着提高性能。
filetable was introduced with sql-server-2012 是对文件流的增强,因为它直接向 SQL 提供元数据,并且允许访问 SQL 之外的文件(您可以浏览到文件) .
建议:一定要利用 FileStream,同时使用 FileTable 也不错。
更多阅读(短):http://www.databasejournal.com/features/mssql/filestream-and-filetable-in-sql-server-2012.html
在SQL 服务器中,BLOB 可以是标准的varbinary(max)
数据,将数据存储在表中,或者是FILESTREAM varbinary(max)
对象,将数据存储在文件系统中。数据的大小和用途决定了您应该使用数据库存储还是文件系统存储。
如果满足以下条件,您应该考虑使用 FILESTREAM:
- 正在存储的对象平均大于 1 MB。
- 快速读取访问很重要。
- 您正在开发将中间层用于应用程序逻辑的应用程序。
For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.
FILETABLE 的好处:
Windows API 存储在 SQL 服务器数据库中的文件数据的兼容性。 Windows API 兼容性包括以下内容:
- 非事务性流访问和对 FILESTREAM 数据的就地更新。
- 目录和文件的分层命名空间。
- 文件属性的存储,例如创建日期和修改日期。
- 支持 Windows 文件和目录管理 APIs.
与其他 SQL 服务器功能的兼容性,包括管理工具、服务以及对 FILESTREAM 和文件属性数据的关系查询功能。