FileTables (SQL Server)

适用于:SQL Server

FileTable 功能为 SQL Server 中存储的文件数据提供对 Windows 文件命名空间的支持以及与 Windows 应用程序的兼容性支持。 借助 FileTable,应用程序可以集成其存储和数据管理组件,可对非结构化数据和元数据提供集成的 SQL Server 服务(包括全文搜索和语义搜索)。

换言之,可以在 SQL Server 中将文件和文档存储在名为 FileTable 的特殊表中,但是从 Windows 应用程序访问它们,其访问方式与存储在文件系统中的内容相同,无需对客户端应用程序进行任何更改。

FileTable 功能基于 SQL Server FILESTREAM 技术。 要了解有关 FILESTREAM 的详细信息,请参阅 FILESTREAM (SQL Server)

FileTable 功能的优点

FileTable 功能的目标包括:

  • SQL Server 数据库中所存储文件数据的 Windows API 兼容性。 Windows API 兼容性包括以下方面:

    • 对 FILESTREAM 数据的非事务性流式访问和就地更新。

    • 目录和文件的分层命名空间。

    • 文件属性的存储,如创建日期和修改日期。

    • 对 Windows 文件和目录管理 API 的支持。

  • 与其他 SQL Server 功能的兼容性包括有关 FILESTREAM 和文件属性数据的管理工具、服务和关系查询功能。

因此,FileTable 可消除使用 SQL Server 来存储和管理非结构化数据的一个重要障碍,此类数据目前作为文件存储在文件服务器上。 企业可以将这些数据从文件服务器移到 FileTable,从而利用 SQL Server 提供的集成管理和服务。 同时,它们可以保持现有 Windows 应用程序的 Windows 应用程序兼容性,将这些数据视为文件系统中的文件。

什么是 FileTable?

对于需要在数据库中存储文件和目录的应用程序,借助 Windows API 兼容性和非事务性访问,SQL Server 提供一种特殊的“文件表”,也称为 FileTable。 FileTable 是一种专用的用户表,包含存储 FILESTREAM 数据的预定义架构以及文件和目录层次结构信息、文件属性。

FileTable 提供以下功能:

  • FileTable 表示目录和文件的一种层次结构。 它为目录和其中所含的文件存储与该层次结构中所有节点有关的数据。 该层次结构以您创建 FileTable 时指定的根目录为起点。

  • FileTable 中的每行表示一个文件或目录。

  • 每行包含以下项: 有关 FileTable 的架构的详细信息,请参阅 FileTable Schema

    • 流数据的 file_stream 列和 stream_id (GUID) 标识符。 (file_stream 列对于目录为 NULL。)

    • 用于表示和维护当前项(文件或目录)以及目录层次结构的 path_locator 列和 parent_path_locator 列。

    • 10 个文件属性,如可用于文件 I/O API 的创建日期和修改日期。

    • 支持针对文件和文档的全文搜索和语义搜索的类型列。

  • FileTable 强制执行某些系统定义的约束和触发器以维护文件命名空间语义。

  • 配置数据库的非事务性访问权限时,在为 SQL Server 实例配置的 FILESTREAM 共享区下公开在 FileTable 中表示的文件和目录层次结构。 这为 Windows 应用程序提供了文件系统访问方法。

FileTable 的一些其他特性

  • 存储在 FileTable 中的文件和目录数据通过用于非事务性文件访问的 Windows 共享区(针对基于 Windows API 的应用程序)公开。 对于 Windows 应用程序,这看起来像一个包含文件和目录的普通共享区。 应用程序可使用一组广泛的 Windows API,用于对此共享区下的文件和目录进行管理。

  • 通过该共享区公开的目录层次结构是一个在 FileTable 中维护的纯逻辑目录结构。

  • 通过该 Windows 共享区对创建或更改文件/目录的调用被 SQL Server 组件拦截并在 FileTable 中的相应关系数据中得到反映。

  • Windows API 操作本质上是非事务性的,并不与用户事务关联。 但是,完全支持对存储在 FileTable 中的 FILESTREAM 数据的事务性访问,就像对待常规表中的任何 FILESTREAM 列一样。 如果需要经常从多个连接修改文件并确保正确的文件保护,请通过 OpenSqlFilestream() 使用事务性 FILESTREAM 访问,而不是在 Windows API 级别使用独占文件锁。

  • 还可以通过常规 Transact-SQL 访问来查询和更新 FileTable。 此外还与 SQL Server 管理工具和备份等功能集成。

  • 无法通过数据库邮件发送电子邮件请求以及附加位于 FILESTREAM 目录中的文件(因此无法附加 FileTable)。 文件系统筛选器驱动程序 RsFx0420 会检查进出 FILESTREAM 文件夹的传入 I/O 请求。 如果请求不是同时出自 SQLServer 可执行文件和 FILESTREAM 代码中,则会将其显式禁止。

使用 FileTable 的其他注意事项

管理注意事项

关于 FILESTREAM 和 FileTable

独立于 FILESTREAM 配置 FileTable。 因此,您可以继续使用 FILESTREAM 功能,而不启用非事务性访问或创建 FileTable。

除了通过 FileTable,没有对 FILESTREAM 数据的其他非事务性访问。 因此,在启用非事务性访问时并不会影响现有的 FILESTREAM 列和应用程序的行为。

关于 FileTable 和非事务性访问

可以在数据库级别启用或禁用非事务性访问。

您可以通过将非事务性访问关闭或者启用只读或完全读/写访问,在数据库级别配置或优化非事务性访问。

FileTable 不支持内存映射文件

FileTable 不支持内存映射文件。 “记事本”和“画图”是两个常见的使用内存映射文件的示例应用程序。 不能在 SQL Server 所在计算机上使用这些应用程序来打开存储在 FileTable 中的文件。 但可以从远程计算机使用这些应用程序来打开存储在 FileTable 中的文件,因为在这些情况下不使用内存映射功能。