【发布时间】:2012-03-29 08:19:40
【问题描述】:
我正在开发一个简单的支持应用程序,客户可以在其中提出问题并由管理员回答。我需要为一个问题实施资源锁定,以避免多个管理员处理同一个问题并避免数据冲突。这种任务的最佳实践是什么?
PS 我正在使用 PHP 和 MySQL 库来存储问题。
编辑
我知道我只是可以简单地为该资源添加一个状态字段,当打开它时会锁定它,但是如果假设管理员只是关闭浏览器窗口,我该如何关闭它。
【问题讨论】:
我正在开发一个简单的支持应用程序,客户可以在其中提出问题并由管理员回答。我需要为一个问题实施资源锁定,以避免多个管理员处理同一个问题并避免数据冲突。这种任务的最佳实践是什么?
PS 我正在使用 PHP 和 MySQL 库来存储问题。
编辑
我知道我只是可以简单地为该资源添加一个状态字段,当打开它时会锁定它,但是如果假设管理员只是关闭浏览器窗口,我该如何关闭它。
【问题讨论】:
好吧...如果您在 Mysql db 中遇到问题,如何只添加一列,其中包含正在解决此问题的信息?然后,当管理员想要打开问题时,您可以检查它...
【讨论】:
除了锁定列之外,您可能应该在有人请求阅读时立即锁定条目,而不仅仅是在管理员将其归属于自己时。 如果这样做,您将避免同时访问资源。
例如,如果您的 UI 显示如下内容:
/!\ WARNING /!\ 另一个管理员已经处理了这个问题 /!\ WARNING /!\
您可能希望避免两个管理员同时访问请求,在 UI 请求问题的 GET STATUS / GET INFORMATION(SELECT 请求)时使用锁定集。
如果您要寻找临时锁,则必须处理会话和触发器以及可重复使用的密钥。
【讨论】: