3

在我目前正在处理的应用程序中,多个用户可能想要同时编辑某些内容,这意味着我们需要实现乐观锁定。但是,对于此应用程序,正在编辑的项目是一个科学协议,其中包含来自数据库中多个不同表的记录。

因此,我们希望能够表明整个协议已被锁定以供单个用户编辑,这导致了我的问题:这样做的首选方法是在数据库级别进行编辑(例如,有一个表协议的唯一 ID 并检查它是否已被锁定)或者是否可以接受在内存中跟踪 Web 服务器本身上当前锁定的协议?

目前,我们预计该应用程序只有大约 100 个用户(大约 20 个同时使用),但这个数字在未来可能会增加,因此我们正在寻求使用最具可扩展性的选项。

4

3 回答 3

5

这个问题还取决于您的代码库的架构如何?

如果修改这些记录的所有调用都通过一个入口点,那么是的,我建议将所有锁定代码完全保留在您的应用程序中,这样您就可以将数据库保留为哑数据存储。

如果您有多个可以修改表的入口点,您将需要在数据库级别实现锁定。

于 2009-11-16T14:42:02.923 回答
3

我将在管理锁定的数据库中实现一个表。例如:

行:ProtocolID、EditingBeginDate、EditingEndDate

然后,您可以简单地查询何时尝试应用程序中的编辑功能,并且如果给定协议没有完整的时间范围,那么您知道它仍在由给定用户编辑。您可以实施应关闭编辑会话的特定时间量,以防止记录被永久锁定。只是一个建议:-D

于 2009-11-16T14:43:28.503 回答
2

因此,您似乎需要粗粒度的锁。

如果您想拥有最可扩展的解决方案,您需要将锁定信息保存在数据库或分布式缓存中(在这种情况下,分布式缓存会更快)。内存中的方法根本不可扩展 - 如果您需要更多服务器,它将会失败。不要忘记还引入锁定超时以防止可能的死锁。

于 2009-11-16T14:45:34.630 回答