移轉現有的資料庫以橫向擴展

適用於:Azure SQL Database

使用工具輕鬆管理現有的橫向擴展分區資料庫 (例如彈性資料庫用戶端程式庫)。 首先,轉換現有的資料庫集,以使用分區對應管理員

概觀

若要移轉現有的分區資料庫:

  1. 準備分區對應管理員資料庫
  2. 建立分區對應。
  3. 準備個別分區。
  4. 將對應新增至分區對應。

您可以使用 .NET Framework 用戶端程式庫Azure SQL Database - 彈性資料庫工具指令碼中找到的 PowerShell 指令碼來實作這些技術。 此處的範例會使用 PowerShell 指令碼。

如需有關 ShardMapManager 的詳細資訊,請參閱分區對應管理。 如需彈性資料庫工具的概觀,請參閱彈性資料庫功能概觀

準備分區對應管理員資料庫

分區對應管理員是一個特殊的資料庫,其中包含管理橫向擴展資料庫的資料。 您可以使用現有的資料庫,或建立新的資料庫。 充當分區對應管理員的資料庫不得與分區的資料庫相同。 PowerShell 指令碼不會為您建立資料庫。

步驟 1:建立分區對應管理員

# Create a shard map manager
New-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'
#<server_name> and <smm_db_name> are the server name and database name
# for the new or existing database that should be used for storing
# tenant-database mapping information.

若要擷取分區對應管理員

建立之後,您可以使用此 Cmdlet 來擷取分區對應管理員。 每次您需要使用 ShardMapManager 物件時,都需要此步驟。

# Try to get a reference to the Shard Map Manager  
$ShardMapManager = Get-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'

步驟 2:建立分區對應

選取要建立的分區對應類型。 請依據資料庫結構進行選擇︰

  1. 每個資料庫的單一租用戶 (如需了解詞彙,請參閱詞彙)。
  2. 每個資料庫的多個租用戶 (兩種類型):
    1. 清單對應
    2. 範圍對應

針對單一租用戶模型,建立清單對應分區對應。 單一租用戶模型會指派每個租用戶一個資料庫。 這是適用於 SaaS 開發人員的有效模型,因其可簡化管理。

List mapping

多租用戶模型會將數個租用戶指派給個別資料庫 (而且您可以跨多個資料庫散發租用戶的群組)。 預期每個租用戶有小型資料需求時,請使用此模型。 在此模型中,使用範圍對應將某範圍的租用戶指派給資料庫。

Range mapping

或者,您可以使用「清單對應」來實作多租用戶資料庫模型,以將多個租用戶指派給個別資料庫。 例如,DB1 是用來儲存租用戶 ID 1 和 5 的相關資訊,而 DB2 是用來儲存租用戶 7 和租用戶 10 的資料。

Multiple tenants on single DB

根據您的選擇,選擇下列其中一個選項:

選項 1:建立清單對應的分區對應

使用 ShardMapManager 物件建立分區對應。

# $ShardMapManager is the shard map manager object
$ShardMap = New-ListShardMap -KeyType $([int]) -ListShardMapName 'ListShardMap' -ShardMapManager $ShardMapManager

選項 2:建立範圍對應的分區對應

若要使用此對應模式,租用戶 ID 值必須是連續範圍,而且在建立資料庫時略過範圍,就可以接受範圍中存在間隙。

# $ShardMapManager is the shard map manager object
# 'RangeShardMap' is the unique identifier for the range shard map.  
$ShardMap = New-RangeShardMap -KeyType $([int]) -RangeShardMapName 'RangeShardMap' -ShardMapManager $ShardMapManager

選項 3:列出個別資料庫上的對應

設定此模式還需要建立清單對應,如步驟 2,選項 1 所示。

步驟 3:準備個別分區

將每個分區 (資料庫) 新增至分區對應管理員。 這會準備個別資料庫來存放對應資訊。 在每個分區上執行此方法。

Add-Shard -ShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
# The $ShardMap is the shard map created in step 2.

步驟 4:新增對應

對應的新增取決於您建立的分區對應種類。 如果您已建立清單對應,可新增清單對應。 如果您已建立範圍對應,可新增範圍對應。

選項 1:針對清單對應的資料

新增每個租用戶的清單對應以對應資料。

# Create the mappings and associate it with the new shards
Add-ListMapping -KeyType $([int]) -ListPoint '<tenant_id>' -ListShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

選項 2:對應範圍對應的資料

新增所有租用戶 ID 範圍的範圍對應 - 資料庫關聯:

# Create the mappings and associate it with the new shards
Add-RangeMapping -KeyType $([int]) -RangeHigh '5' -RangeLow '1' -RangeShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

步驟 4 選項 3:對應個別資料庫上多個租用戶的資料

針對每個租用戶,執行 Add-ListMapping (選項 1)。

檢查對應

您可以使用下列命令來查詢現有分區及其關聯的對應的相關資訊:

# List the shards and mappings
Get-Shards -ShardMap $ShardMap
Get-Mappings -ShardMap $ShardMap

摘要

一旦完成設定,即可開始使用彈性資料庫用戶端程式庫。 您還可以使用資料相依路由多分區查詢

下一步

Azure 彈性資料庫工具指令碼中取得 PowerShell 指令碼。

彈性資料庫工具用戶端程式庫可在 GitHub 上取得,網址是:Azure/elastic-db-tools

使用分割合併工具,將資料移至多租用戶模型,或從多租用戶模型移至單一租用戶模型。 請參閱分割合併工具

其他資源

如需多租用戶軟體即服務 (SaaS) 資料庫應用程式的常見資料架構模式相關資訊,請參閱使用 Azure SQL Database 設計多租用戶 SaaS 應用程式的模式

問題和功能要求

如有疑問,請使用 Microsoft Q&A 的 SQL Database 問題頁面;如有功能要求,請將其新增至 SQL Database 意見反應論壇