0

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

我正在调用第 3 方 Web 服务,作者在其中订购最近的交易结果。总事务数大于 100 000。为了使事情更有趣,Web 服务会发送代表每个事务的复杂对象,因此如果我一次请求全部 100 000,则会发生超时。因此,需要批量调用此 Web 服务以一次仅返回 1000 条记录。这意味着 100 次单独调用此 Web 服务。

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

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

请原谅冗长的介绍,如果您还醒着,请注意以下几点:

(1)

  1. 如果我只是将值存储在一个文本文件中,我最终会在文本文件中以错误的顺序得到超过 100 000 行,这意味着我必须实现一种从下到上读取文件的方法
  2. 我不确定,但可能会追加到现有文本文件的开头而不会造成任何性能损失,这样一旦创建文件,我就可以使用内置的 .net 从上到下读取文件。
  3. 我可以连接一个文本 odbc 驱动程序,并且可能使用一些 SQL order by 子句,但我以前从未这样做过,我不想在我的应用程序中添加任何更多的部署步骤。
  4. 也许使用文本文件不是要走的路,也许对于我不知道的这个问题有更好的解决方案。

这是一个架构/物流问题,任何帮助将不胜感激,谢谢

4

3 回答 3

3

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

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

于 2010-02-10T23:39:54.710 回答
2

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

假设它们是 32 字节的 ID……其中 100,000 个仍然只有 3MB 多一点。你真的那么渴望记忆吗?

我肯定会尝试从内存解决方案开始 - 确保在最坏的情况下它会好起来(例如,你的预期音量加倍),然后继续努力。

基本的道德是不要太害怕听起来很大的数字:100,000 个项目对人类而言可能很多,但除非每个项目有相当多的数据,否则对于现代计算机来说这只是花生。

于 2010-02-10T23:39:02.183 回答
0

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

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

此方法将涉及最少的代码 - 但您必须评估包含 100,000 个项目的 DataSet 的性能。

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

我的印象是,您最初只是存储 ID,对它们进行排序 - 然后按照排序顺序重新查询 Web 服务以获取每个 id,但这意味着两次访问服务以获得相同的数据。如果可能的话,我会避免这种情况。

于 2010-02-10T23:51:58.897 回答