【问题标题】:Multi-Threaded Component Design Question多线程组件设计问题
【发布时间】:2010-12-06 15:13:38
【问题描述】:

我们有 10 个非规范化表,其中许多都包含大量数据(11,000,000)。客户端希望用户一次能够下载多达 100K 的记录。我想知道的是设计一个后台进程来处理这个问题。我正在考虑可能为每个表设置一个队列并让多个线程处理请求。我绝对不是设计多线程组件的专家。你们认为我在这里走对了吗?对实施有何建议?

谢谢!

【问题讨论】:

  • 当您说“一次下载多达 100K 的记录”时,是要导出(或类似的东西,需要所有数据)?或者在屏幕上查看(您可以在其中进行分页并给出所有数据都在那里的错觉)?
  • 队列会做什么?
  • 正确,导出到 excel(或 csv)。用户将有一个 Web 界面,因此我需要将请求放入某种类型的队列中。队列将简单地存储报告类型和搜索参数。
  • 是的,我们将在前端使用数据分页,但在 excel 中离线工作时需要整个集合。
  • @Marco - 只是为了澄清用例,用户在您的 asp.net 页面上发出请求 - 可能是一种方式 - 您将在服务器上处理请求,然后一旦处理,呈现用户带有指向服务器上具有 100K 记录的 xls / csv 文件的链接 (?),用户可以下载和查看?对吗?

标签: c# .net asp.net multithreading


【解决方案1】:

设计场景

1- 由于这是一个 Asp.Net 应用程序,有多少并发用户会下载数据?

2- 您是否考虑在您的应用程序中提供下载数据功能,您是否考虑过流程再循环?

3- 如果用户会话过期但下载仍在进行中怎么办?

4- 您可能正在转向流媒体服务器。

我认为,您应该先考虑这些场景,然后再决定实际需要哪种类型的应用程序。

在我看来

我认为,您应该考虑创建一个基于 Windows 的解决方案,该解决方案将被下载到客户端计算机并利用客户端资源(线程等)连接到服务器,并且您的服务器必须支持流式传输。

【讨论】:

  • 数以千计,这就是需要后台进程的原因。
【解决方案2】:

用户会进行自定义查询还是只是下载表的“块”?

如果是后者,那么为什么不提前为每个块生成 CSV?如果每个块有 100,000 条记录并且表总共只有 11,000,000 条记录,则您只需要 110 个块。

【讨论】:

  • 每个报告最多有 15 个搜索字段。
【解决方案3】:

我认为这是一种方法。

您可以调用另一个页面并将该过程放在下一页。

以下文章可能有用。

http://codebetter.com/blogs/peter.van.ooijen/archive/2006/06/20/146582.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多