我陷入了一个巨大的问题,我需要处理大量的数据。
我得到了一个有5个数据表的数据集。其中一个表大约有3000列和50,000条记录。
我需要在SQL数据库中将此数据集完全保存为XML,并需要稍后检索它。
我不能做任何设计更改来跳过它。当我执行dataset.GetXml()时,它返回一个抛出OutOfMemoryException的超长字符串。我知道字符串数据类型对携带数据有一定的限制。
但是在sql表中,xml列最多可以容纳2 Gb。那么,如何在数据库和应用程序之间来回移动此数据集呢?
谢谢
NLV
发布于 2010-04-20 00:46:28
你的设计听起来有缺陷。为什么需要将整个表检索到内存中?取而代之的是分页操作-以较小的批次对表进行操作-比方说,一次操作1000条记录。
您甚至可能不需要这样做。通常,数据库应用程序只对正在更改的数据进行操作。如果您的应用程序需要修改10行,则只检索这10行。您不仅可以节省内存,还可以节省检索和post数据所需的全部时间。
表中有3000列?那味道(真的)很难闻。查看normalizing您的数据库。
我知道解决眼前的问题并继续前进会更容易。然而,如果你提前解决了(坦率地说,相当严重的)设计问题,那么从长远来看,你会有很多很少的问题。
发布于 2010-04-20 00:53:25
您将需要切换到所有涉及流的API,使用SqlDataReader (一次一行),而不是DataSet。此外,在可能的情况下,将数据流式传输到文件系统上的临时文件,而不是将其保存在内存中。
如果一行太多,那么您可能需要使用流API来与相关大列中的blob通信。
发布于 2010-04-20 00:54:42
3k列x 50k行=1.5亿个元素。每个元素有多少个字符?
我不得不问..。您为什么要使用数据库来存储此内容?您也可以将其存储在文件服务器上。
50k行很小,但3k列是极端的,而且XML中的所有行都非常臃肿
https://stackoverflow.com/questions/2669184
复制相似问题