【发布时间】:2010-12-30 23:39:46
【问题描述】:
我有一个系统,它有 3 个通用部分来帮助我进行描述。
1) DATABASE- 存储所有表,同一个数据库将存储其他服务的数据,包括 Web 应用程序、silverlight 等...(需要灵活,如果在远程服务器,可以通过 web 服务公开,如果是本地的,可以在本地或通过 TCP 连接到 windows 服务)
2) BLACK BOX - 一次处理一个项目,方法是从数据库中注入所需项目的列表,如管道,您可以在其中输入一组条件、单个项目的值项,并返回该单个处理项的结果。
3) WINDOWS SERVICE- 从数据库中检索数据,注入黑盒,以预定义的时间间隔将结果从黑盒保存到数据库。该服务可能与数据库位于不同的服务器上。如果发生错误,将记录错误并继续。
平均而言,windows 服务将需要处理大约 5000 个项目,黑盒大约需要 1.5 秒来处理 5000 个项目。
我的问题是:
a) Windows 服务应该从数据库中获取要处理的项目的批处理列表,还是应该获取 id 列表,并在传递到黑盒之前循环从数据库中获取每个单独的项目?请注意,其他应用程序也正在使用相同的数据库。试探性地,我猜数据库应该是某种网络服务调用。
b) 是否应在处理后立即保存单个项目?还是应该等待批处理完成后再保存?当系统在处理过程中突然出现故障时,在处理后保存每个单独的项目是好的,至少保存处理的项目,但由于它对 Web 服务的 5000 次调用而以性能为代价?
关于最佳解决方案的任何建议?
干杯
【问题讨论】:
-
您可以考虑使用 MSMQ 队列,一次处理一项,然后在处理完成后将其删除吗?
-
我对MSMQ不是很熟悉,能否简单介绍一下它是如何适用的?
-
msmq 将保证物品的交付。不确定它在这里是否完全适用,但它可能很有用,但它会使设计复杂化
标签: .net web-services architecture windows-services soa