我有许多数据库服务器(不同的DBMS实例,安装在不同的物理位置),每个服务器都包含数据并使用相同的模式。大多数数据在所有数据库中都是完全相同的,但不幸的是,并不是每一种情况都是如此。
我需要编写一个应用程序,该应用程序将对跨所有数据库的表发出查询(只进行选择,而不是插入、更新或删除),检索所有结果,以便工具能够比较这些结果,从而能够向用户报告可能的差异。
例如,假设我有一个基于web的表单,用户可以在其中输入公司详细信息。提交表单将对所有数据库中的同一表发出插入(通过不同的数据库连接,每个数据库都是分开的)。当用户键入公司名称时,应用程序需要能够验证输入的值并不存在于所有数据库中。如果它存在或不存在于所有数据库中,那么一切都是好的。公司名称被使用或可以由用户使用。但是,如果值存在于某些数据库,而不存在于其他数据库上,则必须引发验证错误。
我正在编写的工具是一个Java应用程序,使用JDBC (连接到多个Oracle数据库),所以现在我的想法是创建一个连接到我的每个数据库服务器。并行发出相同的查询,等待结果并进行比较。我的用例涉及少数用户和5-10个不同的数据库服务器(数据库迁移或从/主复制是完全不可能的)。
在过去,我已经回答了某人的问题,这个问题需要一个类似于我现在应该做的事情的解决方案。
有什么可能的方法来处理这样的情况?
发布于 2017-02-28 13:30:34
我认为您要寻找的是Oracle数据库链接。
使用CREATE语句创建数据库链接。数据库链接是一个数据库中的架构对象,它允许您访问另一个数据库上的对象。另一个数据库不一定是Oracle数据库系统。
发布于 2017-02-28 14:45:21
在我看来,所有RDBMS产品都具有跨多个数据库连接数据库和查询的功能。如果这是您有而且不能预见的跨数据库查询的唯一需求,我个人不会急于链接数据库来完成这一任务。我会考虑所有潜在的不利因素,并仔细考虑。我会担心引入性能影响,因为数据库不在同一位置,而且还可能使产品更难支持。后者将取决于您的IT组织是如何构建的,以及DBA制定的任何标准/实践。
如果不按照这个要求沿着链接的数据库路径前进,我会并行地启动后台线程,每个线程都连接到每个远程DB并查询类似的数据。
建立到每个DB的连接是一个相当昂贵的操作。如果您的应用程序已经定期连接到每个应用程序,那么数据库池将有所帮助,因为DB池将使连接保持打开和可用。
另一件需要考虑的事情是,听起来你的应用程序不拥有数据库和数据。显然,不管你用什么方法连接到另一个拥有应用程序的后端数据库,你都会依赖于另一个应用程序,而不是以破坏你的数据模型的方式来转换它的数据模型。
发布于 2015-12-05 10:41:06
您的应用程序是否是所有数据库更新的单一点?如果没有,那么你将有很多问题与欺骗。
另一方面,如果应用程序是更新的单一点,那么在将更新保存到各个数据库之前,您可以使用NoSQL使用集中式缓存,并将其用作贯穿式缓存,这样您只需查询一个缓存就可以检查dups。
https://softwareengineering.stackexchange.com/questions/304331
复制相似问题