多线程多进程服务的数据队列处理怎么样解决重复读取的问题【很难希望能推荐】

txgaozhao 2011-05-16 05:51:43
我现在要开发一个多线程的服务来读取数据库表中的队列数据出来进行处理。处理过程中要调用webservice之类的接口,所以处理过程中可能会出错,导致有些数据会处理失败。
另外我这个服务要部署到多台机器同时运行,读取同一个数据库的数据来处理。
现在的疑问就是,怎么保证让每台服务器的服务的每个线程从数据库读取的数据都是不重复的,即数据不被重复读取

表中的数据量非常大,上千万,每天几百万的数量级增加,数据有状态标识,处理过的数据会改变状态

...全文
502 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
txgaozhao 2011-06-28
  • 打赏
  • 举报
回复
BEGIN TRAN
SELECT TOP 1 @Id=Id FROM tb WITH(UPDLOCK, READPAST)
WHERE [Status]=0 --待处理
OR [Status] = 2 --处理失败
UPDATE tb SET [Status]=1--处理中
WHERE Id=@Id AND ([Status]=0 OR [Status]=2)
COMMIT
失去乐山贼 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangxinggood 的回复:]

我之前做了一个多客户端同步的测试。自己写了个类似PNunit的同步服务(WCF REST)的。
可以同步不同机器的程序。

你可以参考下:
http://blog.csdn.net/fangxinggood/archive/2011/03/24/6272886.aspx
[/Quote]
0 0....表示没接触过,高....
机器人 2011-05-16
  • 打赏
  • 举报
回复
我之前做了一个多客户端同步的测试。自己写了个类似PNunit的同步服务(WCF REST)的。
可以同步不同机器的程序。

你可以参考下:
http://blog.csdn.net/fangxinggood/archive/2011/03/24/6272886.aspx
txgaozhao 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxr0323 的回复:]

怎么保证让每台服务器的服务的每个线程从数据库读取的数据都是不重复的,

分段处理 加标志位。lock
[/Quote]

lock 只是对多线程有用而已吧。但是对分布在不同服务器的同时运行的服务就不行了
子夜__ 2011-05-16
  • 打赏
  • 举报
回复
怎么保证让每台服务器的服务的每个线程从数据库读取的数据都是不重复的,

分段处理 加标志位。lock
机器人 2011-05-16
  • 打赏
  • 举报
回复
1)加个"处理中"的标志位,
2)每次查询"未处理"的任务。并在查询任务时按数据锁表(行锁)。
3)查询到任务状态变为"处理中"。
threenewbee 2011-05-16
  • 打赏
  • 举报
回复
使用MSMQ,微软事务队列。

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧