设计同步信息的建议

时间:2011-05-01 13:15:27

标签: java oop design-patterns

我在Java,Ejb3.0,WebLogic下开发。

我想有一个系统设计建议您关于我将要开发的功能。 (不太复杂)

主要目标是建立一个系统,从一些数据库获取信息并在它们之间进行同步。

例如:

假设我有数据库A,数据库B和数据库C.

如果我们将B与C进行比较:(B是 DB)

期望的目标:

场景1. A有一条记录在B.动作中缺失我们采取的行动= B将缺少的记录添加到其表中。

场景2. A有记录,B也有记录。我们采取的行动= B正在更新记录信息,完全按照A。

中所示

(数据库A与数据库B相同)。

比较方法假设比较特定的表列信息。

现在我可以拿走所有东西并将其放到对象上然后进行比较。 另一方面,我可以手动同步。

想听听一些设计建议(可能是OOP设计或任何其他模式)。即使某些特殊设计有点开销。我仍然想这样做,所以我可以学到新东西,并使用这种机制来同步其他系统。

提前致谢,

射线。

2 个答案:

答案 0 :(得分:1)

对此的一个好答案取决于数据量。

如果金额很少,只需从所有数据库中获取所有对象并将其放入集合中。这是最容易维护的。

由于来自一个数据库的少量数据和来自另一个数据库的主要数据负载,可能是获取次要数据,将其传递到包含主要数据的数据库并让数据库完成工作的理想选择。 / p>

大多数最佳做法是将应用程序和数据库之间的数据流保持在低水平。

也许你可以更多地解释一下你的问题的细节......

---编辑---

好的,所以你想要同步到你的B主数据库。

有几种方法,取决于您拥有的几个环境参数,两个主要方向是

  1. 每次进行完整的迭代(易于编程和维护,性能非常差)
  2. 完成一次完全同步,然后进行delta更新(更难以维护,非常好的性能)
  3. 至1.)

    如果桌子上的所有物品都没有问题地放入你的主存储器中,那么将它们全部放入那里,并在那里做你的东西。  如果不是你必须做一堆束。

    至2。)

    A)  要允许进行增量,您必须识别已更改的项目。  为此你可以使用数据库触发器,但这是特定于数据库的,很难维护,

    b)中  您可以引入只有同步目的版本号的表列,如果实体已完成,您可以计算它们。

    可以更容易地使用像Hibernate这样的Frameworks引入版本号,但是你仍然需要更大的代码库来完成你的工作,因为你必须检查版本等。 但更好的性能将使delta更新成为最常用的方法。

答案 1 :(得分:1)

这听起来像数据复制,最好由数据库本身处理。请参阅数据库技术的文档,应该有多种不同的方法来配置复制。不要重新发明轮子。