SQL Server FILESTREAM 限制

标签 sql sql-server tsql sql-server-2008 filestream

我正在查看 SQL Server 中的 FILESTREAM 属性以在其中存储文件。我了解它将文件存储在硬盘驱动器上并将文件指针/路径信息存储在数据库中。此外,还保持流程中的事务一致性。

FILESTREAM 属性似乎还存在“FILESTREAM 数据只能存储在本地磁盘卷上”的限制。

如果我预计我的网络应用程序将存储 200,000 个图像,每个图像大小为 1-2mb,那么我将需要大约 200GB 的硬盘空间来存储图像。由于 FILESTREAM 根据限制要求所有数据只能存储在本地磁盘上,因此不可能在单个硬盘上存储数百万个文件,因为存储需求将非常大。

我对限制的理解正确还是我在这里遗漏了什么?

如果这个限制是正确的,我会将其作为普通 blob 存储在数据库中,并集群我的数据库以增加存储需求,这对于 FILESTREAM 来说似乎是不可能的。

请分享您的想法!

更新:
关于 FILESTREAM 的更多问题:-

  1. 万一发生数据恢复如何处理 数据容器损坏?
  2. 我们可以只备份数据库吗? 文件系统数据? [假设数据 位于 SAN 中,无需移动]
  3. 我想要备份或恢复 数据库并重新映射文​​件组 [映射到 SAN] 的路径信息。 这可能吗?

最佳答案

FILESTREAM 实际上并不需要本地存储,只是不需要 SMB 网络存储。 iSCSI 或光纤 channel SAN 可以很好地存储 FILESTREAM 数据。每个表还可以有多个文件流文件组,本质上是对数据进行分区。如果您严格以 SQL Server 2008 为目标,则没有理由不对大型二进制数据使用文件流。有一份 Microsoft 白皮书描述文件流分区 here .

关于SQL Server FILESTREAM 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419546/

相关文章:

sql - 两个几乎相同的查询返回不同的结果

sql-server - SQL Azure 上的 VarBinary(max) 更新速度非常慢

用于解析存储过程和提取元数据的 C# 脚本

sql - 对于一台机器上的结构化数据,NoSQL是否比RDBMS有任何真正的优势?

php - MySQL表不更新

java - 在java中避免SQL注入(inject)

c# - 从 SQL 服务器表的模式自动定义 C# 中的数据表?

asp.net - Windows Server的Web搜索引擎是开放源代码/免费的

c# - .NET TransactionScopeOption.Suppress 的 T-SQL 等价物

mysql - SQL插入如果缺少值