我正在查看SQL Server中的FILESTREAM属性来存储文件 . 据我所知,它将文件存储在硬盘上,并将文件指针/路径信息存储在DB中 . 此外,维护流程中的事务一致性 .
对于FILESTREAM属性,似乎还存在“FILESTREAM数据只能存储在本地磁盘卷上”的限制 .
如果我预计我的网络应用程序将存储200,000张每张1-2mb的图像,我需要大约200GB的硬盘空间来存储图像 . 由于FILESTREAM要求所有数据仅按照限制存储在本地磁盘上,因此无法在单个硬盘驱动器上存储数百万个文件,因为存储要求非常大 .
我对限制的理解是正确的还是我错过了什么?
如果这个限制是正确的,我会将其作为普通blob存储在db中,并将我的数据库集群存储以增加存储要求,而这似乎不可能使用FILESTREAM .
请分享你的想法!
UPDATED:
关于FILESTREAM的几个问题: -
-
如何在数据容器损坏的情况下处理数据恢复?
-
我们可以在没有文件系统数据的情况下备份数据库吗? [假设数据在SAN中,不需要移动]
-
我想备份或恢复数据库,只重新映射[映射到SAN]的文件组路径信息 . 这可能吗?
4 回答
FILESTREAM实际上不需要本地存储,只需要SMB网络存储 . iSCSI或光纤通道SAN可以正常存储FILESTREAM数据 . 每个表还可以有多个文件流文件组,实质上是对数据进行分区 . 如果您严格定位sql server 2008,则没有理由不将文件流用于大型二进制数据 . 有一篇Microsoft白皮书描述了文件流分区here .
On the local disk volume requirement
不要太过于字面意思 . 虽然确实要求MSSQL将与FILESTREAM数据相关联的文件组作为本地驱动器,但这种存储通常是通过NAS或其他存储技术提供的,这些技术会让Windows认为这些是本地NTFS磁盘(通过iSCSI等) . 对于企业应用程序尤其如此,您提到的空间要求水平 .
On using FILESTREAM at all...
仔细权衡利弊 . 你的问题提到相当大的(MB大小)图像(我假设图形图像,而不是各种逻辑图像),这意味着它们的原子性使用 . 文件服务器设置需要外部(到SQL服务器)管理和同步,但这似乎是一个相对较小的成本,以保持您的自由,而不是相对于SQL Server / Microsoft,而且你的能力为了扩展/带宽目的,更容易移动东西 .
Step By Step implementation of local filestream in sql server 2008
在sql server中配置文件流:
首先转到SQL Server配置管理 .
右键单击QL服务器(SQLEXPRESS)并选择属性 .
选择文件流选项卡并启用文件流 .
在SQL Server 2008中执行以下脚本:
为文件流创建数据库:
创建表:
在表中添加数据的过程:
让我们使用C#从前端添加表中的一些数据:
使用SQL群集不会为您提供任何额外的存储可用性,因为群集需要SAN存储 . 您也可以简单地创建一个LUN或LUN,以便在非聚簇实例上用作FILESTREAM存储 .