文件流VS本地SQL Server中保存?(file stream vs local save in

2019-07-21 09:39发布

我的应用程序,他们的注册用户后播放视频文件(文件是大于100 MB)。

  1. 它是更好地做我把它们存储在硬盘上,并保持文件路径数据库? 还是我在数据库文件流类型的商店?

  2. 当数据被存储在数据库中,反对操纵更安全VS存储在硬盘?

  3. 如何防止操纵提供数据安全?

谢谢 。

Answer 1:

有微软研究院一个很好的纸叫成团块或不BLOB 。

他们有大量的性能测试和分析后得出的结论是这样的:

  • 如果您的图片或文档通常低于256K大小,将它们存储在数据库中VARBINARY列更有效

  • 如果您的图片或文档通常超过1 MB的大小,将它们存储在文件系统更高效(并与SQL Server 2008的FILESTREAM属性,他们仍然事务控制,数据库的一部分下)

  • 在这两个之间,这取决于你的使用有点难以取舍的

如果你决定把你的照片到SQL Server表,我会强烈建议使用一个单独的表,用于存储那些图片 - 不要将员工照片存储在雇员表 - 让他们在一个单独的表。 这样一来, Employee表可以保持精简,平均和非常有效的,假设你并不总是需要选择员工照片,也为您的查询的一部分。

对于文件组,检查了文件和文件组体系结构的一个前奏。 基本上,你要么从一开始就创建了大型数据结构的独立文件组数据库,或更高版本添加一个额外的文件组。 让我们把它LARGE_DATA

现在,只要你有一个新的表来创建一个需要存储VARCHAR(MAX)VARBINARY(MAX)列,您可以指定大型数据文件组:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

检查出的文件组的MSDN介绍,和玩它!



Answer 2:

1 - 取决于你如何定义“更好”。 在一般情况下,我宁愿二进制资产存储在数据库中,以便在备份旁边的相关数据,但缓存到文件系统上。 流出来的SQL Server二进制数据的页面请求是真正的性能猪,它并没有真正规模。

  1. 如果攻击者可以获取到你的硬盘,你的整个系统被攻破 - 在数据库中存储的东西不会有什么显著额外的安全性。

3 - 这是在自己的权利的整个问题。 太宽了堆栈溢出...



文章来源: file stream vs local save in sql server?