当前位置: 首页 > 面试题库 >

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

郎雅昶
2023-03-14
问题内容

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

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

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


问题答案:

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

乐观锁定通常在基于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。它使扩展变得更困难,并且通常使应用程序更难以管理。真正值得考虑的是用户是否将定期尝试更新相同的行,或者用户更新行是否需要花费大量时间,因此值得让他们提前知道其他人已锁定该行。



 类似资料:
  • 问题内容: 我有一个不完整的csv文件,需要准确更新,因此有这样的csv文件: 自然地,文件要复杂得多,但是以这种格式,这是我要在7到8(或任何范围)之间插入或n个单词的内容。我怎样才能做到这一点? 伪代码,代码或示例都很好,我不知道如何开始。 更新: 也许我应该将其转换为数组或某种数据结构。然后,在特定位置插入新项目,将其余内容右移,并在每次插入时执行该操作。 我不知道是否正确的方法或如何开始对

  • 后端使用Spring Data+Spring MVC。 谢谢你。

  • 问题内容: 我想在Windows 7上发布Java GUI应用程序。该应用程序正在使用Swing Toolkit,并且不需要任何本机代码。使用NSIS安装程序安装该应用程序。我想将此应用程序尽可能地集成到Windows 7中。这表示: 当应用程序运行时,必须可以将应用程序固定到任务栏。 必须有可能将数据文件与应用程序关联,以便Windows用我的应用程序打开这些文件。 必须自动与32位Java运行

  • 问题内容: Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。 为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。 分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统? 问题答案: 有多种解决方案,取决于你的发行要求。 只是用一个jar。这

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?

  • 问题内容: 确保给定脚本仅一个实例正在运行的最简单/最佳方法是什么(假设它是Linux上的Bash)? 目前,我正在做: 但是它有几个问题: 它把检查放在脚本之外 它不允许我从单独的帐户运行相同的脚本-有时我想这样做。 仅检查进程名称的前14个字符 当然,我可以编写自己的pidfile处理程序,但我认为应该有一种简单的方法。 问题答案: 如果所有用户的脚本都相同,则可以使用一种方法。如果您获得了锁