1

私はSQL azureが初めてです。現在、SQL Azure フェデレーションが原因である大きな問題に直面しています。私のプロジェクトの 1 つで、フェデレーションを使用したいと考えています。そのために、すべてのフェデレーションからデータを読み取りたいと考えています。サーバー内のフェデレーションの総数を確認し、フェデレーションからデータを読み取るにはどうすればよいですか? また、フェデレーションにデータを挿入するにはどうすればよいですか? 現在私は使用しています:

string strSQL = @"SELECT f.name, fmc.federation_id, fmc.member_id, fmc.range_low, fmc.range_high " +
                                                            "FROM sys.federations f " +
                                                            "JOIN sys.federation_member_distributions fmc " +
                                                            "ON f.federation_id=fmc.federation_id " +
                                                            "ORDER BY fmc.federation_id, fmc.range_low, fmc.range_high";
        string strTableName = "federation_member_distributions";

        try
        {
            using (SqlConnection connection = new SqlConnection(csb.ToString()))
            {
                connection.Open();
                sbResults.AppendFormat("-- Open {0}\r\n\r\n", csb.ToString());

                data = new DataSet();
                data.Locale = System.Globalization.CultureInfo.InvariantCulture;

                using (SqlCommand command = connection.CreateCommand())
                {
                    // Connect to federation root or federation member
                    command.CommandText = "USE FEDERATION ROOT WITH RESET";
                    command.ExecuteNonQuery();
                    sbResults.AppendFormat("{0}\r\nGO\r\n", command.CommandText);
                }

                //Retrieve federation root metadata, and populate the data to the DataGridView control
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(strSQL, connection);
                sqlDataAdapter.Fill(data, strTableName);
                sbResults.AppendFormat("{0}\r\nGO\r\n", strSQL);
            }

        }
        catch (Exception ex)
        {

        }

しかし、それは機能しません

4

2 に答える 2

3

SQL Azure チームの Cihan Biyikoglu と話し合いましたが、彼の提案は次のとおりです。

アイデアは、フェデレーションを使用してデータがどこにあるかの「マップ」をキャッシュする必要がないため、キャッシュする必要がないということです。

ファンアウトを実行する疑似アプリ コードと実際のサンプルを次に示します。この UI でコードを試すこともできます。

http://federationsutility-seasia.cloudapp.net/About.aspx

Start at the 
@i=MIN_VALUE (of the data_type or federation key like customerID=-1)
While (@i not null)
{
 Try
 {
    -- switch to the next member
    USE FEDERATION fedname(id=@i)...

    -- Run your transaction here for this member 
    SELECT * FROM table join other_table … WHERE fedkeycolumn >= @i group by … order by …

    -- grab the next value
    SELECT @i=range_high FROM sys.federation_member_distributions 
 }
 Catch ()
 {
           If retry_count < total_retries
                          Exit the loop
 }
}

それでもメンバーを見つけたい場合は、フェデレーションを含むデータベースでいつでもクエリを実行できます。

Select * from sys.federation_member_distributions fmd join sys.federations f on fmd.federation_id=f.federation_id 

このアプローチの問題点は、情報を読んでからクエリの処理を終了するまでの時間に差がある場合、データの読み取りを見逃す可能性があることです。

「マップ」をキャッシュしない上記の方法では、その問題は発生しません。再パーティション操作に関係なく、すべてのメンバーをキャッチします。

于 2012-06-05T23:08:17.833 に答える
3

上記の質問については、SQL Azure フェデレーションの使用方法について説明している次の記事を参照する必要があります。

SQL Azure のフェデレーションのファンアウト クエリの概要 (パート 1): 複数のフェデレーション メンバーに対するスケーラブルなクエリ、MapReduce スタイル!

上記のFanout サンプル ツールには、フェデレーションからデータを取得する方法を示すコードが含まれています。

このサンプルの 2 番目の部分「SQL Azure でのフェデレーションのファンアウト クエリ (パート 2): TOP、ORDER BY、DISTINCT、およびその他の強力な集計、MapReduce スタイルを使用したスケーラブルなファンアウト クエリ!」では、ファンアウトを実行する方法を示します。特定の例を含むクエリ。

上記のサンプルを試して、問題が発生した場合はお知らせください。

于 2012-06-04T16:28:44.820 に答える