【问题标题】:How to connect to multiple database servers, display combined results? [closed]如何连接多个数据库服务器,显示组合结果? [关闭]
【发布时间】:2013-11-12 15:05:27
【问题描述】:

如果我有相同的表和相同的多个数据库服务器。如何连接多个数据库服务器,从每个数据库服务器获取这些记录,然后显示组合结果的前 10 个?

【问题讨论】:

  • 我尝试获取服务器主服务器中的所有记录,然后按日期时间排序并获取 10 条记录!
  • 你的意思是在 Sql Server 中还是使用 C# 连接到每个 Sql Server db?
  • 在 MS SQL Server 中,您可以使用链接服务器。然后在 .NET 中,您可以使用 4 部分名称访问,甚至可以连接不同服务器上的表。
  • 在不同的服务器上加入表?您可以给我更多的参考吗?

标签: c# asp.net .net sql-server entity-framework


【解决方案1】:

假设您正在使用不同的连接字符串查询多个实例以获取示例表 Orders,您可以尝试以下操作:

var orders = ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>()
    // filter to the relevant connection strings
    .Where(s => s.ConnectionString.ToLower().Contains("metadata"))
    .SelectMany(s => {
         // for each connection string, select a data context        
         using(var context = new NorthwindEntities(s.ConnectionString)) {
             // for each context, select all relevant orders
             return context.Orders.ToArray();
         } // and dispose of the context when done with it
     })
    .Take(10) 
    .ToList();

【讨论】:

【解决方案2】:

这是我想到的几个解决方案。

解决方案 1:

1 - 在服务器 A 上创建临时数据库/表。

2 - 将所有服务器的所有数据导入表中。

3 - 查询表以获取结果。

解决方案 2:

1 - 在服务器 A 上为每个服务器 B .. Z 创建一个链接服务器。

2 - 在链接服务器上使用 4 部分符号创建查询。

总体而言,解决方案 2 可能会很慢,因为您使用的是分布式事务。

解决方案 1 允许您存储可以索引(为了速度)并且可以多次查询的聚合结果。

至于将数据从服务器导入到服务器,只需选择一种方法即可。有两种解决方案可以详细说明。

【讨论】:

  • 感谢@CRAFTY DBA,但我认为解决方案 1 不适合大数据,10000000 行?
  • @nocamer 你到底为什么要查询 1000 万行?如果您需要前 10 名,那么您只需要每台服务器的前 10 名——这将产生 40 个结果并获得其中的前 10 名?要么是一台服务器获得了所有最新的,要么是所有 4 个服务器的混合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2018-03-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多