2016-04-20 198 views
0

我正在构建一个复杂的应用程序。来自该应用程序的部分是在其他服务器上运行并将数据发送到Web服务(ASP MVC) - > JSON的代理。 在控制器中,我将数据转换为XML并调用存储过程将其存储在表中。 SQL代理作业提取数据并执行必要的创建,并根据某些表更新&删除操作。插入大BLOB需要很长时间

迄今为止这么好...

这里的问题是速度。生成的XML具有多个MB的大小。目前其〜16MB。将XML字符串插入新的DB行需要5-6秒。

我的尝试:

  • 改变了DB列XML。同样的结果!
  • 我认为问题是实体框架。我用存储过程替换了该代码。同样的结果!
  • 删除SP - >空存储过程中的所有语句。同样的结果!
  • 将参数类型从字符串/ nvarchar(max)更改为byte []/varbinary(max)。这带来了一些改进。它现在快了50%。但仍然缓慢。

似乎将这个大字符串或字节数组传递给SQL服务器需要很长时间!

我该怎么做才能让这个更快?

我想到了以下内容: - 将数据放在文件系统上并指示SQL服务器使用SELECT FROM OPENROWSET处理它。

有没有其他的选择?

+0

该表的定义是什么?您是以文本形式存储还是使用SQL Server的XML支持来解析它? – Richard

+0

您可以将数据存储在磁盘上并在数据库中包含文件指针/路径。在大多数情况下,这是一个更好的方法。它使您的数据库更小,碎片更少,性能更好,更易于持久更改数据。我确信有一些关于从数据库中保留(更大)blob的优点的文章。 – Igor

+0

这可能是你感兴趣的:[程序员Stackexchange - 在数据库中存储大文件是否是一种不好的做法?](http://programmers.stackexchange.com/a/150787),特别是关于'FILESTREAM “如果你想进步。 – Igor

回答

0

尝试异步运行您的SQL操作。我希望你不需要立即的结果。

Threading.ThreadPool.QueueUserWorkItem(new Threading.WaitCallback(InsertBLOB), MyBLOB); 

此方法的缺点是您不会在运行时收到错误。