在多台机器上的进程之间的锁机制
问题描述:
我有一个NHibernate的C#应用程序,必须对SQL Server数据库执行一些操作。在多台机器上的进程之间的锁机制
我们的目标是多次在同一台机器上运行这个程序,以及在其他机器。
其实应用程序中插入一行在SQL表,并检查第一行用最小的日期是用正确的PID和机器名的行,以便应用程序设置锁和做的工作。
我们有这样的逻辑问题,因为如果保留该锁的应用程序是崩溃的应用程序也必须删除其他应用的锁。
有关更改锁体系结构的任何提示?
的问题是,应用程序可以运行在多台机器。
答
如何管理数据库中的锁定?您可以拥有一个表/存储过程,其中每个正在运行的实例注册到,获取唯一的ID,并使用存储过程免费锁定&。 (与防止多台机器上的单个用户进行多次登录相同的技术)。
答
要么
- 有一个(服务器)过程管理锁 - 注册的所有客户,并要求锁从该服务器。
- Pessimistic offline locking
我实现了两者兼得。
离线锁可以与数据库的工作,但如果有过多的进程上的锁经常要等待(尽管一个体面的数据库服务器缓存的信息),可以引入抖动的可能性。此外,请确保您与该表做任何事情的时候使用ReadCommited事务隔离级别,死锁
+0
我会试试看.. – 2010-02-04 14:00:59
我宁愿不使用StoredProcedures因为在我的NHibernate的配置我没有任何准备。 – 2010-02-04 14:00:14
我的意思是在标准数据范围之外实现它,作为一个单独的模块。 – Amirshk 2010-02-04 15:05:16