SQL 2008:数据库中的文件流与二进制文件

时间:2009-11-10 12:13:54

标签: sql-server sql-server-2008 blob filestream varbinary

昨天我问了一个关于如何保存文件的问题。 经过一些研究后,我决定将文件存储在数据库中。

我已经检查了使用文件流存储文件和将文件存储在数据库本身之间的区别。

每个人都有它的优点和缺点。为了帮助我进行研究,这个网站帮助了我很多: http://www.codeproject.com/KB/database/SqlFileStream.aspx

所以基本上它说如果文件大于1mb,使用filestream保存文件会更好。

但我发现了文件流的另一个问题。如果删除数据库中的记录,文件仍然存在于文件系统中。

因此我需要你们的意见。 用什么?文件流或使用VARBINARY?

保存数据库中的文件

Grtz, 微米。

2 个答案:

答案 0 :(得分:7)

从数据库中删除数据后,很快就会删除文件系统上的数据,尽管这是在一个单独的系统后台线程中完成的,所以它可能会保留在文件系统上,直到垃圾收集器基本上再次运行。但是,通过任何文件流API(即tsql或流)访问的所有结果都将保证不会访问已删除的任何内容,无论文件系统数据是否仍驻留在磁盘上(文件流确保ACID)。

答案 1 :(得分:4)

使用文件流。

数据库用于存储关系数据,文件系统用于存储文件。

我经常听到微软员工在SQL Server 2000/2005中存储大块blob(无法记住)并不是一个好主意。

还要考虑备份:数据库文件是一个文件(编辑:如果你这样配置)。如果您使用的是文件流,则可以备份单个文件。