我需要创建一个不断检查数据库(SQL Server)的服务,以查找要处理的项目或消息。
问题在于,有时它需要尽快处理或发送大量此类项目(从30000到1000000),因为很可能很快就会有新的负载到达。
该过程不必在屏幕时间全部发送,每个项目都独立于其他项目,但它需要尽可能快地处理它们而不会挂断。
你可以建议我在.Net中建立一个架构,模型,模式,样本或类似的东西,包括从数据库中读取所有这些大量记录的部分,但最重要的部分是处理中的项目一种有效而强大的方式。
建议的解决方案可以扩展到同时在多台计算机上执行,以便在需要时进行负载平衡,这样会很好(但不是必要的)。
由于
答案 0 :(得分:1)
我知道我打算打赌这个但是。
阅读30,000到1,000,000条记录非常快 所以我怀疑加工它们是瓶颈。
一种肮脏的方法是在事务中获取表锁并一次读出1000或10,000,并将它们标记为inProcess。
使用DataReader将它们读入List,这样您就可以尽快释放锁。
处理清单。
如果您需要验证它们是否为过程,请将其标记为 使用transactionID,您可以使用单个语句更新它们 每隔一段时间检查一下不清楚的inProcess项目。
获取下一组。
不漂亮,不是最有效的,但很容易扩展。
考虑处理的并行,以便在机器中进行缩放。