我正在寻找一个高级别的答案,但这里有一些细节以防万一,我正在将J2EE应用程序部署到WebLogic中的集群。后端有一个Oracle数据库。
应用程序的正常流程为
- 用户将数据(作为行插入)提供给应用程序
- 应用程序等待数据达到一定的大小并批量插入数据库(只提交1次)
数据库中存在一个限制,阻止“重复”数据插入。如果应用程序遇到约束违规,则必须一次回滚并重新插入一行,因此可以“重命名”并插入重复的行。
假设我有2个正在运行的应用实例。每个实例即将插入1000行。即使只有1个重复,一个实例也必须逐个回滚并插入行。
我可以很容易地看到在这个实例中将非冲突的999行重新插入批处理会更聪明,但如果我有3个正在运行的应用程序并且999行也有可能重复呢?
所以我的问题是:这种情况有设计模式吗?
这是一个很长的问题,所以请让我知道在哪里澄清。谢谢你的时间。
编辑: 1000行数据在每个实例的内存中,但是它们看不到彼此的行。他们知道行是否重复的唯一方法是将其插入数据库。
如果当前的应用程序设计没有意义,请随时提出解决此问题的更好方法。我非常感激。
答案 0 :(得分:2)
答案 1 :(得分:1)
最简单的方法是避免并行处理相同的数据。例如,您的基于大小或时间的事件可以仅在一个节点上运行或者按摩到JMS队列,因此只有一个节点会处理它(例如,通过使用类似的重复检查,例如基于时间戳的消息/批处理。)