理论上大量的问题,不能在.NET中使用集合排序

时间:2010-02-10 23:34:53

标签: .net large-data-volumes

请原谅这篇文章的标题,但我真的不能想到一个更有创意的标题。

我正在调用第三方网络服务,其中作者正在订购最近的交易结果。总事务计数大于100 000.为了使事情更有趣,Web服务发送代表每个事务的复杂对象,因此如果我一次要求所有100 000,将发生超时。因此,需要对此Web服务的调用进行批处理,以便一次只返回1000条记录。这意味着对此Web服务进行100次单独调用。

到目前为止一切都很好,除了交易需要从最旧到最新处理,所以我需要一个地方暂时保留这些交易的ID,以便以后我可以按正确的顺序调用ID(最旧的)在我对它们进行分类之后。

我在此解决方案中缺少的是RDBMS,我正在考虑使用文本文件来存储值。

请原谅长篇介绍,如果你还在醒着,请考虑以下事项:

(1)

  1. 如果我只是将值存储在文本文件中,我最终会以错误的顺序在文本文件中输出超过100 000行,这意味着我必须实现从下到上读取文件的方法
  2. 我不确定,但是可能会附加到现有文本文件的开头而没有任何性能损失,这样一旦创建文件,我就可以使用内置的.net从顶部读取文件 - >下。
  3. 我可以连接一个文本odbc驱动程序,也许使用一些SQL order by子句,但我以前从未这样做过,我不想再为我的应用程序添加任何部署步骤。
  4. 也许使用文本文件不是可行的方法,也许有一个更好的解决方案,我不知道这个问题。
  5. 这是一个架构/后勤问题,任何帮助都将不胜感激,谢谢

3 个答案:

答案 0 :(得分:3)

如果您在典型的PC / Server类计算机上运行,​​则存储100,000个ID和相关时间戳的内存不会被视为大容量。考虑使用内存中的排序列表。

如果你真的想写一个文件,你可以使用File.ReadAllLines并向后遍历生成的字符串数组。

答案 1 :(得分:2)

如果它们只是ID,你肯定首先需要使用文件吗?

假设它们是32字节的ID ...其中100,000个仍然只是超过3MB。你是不是真的想要记忆?

我肯定会尝试使用内存解决方案 - 确保在最糟糕的情况下(例如,预期音量增加一倍)可以接受它,但请继续使用。

基本的道德并不是太害怕听起来很大的数字:在人类方面,100,000件物品可能很多,但除非每件物品有相当多的数据,否则它就是现代电脑的花生。

答案 2 :(得分:0)

您可以尝试将信息存储在DataSet / DataTable组合中,并使用附加到DataSet的DataView在您从中获取数据时更改排序顺序。

根据您从Web服务返回的XML的结构,您可以直接将其读取到DataSet中并让它将其解析为DataTables(如果可行,我会去这是为了简单因素)。

此方法涉及的代码最少 - 但您必须使用其中的100,000个项来评估DataSet的性能。

我应该注意,我建议您以这种方式存储整个事务(包括ID),然后您将获得需要处理的所有数据,并且可以按照您指定的任何排序顺序遍历它。

我得到的印象是,您最初只是存储ID,对它们进行排序 - 然后在排序顺序中为每个ID重新查询Web服务,但这意味着为同一数据点击服务两次。如果可能的话,我会避免这种情况。