Bir*_*iri 4 c# sql-server-2005 distributed-system
有一个小系统,其中数据库表作为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
Run Code Online (Sandbox Code Playgroud)
在处理之后,它将表的处理列设置为其他内容,例如"完成"或其他任何内容.
关于这种方法,我有三个问题.
第一:这可以用这种形式吗?
第二:如果它有效,它是否有效?你有什么其他想法来创建这样的发行版吗?
第三:在MSSQL中,锁定是基于行的,但是在锁定了一定数量的行之后,锁定会扩展到整个表.因此,在第一个应用程序未释放事务之前,第二个应用程序无法访问它.选择有多大(顶部x)以便不锁定整个表,只创建行锁?
归档时间: |
|
查看次数: |
3042 次 |
最近记录: |