老一辈的DBA们在处理非结构化数据时可能会条件反射的有这么一种思路:将二进制文档、图片等存放于文件系统上,在数据库中记录其元数据,这种经典方案一直持续到Oracle 11g的推出,在SecureFiles的理念得以普及后,一些企业级应用的非结构化数据存储方案有了更多的选择。今天,SQL Server Denali也引入了这个功能,命名为FileTable。
FileTable基于SQL Server 2008引入的FileStream功能进行构建,在概念和功能上都和SecureFiles几乎一致,充分利用了DBMS的优势来管理非结构化数据,同时也打通了文件系统的壁垒,直接通过Windows资源管理器来访问FileTable文件夹。这种特性使非结构化数据的全文索引、SQL操纵文件、基于DBMS的安全机制和快速访问机制等得以轻松的实现。
在SQL Server中启用FileTable的方式非常简单,只需要启用数据库级的非事务型访问(和FILESTREAM的配置是相对独立的),然后就可以通过SQL Server Management Studio或者简单的TSQL来创建FileTable了:
CREATE TABLE DocumentStore AS FileTable
WITH (
FileTable_Directory = ’DocumentTable’,
FileTable_Collate_Filename = database_default
);
GO
在denali(至少到CTP3为止)中,相比其他功能而言,FileTable目前还不支持以下功能:
- 不支持分区
- 不支持分发(Replication)
- Windows中无法进行回滚或恢复等操作(TSQL可以)
- 自服务数据库(Contained Databases)的支持尚不完善
- 在备份恢复方面,因为启用非事务型访问,所以无法实现常规意义的基于事务日志的PIT(Point-in-Time)恢复。
- 对于Windows文件操作,无法进行审计(Audit)
继Oracle和SQL Server之后,估计还会有更多的DBMS会陆续增加类似特性。

