0

我需要提供一项服务,不断检查数据库(SQL Server)以查找要处理的项目或消息。

问题是有时它需要一次处理或发送大量此类项目(从 30000 到 1000000),因为可能很快就会有新的负载到达以进行处理。

该过程不必同时将它们全部发送,每个项目都独立于其他项目,但它需要尽可能快地处理它们并且不挂断。

你能建议我一个架构、模型、模式、示例或类似的东西来在.Net中完成这个任务,包括从数据库中读取所有这些大量记录的部分,但最重要的部分是以高效和高效的方式处理项目健壮的方式。

如果需要,可以将建议的解决方案扩大到同时在多台机器上执行以进行一些负载平衡,这将是很好的(但不是必需的)。

谢谢

4

1 回答 1

1

我知道我会打赌,但是。

读取 30,000 到 1,000,000 条记录非常快。
所以我怀疑处理它们是瓶颈。

一种肮脏的方法是在事务中获取表锁,并一次读取 1000 或 10,000 个并将它们标记为 inProcess。
使用 DataReader 将它们读入列表,以便您可以尽快释放锁定。

处理列表。

如果您需要验证它们是否正在处理,则将它们标记为这样。
使用 transactionID,以便您可以使用单个语句更新它们。
每隔一段时间检查未清除的 inProcess 项目。

获得下一组。

不漂亮,不是最有效的,但很容易扩展。

考虑并行处理,以便在机器内扩展。

于 2013-06-14T23:15:17.057 回答