我有一个用于管理数据库的PHP / jQuery / AJAX / MySQL应用程序。我想实现防止多个用户同时编辑同一数据库行的功能。
我只是不确定哪个是最好的。假设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
。它使扩展变得更困难,并且通常使应用程序更难以管理。真正值得考虑的是用户是否将定期尝试更新相同的行,或者用户更新行是否需要花费大量时间,因此值得让他们提前知道其他人已锁定该行。
后端使用Spring Data+Spring MVC。 谢谢你。
问题内容: 我有一个不完整的csv文件,需要准确更新,因此有这样的csv文件: 自然地,文件要复杂得多,但是以这种格式,这是我要在7到8(或任何范围)之间插入或n个单词的内容。我怎样才能做到这一点? 伪代码,代码或示例都很好,我不知道如何开始。 更新: 也许我应该将其转换为数组或某种数据结构。然后,在特定位置插入新项目,将其余内容右移,并在每次插入时执行该操作。 我不知道是否正确的方法或如何开始对
问题内容: 我想在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处理程序,但我认为应该有一种简单的方法。 问题答案: 如果所有用户的脚本都相同,则可以使用一种方法。如果您获得了锁