我们正在开发一个曾经作为单实例应用程序工作的C#应用程序。现在我们需要将其更改为多用户应用程序,这意味着GUI前端将在访问单个MS SQL Server 2008 R2数据存储时在多个工作站上运行。
这个应用程序管理的部分工作是基于队列的,这意味着工作项池(工作项列表在一个SQL表中),每个用户可以从中获取""下一个可用的工作项目。我想要完成的是以下内容:
我知道这是一个相当普遍的问题(更确切地说是一项研究),所以我并不期待详细的解决方案,而是有用的链接,最佳实践和/或一些文献来阅读这个主题。我真的很感激任何帮助,因为我完全失去了从哪里开始。
答案 0 :(得分:3)
我已经看到使用事务资源锁定表或列完成此操作。例如,您将记录分配给某人(通过设置用户ID或其他某种机制),并同时设置时间戳记录,以确定该资源何时被锁定。访问数据时,无论是查询数据还是尝试更新数据,首先要检查此锁定表/列以确保它可用。如果没有,则不进行更改。
这也支持超时。如果时间戳太旧,则释放锁定。如果时间戳太旧,您可以自动假定释放,或者您可以编写将检查过期锁定并解锁它们的计划服务。我更喜欢第二种方式,因为检查锁是否存在成本较低(行的布尔逻辑存在或字段值存在[即不为空])。但我已经看到它做到了两个方面。