长期锁定记录是否是现代数据库系统的常见做法?
Is keeping a lock on a record for a long period of time common practice with modern database systems?
问题:长时间锁定记录是现代数据库系统的常见做法吗?
我的理解是锁定数据库中的记录(乐观或悲观)通常是在事务期间很短的时间内。
我现在使用的软件会长时间锁定记录:
在用户登录软件的整个过程中,登录用户的记录(在ACTIVE_USERS'table中)保持锁定状态。
假设用户 A 正在处理一个文件。文件对应的记录被锁定,直到USER A保存文件或退出文件。因此,如果同事 USER B 尝试处理同一个文件,则会显示一个弹出窗口,提示“您无法处理此文件,因为 USER A 正在处理它”。
我正在为实现与 Microsoft SQL 服务器的兼容性而工作的公司希望更改最少:所以我需要实现这样的锁定机制。我破解了一些正在最小测试项目中工作的东西,但我不确定它是否符合行业和 MSSQL 的标准...
评论有点长
将数据库锁定机制用于此应用程序级锁定似乎很不寻常。数据库锁可能位于行、页或 table 级别,它们还会影响索引,因此可能会产生意想不到的副作用。显然,锁的激增也使死锁更容易发生。
通常,应用程序锁会在记录级别处理。在记录中使用标志(某种),应用程序将确保只有一行可以访问该文件。
我会说,它可能会起作用。但我绝不会那样设计系统,而且我会提防意想不到的后果。
问题:长时间锁定记录是现代数据库系统的常见做法吗?
我的理解是锁定数据库中的记录(乐观或悲观)通常是在事务期间很短的时间内。
我现在使用的软件会长时间锁定记录:
在用户登录软件的整个过程中,登录用户的记录(在ACTIVE_USERS'table中)保持锁定状态。
假设用户 A 正在处理一个文件。文件对应的记录被锁定,直到USER A保存文件或退出文件。因此,如果同事 USER B 尝试处理同一个文件,则会显示一个弹出窗口,提示“您无法处理此文件,因为 USER A 正在处理它”。
我正在为实现与 Microsoft SQL 服务器的兼容性而工作的公司希望更改最少:所以我需要实现这样的锁定机制。我破解了一些正在最小测试项目中工作的东西,但我不确定它是否符合行业和 MSSQL 的标准...
评论有点长
将数据库锁定机制用于此应用程序级锁定似乎很不寻常。数据库锁可能位于行、页或 table 级别,它们还会影响索引,因此可能会产生意想不到的副作用。显然,锁的激增也使死锁更容易发生。
通常,应用程序锁会在记录级别处理。在记录中使用标志(某种),应用程序将确保只有一行可以访问该文件。
我会说,它可能会起作用。但我绝不会那样设计系统,而且我会提防意想不到的后果。