2011-12-02 76 views
2

比方说,我有两个数据库,像这样:同时更新两个不同的数据库

DatabaseA

创建表表1(FIELD1 INT,场2 INT,字段3 INT)

DatabaseB

创建表表1(FIELD1 INT,场2 INT)

我们旧的应用程序使用,必须继续这样做。我们正在开发一款即将使用A的新应用程序。答:A:表1复制B:Table1


这里有一些事情要考虑:

  • 旧的应用程序只能在b执行selects:表1,没有必要的同步化去两种方式。
  • 旧应用程序必须保持使用B
  • 中的大部分字段答:表1相同B:表1,但某些类型的数据转换在某些情况下将需要。
  • 性能不是一个大问题,因为不会有太多的修改。
  • 首先,只有1到2个表需要同步,但随着我们将更多模块迁移到新版本,将添加更多表。
  • 这两个数据库来自不同的供应商。

这里是我考虑的选项:

  • 在新的应用程序,请更新到两个数据库:
    我不喜欢这个选项,因为它增加了一个新应用程序数据层的复杂性很大,并且两个数据库之间没有事务
  • 使用A中的触发器启动application将复制在B中的变化
    不知道这是一个很好的做法,以及如何可靠是
  • 一个使用触发器发动stored procedure复制的更改
    一些数据转换可能过于复杂,在存储过程中做
  • 启动在设定的时间间隔的应用程序或存储过程来进行更改
    不是真正的蒂姆E,所以我宁可不使用此

你对这个恶棍?
我错过了另一种选择吗?
你有没有做过类似的事情?
有没有可以完成这项工作的软件(免费或不是)?

一如既往,非常感谢大家的时间和您的意见。

回答

2

你有很多的选择在这里...

  • 您可以link the servers并在交易一起应用的更新。这是在同一台服务器上的数据库是而不是
  • 您可以使用Service Broker向其他服务器提供有保证的异步更新。
  • Log shipping也将允许其他服务器以接近实时的方式接收更新。

最后,您需要详细了解每一项,并决定哪种最适合您的需求。这将是可靠性和性能之间的折衷。

单从您的问题中的信息,听起来像Service Broker将是最合适的。您仍然可以使用触发器来调用代理,然后异步响应。

0

您如何看待事务复制?您只能复制某些列,并且可以编写自定义存储过程来执行插入,更新和删除操作。它也是异步的,所以你的新应用程序不应该被它阻塞。