銷售: 1-800-867-1380

資料庫同盟的開發考量 (Azure SQL Database)

更新日期: 2015年1月

除了<Azure SQL Database 開發考量>中所討論的內容以外,使用同盟開發解決方案還需要考量其他事項。底下將討論使用同盟開發所特有的資訊。

Important重要事項
目前的同盟實作將在 Web 和 Business 服務層上停用。請考慮使用 Azure SQL Database 的彈性延展功能,在 Azure SQL Database 上建置分區化、向外延展的解決方案。若您想要嘗試,請參閱開始使用 Azure SQL Database 彈性延展預覽

典型的同盟是由許多個別的同盟成員資料庫所組成,這些資料庫會實作成 SQL Database 中的實體資料庫。雖然可以直接連接到這些其中一個實體資料庫,但這個連接方法主要僅適用於不知道同盟的工具。對於大多數的應用程式,使用 USE FEDERATION (SQL Database) 建立與同盟的連接更為方便。USE FEDERATION 陳述式不需要了解基礎實體資料庫,而且會將連接自動路由傳送到包含所要求之資料的同盟成員。

USE FEDERATION 陳述式接受同盟索引鍵值,SQL Database 會使用此值將連接路由傳送到同盟成員,該成員包含與這個值相關聯的資料。例如,如果您的資料依據 customer_id 而同盟,而且您指定同盟金鑰 100,則您所連接的同盟成員會針對 customer_id=100 包含同盟資料表資料列。

除了只連接到正確的同盟成員之外,USE FEDERATION 陳述式可讓您篩選僅限完全符合您所指定之同盟金鑰值的記錄連接。在上述範例中,如果指定了 FILTER=ON 子句,則連接只會傳回與 customer_id=100 相關聯的資料列。這是由查詢處理器所完成,它會在參考同盟資料表的每一個查詢中,於同盟資料行上加入一個述詞 (federated_column=value)。

如果指定了 FILTER=OFF 子句,則依然會建立與包含指定值之同盟成員的連接,但是查詢作業可以存取同盟成員內所儲存的整個值範圍。例如,如果同盟成員針對 customer_id 涵蓋 0-200 的範圍,您將能夠存取該範圍內的任何記錄,即使您在 USE FEDERATION 陳述式中指定 customer_id=100 也是如此。

執行會影響成員中所儲存之所有資料列的作業 (例如修改結構描述) 或大量作業 (例如大量插入) 時,非篩選連接非常實用。

將資料散發到同盟內的多個實體資料庫時,便會在應用程式層級導入其他需求。因為 Microsoft Azure SQL Database 不支援多個資料庫之間的分散式查詢,所以您必須改為實作可在應用程式內執行這些作業的邏輯。例如,若要執行從同盟資料表選取 *,您可能會執行以下作業:

  1. 使用同盟金鑰所涵蓋之範圍的低值連接到同盟。例如,USE FEDERATION customerfederation (customer_id=1) WITH RESET, FILTERING=OFF。

  2. 選取 * 可傳回此同盟成員內包含的同盟資料表資料列,然後將結果儲存在記憶體中。

  3. 查詢 sys.federation_member_distributions (SQL Database) 來判斷下一個同盟成員的 range_low 值。

  4. 使用 range_low 值連接到同盟。例如,USE FEDERATION customerfederation (customer_id=100) WITH RESET, FILTERING=OFF。

  5. 選取 * 可傳回此同盟成員內包含��資料列,然後與之前查詢的結果儲存在一起。

  6. 重複步驟 3-5,直到 sys.federation_member_distributions 中沒有任何項目的 range_low 值高於目前當做同盟金鑰值使用的值為止。

查詢每一個個別成員的程序可以平行執行,這樣可能會減少彙總資料以及將資料傳回應用程式使用者所花的時間。

另請參閱

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2015 Microsoft