这是我遇到的一种情况:我有两个类似的 java 应用程序在不同的服务器上运行。这两个应用程序使用提供的网络服务从同一网站获取数据。但是该网站当然不知道第一个应用程序与第二个应用程序获取了相同的数据安全性。获取数据后应保存在数据库中。所以我遇到了在数据库中两次保存相同数据的问题。
如何避免数据库中出现重复条目?
大概有两种方式:
1) 使用数据库端。写一些看起来像“如果唯一则插入”的东西。
2) 使用服务器端。编写一些中间服务来接收来自两个数据 getter 的响应并以某种方式处理它们。
我想第二种解决方案更有效。
你能就这个话题提出一些建议吗? 您将如何实现该中间服务?如何实现服务之间的通信?如果我们使用 HashMap 来存储接收到的数据,我们如何估计我们的系统可以处理的 HashMap 的最大大小?
最佳答案
您真的需要同时在两台服务器上获取数据吗?在insert if not present 期间检查每个条目可能代价高昂。合并多个提取也可能很耗时。并行获取有什么好处吗?考虑一次只有一个提取器。
您将面临的问题是您必须选择分布式进程中的哪一个应该执行数据获取并将其存储在数据库中。
它是某种 Leader Election问题。
看看Apache ZooKeeper这是分布式协调服务。 有一个receipt如何使用 ZooKeeper 实现领导者选举。
有很多框架已经实现了这个收据。我建议您使用 Netflix curator .更多有关 curator 领导者选举的详细信息,请访问 wiki。 .
关于java - 如何同步两个 Java 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907278/