我们有两个系统的系统发送数据系统B。这是一个要求,每个系统可以独立运行的其他既不会爆炸,如果其他的下降。问题是什么是最好的方式为系统到通信系统,B会议脱钩的要求。

B系统目前有一个过程,调查的数据在数据库表和过程的任何新的行插入。

一个建议的设计是用于系统一只插入数据系统的数据表和有系统B进程的新的行通过现有的进程。问题是,该解决方案满足的要求脱钩两个系统?是一个数据库中考虑的系统的一部分B,这可能会成为不可用的,并导致系统毁了?

另一种方案是对系统把数据并入一个MQ队,并有一个过程中,会读MQ然后插入系统的数据库。但是这只是额外的开销?最终是一个MQ队列中的任何更容错过一个数据库表?

有帮助吗?

解决方案

一般来说,数据库共享是一个紧密的联接,而不是优选的可能除了对速度的目的。不仅为性目的,而且还因为系统的A和B将可更改并升级,在几个点,在他们的未来,并应具有最低相互依存的消息传递一个明显的依赖关系,而共用数据库的数据往往会咬你的(或者你的继承人)后,当少的预期。如果你去的数据库共享的路线,至少使共享界面明确的用专用的表或观点。

有四个共同水平的融合:

  1. 数据库共享
  2. 文件共享
  3. Remote procedure call
  4. 消息传递

它可以应用和结合在各种情况下,与不同的可用性和易维护性。你有一个很好的概述在 企业集成图案的网站.

如有任何中央一体化的基础设施,MQ应该举办一个环境与伟大的可用性、完整的转移&c.还有其他的队列中的解决办法能让你分发的队列中的协调。

其他提示

使用队列来通信。不要通过数据库“通行证”从系统中的数据到系统B。您使用的数据库作为一个巨大的,昂贵的,复杂的消息队列。

使用一个消息队列作为一个消息队列中。

这是不是“额外”开销。这是分离系统的最佳方式。这就是所谓的面向服务的架构(SOA),并使用消息是绝对重要的设计。

这是MQ队列是远远超过一个DB表简单。

因为RDBMS使用巨大的(几乎是不可想象的)费用达到保证一个合理的水平,你的交易完成后妥善不要拿“容错”。锁定。缓冲。写入队列。存储管理。等等

一个可靠的消息队列的实现使用一些后备存储器来保持队列的状态。开销多,比RDBMS少得多。性能要好得多。而且它的很多,很多简单的交互。

在SQL Server中我将通过SSIS包或工作(根据记录的数量和我在动的复杂性)做到这一点。其它数据库也有ETL解决方案。我喜欢的ETL解决方案becasue我能保持什么改变并处理什么错误,我可以把它由于某种原因,不会去其他系统(数据结构很少是两个数据库之间的相同)记录的保持日志表而不杀死过程的其余部分。我还可以更改数据,因为它流到调整数据库的差异(之类的查找表,说在DB1完成的状态为5,这是7 DB2或者说DB2都需要有一个字段DB1不和你有一个默认值添加到归档,如果它为空)。如果一方或另一方servver是正在运行的SSIS包将无法完成作业,并没有系统会受到影响,所以它使去耦,使用触发器或复制岂不datbases。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top