FileStream:T-SQL vs Win32

DCN*_*YAM 3 sql-server filestream sql-server-2008

我们的一个团队正在构建一个数据库(和应用程序),它将使用SQL 2008的FileStream功能来存储文档.根据MS的文件流最佳实践,与使用T-SQL相比,Win32 API是访问FileStream数据的首选方式.

但是,使用Win32 API需要使用集成身份验证才能连接到数据库.这是团队关心的问题,因为他们不想让用户直接访问数据库.他们希望应用程序使用SQL用户名和密码进行连接.

使用Win32和T-SQL访问文件流数据的优缺点是什么?是否有任何因素会导致无法使用T-SQL?

Mik*_*keW 5

T-SQL和Win32 Filestream访问之间的主要区别在于数据传输到客户端的方式 - 使用T-SQL检索文件流数据意味着存储引擎必须在NTFS上打开文件,通过SQL引擎和TDS传回数据(将SQL数据传输的标准方式)返回给客户端.如果使用Win32,存储引擎仍然在打开文件操作期间的路径中,但是一旦完成,数据可以通过Win32流直接从文件传输到客户端,完全绕过SQL引擎.

随着blob大小的增加,打开文件和通过引擎传输的开销变为完成数据传输所需总时间的较小百分比.最近针对特定案例研究的基准测试,内联(varbinary max storage)的阈值为60KB,T-SQL传输的阈值为60KB-1.2MB,Win32传输的阈值为> 1.2MB.正如我所提到的,这是一个非常具体的案例,所以YMMV.

就安全性而言,我可以看到以这种方式使用SQL安全性的许多问题,但是如果没有更多的上下文,很难提供建议.通过仅通过T-SQL访问它,您实际上无法从Filestream中受益.