首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将大型二进制数据流到Server

如何将大型二进制数据流到Server
EN

Stack Overflow用户
提问于 2010-12-30 18:59:42
回答 2查看 1.8K关注 0票数 3

我有一个用ASP.NET MVC编写的带有Server后端的web服务。客户端可以以调用web服务的方式发送大数据,每个调用的大小为10兆字节。

在服务器端,我希望读取HTTP请求流,并将其写入SQL表中的VARBINARY字段。如何做到这一点,而不必将整个流读入内存中的数组中。

我之所以关心内存,是因为这个系统需要扩展到1000个并发客户端(至少)。

我目前正在将Linq用于SQL,它看起来不支持数据流,因为Linq二进制类型只能使用字节数组进行初始化。

还有其他方法可以使用Linq到SQL来完成这个任务吗?

如果使用Linq是不可能的,我如何使用ADO.NET或其他方法来做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2010-12-30 19:04:42

您可以将数据流到磁盘,然后使用开环执行数据的大容量导入。例如:

代码语言:javascript
复制
INSERT INTO YOURTABLE(binaryColumnName) 
SELECT * FROM 
OPENROWSET(BULK N'C:\data.bin', SINGLE_BLOB)

您可以使用临时文件API来避免管理磁盘上数据的生存期.一旦不再使用,它将被删除。

票数 2
EN

Stack Overflow用户

发布于 2011-01-04 18:54:25

我相信您可以使用UPDATE语句的.WRITE子句来执行块数据插入。如果使用LINQ,将从数据上下文对象创建两个命令。第一个要创建(插入)将包含数据的行。第二个是使用.WRITE子句的UPDATE语句。参数化数据和偏移值。循环执行,执行UPDATE语句的次数与“块”相同。

插入XrayImages (HeaderId,ImageBytes)值(@headerId,@imageValue)

更新XrayImages SET ImageBytes.WRITE(@imageChunk,NULL,@chunkLength,其中ImageId = @imageId;

有关更多信息,请参阅以下MSDN文章:http://msdn.microsoft.com/en-us/library/bb399384.aspx

我非常肯定,在调用Controller代码时,整个请求已经收到(并且在内存中)。我的基础是Request.Files集合已经知道有多少文件,以及它们的长度。对于多部分表单,我知道如何确定的唯一方法是读取整个请求。无论如何,我不知道如何在MVC中更改这一点,所以您可能需要编写一个处理程序来完成实际的文件上传本身。

这里有很多变量需要考虑。根据同时上传数据的1000个并发客户端的数量,在db服务器和web服务器之间需要多个GB。您还需要数据库服务器上的I/O功能,这将超出我的经验。

我会认真考虑将文件保存到基于位置的文件系统,并将元信息保存在数据库中,特别是如果您可以将文件保存在web服务器上。否则,我认为使用SqlServer的FileStream功能将比单纯的表解决方案更具有可伸缩性。

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4565394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档