设计策略:跨2个不同的数据库查询和更新数据

时间:2010-07-16 20:33:51

标签: c# sql-server oracle data-access-layer

我们需要在两个不同的数据库中查询数据(SQL Server中的1个和Oracle中的其他数据库)。

以下是需要实施的方案:

  1. 查询:从一个数据库获取数据并匹配其他
  2. 中的值
  3. 更新:从一个数据库获取数据并更新其他
  4. 中的对象

    我们正在使用的技术:ASP.net,C#

    我们考虑过的选项:

    1. 一个数据库中的暂存区域
    2. 链接服务器(因组织范围的政策而不允许使用该方法)
    3. 创建网络服务
    4. 创建2个不同的DAL,并使用DAL中的2个来源的数据执行列表操作
    5. 我想知道处理这种情况的最佳设计策略是什么?如果是,那么该方法的优点和缺点是什么

7 个答案:

答案 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对生成的数据集执行数据操作,而不是循环遍历它们。