SQL Server 2012 FileTable-是存储在数据库中的文件吗?

Nic*_*ros 5 sql-server-2012 filetable

如果我在SQL Server 2012中创建一个FileTable,然后将一个4G文件放到NT文件系统(即文件流中),那么将整个4G文件读入表的文件流列吗?

SQL实际上是在制作我的4G文件的COPY吗?或者文件流列是否代表我的4G文件的指针,它开始在查询中读取?

我只想弄清楚我是否将100G数据添加到我的文件系统中,是否会为我的数据库添加100G的数据大小.

有人可以帮助解释这是如何工作的吗 甚至更好地指向一些比MS/MSDN"如何做"更详细的文档?

编辑:有趣的是 - 如果我在FT目录中删除1G文件,然后选择file_stream列包含该文件的所有数据(我认为).但是,如果我sp_spaceused FileTableTb在放入该文件之前和之后进行操作,则表格大小不会改变.也许这就是选择打开文件流并将其读入的证据,但除此之外数据不存储在表中?

ste*_*ary 4

您是对的,数据不存储在数据库中,而是存储在文件系统本身中,还需要注意的是,当文件放置在文件系统上时,文件不会“读入”数据库,这意味着它被复制到在另一个位置,它实际上存储为 NTFS 文件,FileStream API 显示文件表内的文件元数据。

文件表基于 SQL 2008 中引入的 FileStream 技术构建,但允许您通过 Windows 资源管理器直接修改数据。

创建数据库时,指定其中一个文件组是文件流文件组,这与普通文件组不同,实际上是一系列称为数据容器的 NTFS 文件夹,这是文件实际存储的位置,您可以'不要直接修改这个文件夹,但你可以查看内容(虽然这里没有太多人类可读的东西,但如果你仔细查看 GUID 文件夹和奇怪命名的文件,你可以在这里找到你的实际文件:)) 。

用于将文件复制到表中的文件共享实际上是这些数据容器内数据的表示,这些数据容器通过筛选器驱动程序呈现给 Windows 资源管理器,该筛选器驱动程序使用流 API 对数据容器进行更改并添加行到文件表等