小编典典

确保两个人不要在我的Web应用程序上编辑同一行的最佳方法是什么?

ajax

我有一个用于管理数据库的PHP / jQuery / AJAX / MySQL应用程序。我想实现防止多个用户同时编辑同一数据库行的功能。

  1. 这个叫什么?
  2. 我是否使用令牌系统,并且拥有令牌的人可以对其进行编辑,直到他们释放令牌为止?
  3. 我是否使用“上次编辑日期/时间”来比较您将HTML表单加载的时间与数据库中的时间,如果数据库是最近发送的编辑,那么它会警告您?
  4. 我是否使用数据库功能锁定行?

我只是不确定哪个是最好的。假设10-15个并发用户


阅读 304

收藏
2020-07-26

共1个答案

小编典典

有两种通用方法-乐观锁定和悲观锁定。

乐观锁定通常在基于Web的环境中更容易实现,因为它基本上是无状态的。它的伸缩性也更好。缺点是假设您的用户通常不会尝试同时编辑同一组行。对于大多数应用程序,这是一个非常合理的假设,但是您必须验证您的应用程序不是用户经常会踩到对方脚趾的异常值之一。在乐观锁定中,当用户获取数据时,您将拥有某种last_modified_timestamp列,SELECT然后在WHERE去更新日期时在子句中使用该列,即

UPDATE table_name
   SET col1 = <<new value>>,
       col2 = <<new values>>,
       last_modified_timestamp = <<new timestamp>>
 WHERE primary_key = <<key column>>
   AND last_modified_timestamp = <<last modified timestamp you originally queried>>

如果该值更新1行,则说明您已成功。否则,如果它更新0行,则说明您在此期间已修改了其他数据,可以采取一些措施(通常向用户显示新数据并询问他们是否要覆盖,但是您可以采用其他冲突解决方法)。

悲观锁定尤其是在基于Web的应用程序中实现更具挑战性,尤其是当用户可以关闭浏览器而无需注销或用户可以开始编辑某些数据并在命中之前吃午饭时Submit。它使扩展变得更困难,并且通常使应用程序更难以管理。真正值得考虑的是用户是否将定期尝试更新相同的行,或者用户更新行是否需要花费大量时间,因此值得让他们提前知道其他人已锁定该行。

2020-07-26