0

SQL Azure give you an option to setup federated SQL servers - e.g. essentially partition your data across multiple servers by some key. However, when you run select * from order, it puts all the data back together for you and the entire process is transparent to your app.

Now, let's say I have a stored procedure that makes liberal use of temp tables. So in a situation like this:

-- 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

In this scenario, does the data flow each time from one server to the main one? Where is the temp table actually stored? All on the main box, or split up between federated ones?

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コマンドを使用すると、切断/再接続せずにフェデレーション メンバーを切り替えることができます。コードはフェデレーション メンバーのリストを認識し、各メンバーをループしてすべてのレコードを取得する必要があります。一度に 1 つのフェデレーション メンバー。次に、クライアント コードで、すべてのレコードセットを集約して、アプリケーションで使用できる 1 つのデータ セットを作成します。これらすべてのリクエストを並行して実行するコードを作成できます。

コードプレックスに投稿したライブラリを使用してこれを実装する方法を確認できます。これはEnzo Shard Libraryと呼ばれます。フェデレーションのコードを含むベータ版をダウンロードする必要があります。このコードにより、複数のスレッドを使用してフェデレーション メンバー全体のすべてのレコードを取得し、最適なパフォーマンスを得ることができます。

于 2012-05-11T12:08:22.570 に答える