0

SQL Azure 为您提供了设置联合 SQL 服务器的选项 - 例如,本质上通过某个键将您的数据跨多个服务器分区。但是,当您运行时select * from order,它会为您将所有数据重新组合在一起,并且整个过程对您的应用程序是透明的。

现在,假设我有一个可以自由使用临时表的存储过程。所以在这样的情况下:

-- query uses data from each partitioned server
select tbl1.Column1, tbl2.Column2
into #tmpTable
from tbl1
join tbl2.id = tbl1.id
where tbl2.Column3 = '234'

-- also uses data from each partitioned server
select #tmpTable.*
from tbl3
join tbl3.fkey = #tmpTable.Column1

在这种情况下,数据是否每次都从一台服务器流向主服务器?临时表实际存储在哪里?全部在主盒子上,还是在联邦盒子之间分开?

4

2 回答 2

2

我对 SQL Azure 联盟还不是很了解,但是我能够为您获得以下信息:

如果您指的是 sql azure 中的联合,那么联合今天不会将您的查询扇出到所有成员。您基本上有一个数据库集合,事务和查询的范围保持在服务器端的单个成员中。

有了这个,临时表就没有什么神秘之处了。每个成员只是另一个带有自己的 tempdb 的 sql azure db。

于 2012-05-11T05:45:24.893 回答
2

阿夫卡什是正确的。联邦被拆分为联邦成员,这些成员是不共享任何内容的数据库的集合。当您运行 SELECT * FROM Order 之类的语句时,假设 Order 表已被联合,返回的记录取决于您使用的联合成员。

USE FEDERATION命令允许您在不断开/重新连接的情况下切换联合成员。您的代码需要知道联邦成员列表并遍历每个成员以获取所有记录;一次一个联盟成员。然后在客户端代码上,聚合所有记录集以创建应用程序可以使用的单个数据集。您可以编写代码以并行执行所有这些请求。

您可以看到如何使用我在 codeplex 上发布的库来实现这一点。它被称为Enzo Shard Library。您需要下载包含联邦代码的 BETA 版本。该代码将允许您使用多个线程跨联合成员获取所有记录,以获得最佳性能。

于 2012-05-11T12:08:22.570 回答