有一个小型系统,其中一个数据库表作为MSSQL 2005上的队列。多个应用程序正在写入此表,并且一个应用程序正在以FIFO方式读取和处理。并行处理数据库队列
我必须让它更先进一点才能创建一个分布式系统,其中可以运行多个处理应用程序。结果应该是2-10处理应用程序应该能够运行,并且他们不应该在工作中互相干扰。
我的想法是扩展队列表,显示一个进程已经在处理它。处理应用程序将首先用它的idetifyer更新表,然后询问更新的记录。
因此,像这样:
start transaction
update top(10) queue set processing = 'myid' where processing is null
select * from processing where processing = 'myid'
end transaction
处理后,将表格别的东西的处理列,例如“完成”,或什么的。
我对这种方法有三个问题。
第一:可以以这种形式工作吗?
第二:如果它工作,它有效吗?你有任何其他想法来创造这样的分布?
第三:在MSSQL中,锁定是基于行的,但在锁定了一定数量的行之后,锁被扩展到整个表。所以第二个应用程序不能访问它,直到第一个应用程序不释放事务。为了不锁定整个表格,只能创建行锁,可以选择多大(顶部x)?
这是非常好的,正是我所需要的。谢谢。 – Biri 2008-10-30 09:12:03
不错。我说我会感兴趣;-) – philsquared 2008-10-30 09:35:29