在多用户环境中选择数据

时间:2012-10-27 20:06:28

标签: mysql database postgresql

我正在构建一个基于crm的系统,大约10个用户将同时使用该系统。

如果相同的记录已被其他用户打开,防止同一记录被打开,使用和保存的最佳方法是什么。

我试图再次猜测用户2在几秒钟内覆盖用户1更改的机会情况。

1 个答案:

答案 0 :(得分:2)

我看到的方法很少:

1)只需将时间戳列添加到数据库并将其发布到隐藏字段中的表单上。一旦有人在编辑后保存记录 - 您可以将从客户端收到的时间戳值与数据库中当前可用的值进行比较。如果它们相同 - 保存更改并更新时间戳列。否则(有人刚编辑该记录) - 不保存更改并以某种方式处理该情况。 这里的问题是你需要从数据库中获取时间戳值并进行比较。在此期间(在您请求值但尚未保存更改之后),有人可能会更新记录。那个时间框架只有几毫秒,因此我认为可以忽略它。

我没有机会做那样的事情,但是我记得,数据库通常可以以某种方式锁定一行。因此,任何读取尝试都将被停止,直到锁定未被删除。假设,这样你可以避免我上面提到的问题。

2)如果你可以控制会话状态,你可以在有人打开它进行编辑后将记录标记为正在编辑。该标记可以包含编辑器的会话ID。编辑完成后 - 您将删除该标记(任何人都可以再次编辑)。但有人可能会开始编辑并打开页面。因此,您需要检查会话是否仍然存在。一旦它死了 - 标记一个记录进行编辑。