[英]locking database
我有N个进程每t分钟(N> t)向数据库A中的表A插入和更新行(多行),例如从12:00 AM开始(所有N个进程)。 我将最新的更新时间戳保存在单独的表B中,以检查数据的最新更新时间。
我正在考虑获取一个读取锁来检查时间戳,并查看数据是否最新,如果没有尝试获取表上的锁,请更新数据库并释放锁。
可以使用linq-to-sql完成吗? 进程是否有可能获取锁定,并且由于某种原因无法释放该锁定? 在那种情况下,是否存在超时值,在此之后会自动释放锁定?
任何指针都会有所帮助。 谢谢!
获取读取锁以检查时间戳,并查看数据是否最新,如果没有尝试获取表上的锁,请更新数据库并释放锁。
当两个进程尝试同时执行死锁时,可以保证死锁:
A被B阻止,B被A =>死锁阻止。
是否有超时值,之后将自动释放锁定
这样的行为将是一场彻底的灾难,并使编程交易变得不可能 。 您可以要求并存在的是,如果无法在超时时间内获得锁,则请求放弃该锁: SET LOCK_TIMEOUT
。
很难回答您的基本问题,因为您提出了解决方案,但没有提出要解决的实际问题。 作为数据库中的一般注释,条件更新通过添加适当的谓词(例如)以面向集合的方式完成。 UPDATE ... WHERE timestamp < @last_timestamp
,让引擎找出如何正确实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.