Melakukan migrasi database yang sudah ada untuk peluasan skala

Berlaku untuk:Azure SQL Database

Penting

Kueri elastis dalam mode manajer peta shard (pemartisian horizontal), menggunakan EXTERNAL DATA SOURCE jenis SHARD_MAP_MANAGER, mencapai akhir dukungan pada 31 Maret 2027. Setelah tanggal ini, beban kerja yang ada akan terus berfungsi tetapi tidak akan lagi menerima dukungan, dan pembuatan sumber data eksternal baru jenis SHARD_MAP_MANAGER tidak akan lagi dimungkinkan. Untuk opsi migrasi, lihat Panduan migrasi dari mode manajer peta shard kueri elastis.

Kelola database pecahan skala yang ada dengan mudah menggunakan alat (seperti Membangun database cloud yang dapat diskalakan). Pertama-tama konversi kumpulan database yang ada untuk menggunakan pengelola peta shard.

Gambaran Umum

Untuk memigrasikan database dengan sharding yang ada:

  1. Siapkan database pengelola peta shard.
  2. Buat peta shard.
  3. Siapkan shard individu.
  4. Tambahkan pemetaan ke peta shard.

Teknik-teknik ini dapat diimplementasikan menggunakan pustaka klien .NET Framework, atau skrip PowerShell yang ditemukan di Azure SQL Database - skrip alat Elastic Database. Contoh di sini menggunakan skrip PowerShell.

Untuk informasi selengkapnya tentang ShardMapManager, lihat Manajemen peta Shard. Untuk gambaran umum alat Elastic Database, lihat Gambaran umum fitur Elastic Database.

Menyiapkan database pengelola peta shard

Pengelola peta shard adalah database khusus yang berisi data untuk mengelola database yang diskalakan. Anda dapat menggunakan database yang sudah ada atau membuat database baru. Database yang bertindak sebagai pengelola peta shard tidak boleh database yang sama dengan shard. Skrip PowerShell tidak membuat database untuk Anda.

Langkah 1: Buat manajer peta shard

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

Mengambil pengelola peta shard

Setelah dibuat, Anda dapat mengambil manajer peta shard dengan cmdlet ini. Langkah ini diperlukan setiap kali Anda perlu menggunakan objek 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>'

Langkah 2: Buat peta shard

Pilih tipe peta shard untuk dibuat. Pilihan tergantung pada arsitektur database:

  1. Penyewa tunggal per database (Untuk istilah, lihat glosarium.)
  2. Beberapa penyewa per database (dua jenis):
    1. Pemetaan daftar
    2. Pemetaan rentang

Untuk model penyewa tunggal, buat peta shard pemetaan daftar. Model penyewa tunggal menetapkan satu database per penyewa. Ini adalah model yang efektif untuk pengembang SaaS karena menyederhanakan manajemen peta shard.

Diagram pemetaan daftar.

Model multipenyewa menetapkan beberapa penyewa ke database individual (dan Anda dapat mendistribusikan grup penyewa di beberapa database). Gunakan model ini ketika Anda memperkirakan setiap penyewa memiliki kebutuhan data yang kecil. Dalam model ini, gunakan rentang penyewa ke database menggunakan pemetaan rentang.

Diagram pemetaan rentang.

Atau Anda dapat menerapkan model database multipenyewa menggunakan pemetaan daftar untuk menetapkan beberapa penyewa ke database individual. Misalnya, DB1 digunakan untuk menyimpan informasi tentang penyewa ID 1 dan 5, dan DB2 menyimpan data untuk penyewa 7 dan penyewa 10.

Diagram beberapa penyewa pada DB tunggal.

Berdasarkan pilihan Anda, pilih salah satu opsi berikut:

Opsi 1: Membuat peta shard untuk pemetaan daftar

Buat peta shard menggunakan objek ShardMapManager.

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

Opsi 2: Membuat peta shard untuk pemetaan rentang

Untuk menggunakan pola pemetaan ini, nilai ID penyewa (tenant ID) harus berupa rentang berkelanjutan, dan diperbolehkan ada celah dalam rentang dengan mengabaikan rentang tersebut saat membuat database.

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

Opsi 3: Pemetaan daftar pada database individual

Menyiapkan pola ini juga memerlukan pembuatan peta daftar seperti yang ditunjukkan pada langkah 2, opsi 1.

Langkah 3: Siapkan pecahan individu

Tambahkan setiap shard (database) ke manajer peta shard. Ini menyiapkan database individual untuk menyimpan informasi pemetaan. Jalankan metode ini pada setiap shard. $ShardMap adalah peta fragmen yang dibuat pada langkah 2.

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

Langkah 4: Menambahkan pemetaan

Penambahan pemetaan tergantung pada jenis peta pecahan yang Anda buat. Jika Anda membuat peta daftar, Anda menambahkan pemetaan daftar. Jika Anda membuat peta rentang, Anda menambahkan pemetaan daftar.

Opsi 1: Memetakan data untuk pemetaan daftar

Petakan data dengan menambahkan pemetaan daftar untuk setiap penyewa. Gunakan contoh skrip PowerShell berikut untuk membuat pemetaan dan mengaitkannya dengan shard baru.

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

Opsi 2: Memetakan data untuk pemetaan rentang

Tambahkan pemetaan rentang untuk semua rentang ID penyewa - asosiasi database. Gunakan contoh skrip PowerShell berikut untuk membuat pemetaan dan mengaitkannya dengan shard baru.

# Create the mapping 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>'

Opsi 4 opsi 3: Petakan data untuk beberapa penyewa pada database individual

Untuk setiap penyewa, jalankan Add-ListMapping cmdlet (opsi 1).

Periksa pemetaan

Informasi tentang pecahan yang ada dan pemetaan yang terkait dengannya dapat dikueri menggunakan skrip sampel PowerShell berikut:

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

Ringkasan

Setelah menyelesaikan penyetelan, Anda bisa mulai menggunakan pustaka klien Elastic Database. Anda juga bisa menggunakan perutean tergantung data dankueri multi-shard.