我有一个 swing 桌面应用程序,它安装在 LAN 中的许多桌面上。我有一个 mysql 数据库,他们都可以与之交谈。每天下午 5 点整,这些应用程序中的每一个都会有一个线程被唤醒,并尝试将文件备份到远程服务器。我想阻止所有桌面应用程序做同样的事情。
我想这样做的方式是:
下午 5 点醒来后,所有应用程序都会尝试将一行写入 MYSQL 表。他们会写同样的信息。只有 1 个会成功,其他人将获得重复行异常。谁成功了,谁就继续运行备份程序。
我的问题是:
这是正确的做事方式吗?有没有更好(更简单)的方法? 我知道我们也可以使用套接字来做到这一点。但我不想走那条路……编码太多我还需要确保所有系统都能首先相互通信 (ping)
请问mysql是否支持这样的功能。我的数据库是 INNO 数据库。所以我认为是的。通常我在 LAN 中会有大约 20-30 个用户。这会导致数据库处理的巨大开销吗?
最佳答案
如果您可以在应用程序和数据库之间放置一个中间类来对结果进行排队,并允许它们以有序的方式进行,那么您就会把它敲掉。
听起来应用程序都直接针对数据库。您必须修改应用程序以避免此问题。
我对设计有很多疑问:
- 为什么他们都写“同一行”?他们不是在为自己的个人实例编写信息吗?
- 为什么他们每个人都有完全相同的主键?如果有自动递增或时间戳,你就不会有这个问题。
- 数据库连接上的隔离设置是什么?如果将其设置为 SERIALIZABLE,您将以性能为代价强制每一个等待直到前一个完成。
- 您能否让他们将文件全部写入一个公共(public)目录,然后以有序的方式提取它们?
我现在只是在集思广益。
关于java - 防止多个用户执行相同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256659/