我们需要在两个不同的数据库中查询数据(SQL Server中的1个和Oracle中的其他数据库)。
以下是需要实施的方案:
我们正在使用的技术:ASP.net,C#
我们考虑过的选项:
我想知道处理这种情况的最佳设计策略是什么?如果是,那么该方法的优点和缺点是什么
答案 0 :(得分:1)
是否无法使用SSIS包在两台服务器之间进行数据转换,并通过ASP.Net& amp; c#项目或通过按需调用的计划作业?
答案 1 :(得分:0)
其中一个数据库的结果是否足够小以便有效传递?
如果是这样,我建议将数据库视为两个独立的数据源。
如果数据集很大,那么您可能必须将某种形式的ETL考虑到其中一个数据库的临时区域中。如果您需要查询以从两个数据库返回最新数据,则可能会出现问题。因为您需要进行实时ETL。
答案 2 :(得分:0)
这里有一篇关于在Microsoft SQL服务器和Oracle之间执行分布式事务的文章:
我不知道它的效果如何,但如果 工作,这可能是最适合您的解决方案:
答案 3 :(得分:0)
最好的策略是使用Linked Server,因为它是为查询和写入异构数据库而设计的,如上所述。但显然由于你提到的政策限制,这不是选择。
因此,为了达到您想要的最佳性能,我建议采用以下方法:
是否将其写为Web服务的决定不会改变数据检索过程。但是应该考虑通过在同一台机器上或在LAN /高速连接链路内尽可能靠近数据库服务器来减少数据传输时间的开销。
数据更新非常简单。它只是从一个拉出数据并更新另一个的标准两阶段操作。 -
答案 4 :(得分:0)
很难说出最佳解决方案是什么。但我们有一个几乎相同的情景。
<强>实时:强>
对于实时数据更新,我们使用WebServices,因为在我们的例子中,两个不同的数据库属于不同的项目。因此,每个项目都提供一个WebService,可用于数据检索和数据更新。这样做的好处是,只要webservice接口没有改变,项目就不必关注数据库结构的变化。
静态数据:
静态数据(例如员工)将被镜像,因为可以更快地访问。对于大量数据,我们使用平面文件进行夜间更新。
对于静态数据,我认为明确定义数据所有者很重要。对于每个数据,应该清楚哪个数据库具有原始数据,哪个数据库仅具有卷影副本以便更快地访问。
因此,静态数据只能在影子数据库中读取,或者只能通过指定的Web服务进行更新。
答案 5 :(得分:0)
在.NET代码中使用多个数据源的问题是,您可能会面临使CRUD操作失败ACID测试并导致数据不一致的风险。
我最倾向于追求@Will A对你的问题的评论......
设置复制到删除服务器,然后链接两个远程服务器。
答案 6 :(得分:0)
拥有多个DAL并在应用程序中处理它 - 数千个不是很大的数字,只有当你达到100,000或数百万时才需要担心,在这种情况下你的应用程序会挂起。
使用linq对生成的数据集执行数据操作,而不是循环遍历它们。