在数据共享方面,解耦数据库设计的最佳方法是什么?

时间:2009-01-21 23:02:56

标签: database oracle database-design plsql

我有一系列需要访问彼此数据的Oracle数据库。最有效的方法是使用数据库链接 - 设置一些数据库链接我可以从A到B获取数据,而且操作起来很少。对我来说问题是你最终得到了一个紧密耦合的设计,如果一个数据库出现问题,它可以将耦合数据库带到它(或者可能是这些数据库上应用程序的一部分)。

您尝试过哪些替代方法在Oracle数据库之间共享数据?

经过几次回复后更新......

我没有想太多的复制,更多的是访问“主数据”。例如,如果我有一个具有货币转换率的中央数据库,我想将费率提取到一个单独的数据库(应用程序)。对于这样一个小型数据集,igor-db建议使用DB链接的物化视图可以很好地工作。但是,当您从非常大的数据集中动态采样时,本地缓存选项开始变得更加棘手。在这种情况下你会选择什么选择。我想知道一个XML服务,但是tuinstoel(在对le dorfier的回复的评论中)正确地质疑了所涉及的开销。

回复摘要......

总的来说,我认为igor-db最接近,这就是为什么我接受了这个答案,但我想我会添加一些来解决其他一些答案。

就我的目的而言,我只关注数据复制,看起来Oracle BASIC复制(而不是ADVANCED)复制对我而言。使用主站点上的物化视图日志和快照站点上的物化视图看起来是一种很好的前进方式。

如果这不是一个选项,也许数据卷使全表复制成为问题,那么消息传递解决方案似乎是最合适的Oracle解决方案。 Oracle Advanced Queuing似乎是设置消息传递解决方案的最快捷,最简单的方法。

最不可取的方法似乎是自己动手的XML Web服务,但仅限于高级排队相对容易的选项。

6 个答案:

答案 0 :(得分:5)

Streams是Oracle复制技术。 您可以在数据库链接上使用MV(因此数据库'A'具有来自数据库'B'的数据的物化视图。如果'B'关闭,则MV无法刷新但数据仍在'A'中)

里程可能取决于数据库卷,更改数量......

答案 1 :(得分:1)

如果您需要同时访问多个数据库,我认为它的定义是紧密耦合的。

如果这是关于传输数据,例如,它可以是异步的,你可以在两者之间安装一个消息队列,并有两个进程,一个从源读取,另一个写入接收器。

答案 2 :(得分:1)

OP提供了更多信息。他声称数据集非常大。那么大有多大?主表的更改次数是多少?

通过使用物化视图日志,Oracle将仅传播在主表中所做的更改。无需完全刷新数据。 Oracle流也只将修改传达给另一方。

购买存储很便宜,为什么不进行本地缓存?比编写自己的解决方案便宜得多。

当数据库不可用时,XML服务无法帮助您,所以我不明白为什么它会有所帮助? Oracle有许多复制选项,可以探索它们。

修改

我已经构建了xml服务。它们通过清晰的接口(合同)提供不同系统之间的互操作性。您可以在C#中构建xml服务并使用Java来使用该服务。但是xml服务并不快。

答案 3 :(得分:1)

为什么不使用高级排队?为什么要将自己的XML服务转移到Oracle实例之间移动消息(DML) - 它已经存在。当它们都启动时,您可以将传播移动消息从一个实例移动到另一个实例。您可以根据需要在目标服务器中处理它们。 AQ的设置和使用非常简单。

答案 4 :(得分:1)

为什么他们需要成为独立的数据库?

拥有多个模式的单个数据库/实例可能更容易。

保持一个数据库(使用适当的备用数据库等)比保持N更容易。

答案 5 :(得分:0)

您需要什么样的即时性以及双向性?如果数据可能稍微长一些并且可以从一个“主源”中提取,则创建一系列简单的ETL脚本按计划运行,以将数据从“源”数据库提取到其他数据库中。

然后,您可以定制数据结构以更精确地满足客户数据库的需求,并且您可以更改源数据的结构,直到您脸红。