问题描述
|
我想知道以下几点:
1)对于我的应用程序,我需要处理IO流。特别是,我需要获取一个文件并将其拆分为几个二进制片段,以在网络上发送。我可以使用.NET API做到这一点吗?
2)我还需要将此片段保存在某个地方。我真的很想将片段保存在数据库(sql Server)中。 sql Server是否提供用于保存二进制数据的特殊表字段类型?
谢谢
解决方法
对于SQL Server(2005版或更高版本)中的二进制数据,请使用
VARBINARY
数据类型-有关详细信息,请参阅有关二进制和varbinary的MSDN文档。
使用“ 1”数据类型,您最多可以在数据库表的列中存储2 GB的二进制数据。
正如Microsoft Research的一篇非常好的论文《 To Blob或Not To Blob》所示,您不应过度使用SQL Server中的二进制存储。
经过大量的性能测试和分析,他们的结论是:
如果您的图片或文档的大小通常小于256K,则将它们存储在数据库VARBINARY列中会更有效
如果您的图片或文档的大小通常超过1 MB,则将它们存储在文件系统中的效率更高(并且使用SQL Server 2008的FILESTREAM属性,它们仍受事务控制并且属于数据库的一部分)
在这两者之间,根据您的使用情况有些不同
如果您决定将图片放入SQL Server表中,我强烈建议使用一个单独的表来存储这些图片-不要将employee foto存储在employee表中-请将它们保存在单独的表中。这样,假设您并不一定总是选择员工照片作为查询的一部分,那么Employee表就可以保持精简,平均和高效。
对于文件组,请查看“文件和文件组体系结构”以获取简介。基本上,您可以从一开始就为大型数据结构使用单独的文件组创建数据库,或者稍后再添加其他文件组。让我们将其称为“ LARGE_DATA \”。
现在,只要您有一个新表要创建,该表需要存储VARCHAR(MAX)或VARBINARY(MAX)列,就可以为大数据指定此文件组:
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic \"Data\" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
查看有关文件组的MSDN简介,并试用它!
,
1)对于我的应用程序,我需要处理IO流。特别是,我需要获取一个文件并将其拆分为几个二进制片段,以在网络上发送。我可以使用.NET API做到这一点吗?
是。
2)我还需要将此片段保存在某个地方。我真的很想将片段保存在数据库(SQL Server)中。 SQL Server是否提供用于保存二进制数据的特殊表字段类型?
是。