Menambahkan shard menggunakan alat Database Elastis

Berlaku untuk:Azure SQL Database

Untuk menambahkan shard untuk rentang atau kunci baru

Aplikasi sering perlu menambahkan shard baru untuk menangani data yang diharapkan dari kunci baru atau rentang kunci, untuk peta shard yang sudah ada. Misalnya, aplikasi yang dipecah oleh ID Penyewa mungkin perlu membuat shard baru untuk penyewa baru, atau data yang dipecah setiap bulan mungkin memerlukan shard baru yang disediakan sebelum awal setiap bulan baru.

Jika rentang nilai kunci baru belum menjadi bagian dari pemetaan yang ada, Anda dapat menambahkan shard baru dan mengaitkan kunci atau rentang baru ke shard tersebut.

Contoh: menambahkan pecahan dan jangkauannya ke peta pecahan yang ada

Sampel ini menggunakan metode TryGetShard (Java, .NET) the CreateShard (Java, .NET), CreateRangeMapping (Java, .NET, dan membuat instans kelas ShardLocation (Java, .NET). Dalam sampel di bawah ini, database bernama sample_shard_2 dan semua objek skema yang diperlukan di dalamnya telah dibuat untuk menahan rentang [300, 400).

// sm is a RangeShardMap object.
// Add a new shard to hold the range being added.
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer, "sample_shard_2"));  
}

// Create the mapping and associate it with the new shard
sm.CreateRangeMapping(new RangeMappingCreationInfo<long>
                            (new Range<long>(300, 400), shard2, MappingStatus.Online));

Untuk versi .NET, Anda juga bisa menggunakan PowerShell sebagai alternatif untuk membuat Pengelola Peta Shard baru. Contoh tersedia di sini.

Untuk menambahkan shard untuk bagian kosong dari rentang yang sudah ada

Dalam beberapa keadaan, Anda mungkin telah memetakan rentang ke shard dan mengisinya sebagian dengan data, tetapi Anda sekarang ingin data yang akan datang diarahkan ke shard yang berbeda. Misalnya, Anda dapat memecah menurut rentang hari dan telah mengalokasikan 50 hari ke shard, tetapi pada hari ke-24, Anda ingin data di masa mendatang mendarat di pecahan yang berbeda. Alat split-merge database elastis dapat melakukan operasi ini, tetapi jika pergerakan data tidak diperlukan (misalnya, data untuk rentang hari [25, 50), yaitu, hari ke-25 termasuk hingga 50 eksklusif, belum ada) Anda dapat melakukan ini sepenuhnya menggunakan API Manajemen Peta Shard secara langsung.

Contoh: memisahkan rentang dan menetapkan bagian kosong ke shard yang baru ditambahkan

Database bernama "sample_shard_2" dan semua objek skema yang diperlukan di dalamnya telah dibuat.

// sm is a RangeShardMap object.
// Add a new shard to hold the range we will move
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer,"sample_shard_2"));  
}

// Split the Range holding Key 25
sm.SplitMapping(sm.GetMappingForKey(25), 25);

// Map new range holding [25-50) to different shard:
// first take existing mapping offline
sm.MarkMappingOffline(sm.GetMappingForKey(25));

// now map while offline to a different shard and take online
RangeMappingUpdate upd = new RangeMappingUpdate();
upd.Shard = shard2;
sm.MarkMappingOnline(sm.UpdateMapping(sm.GetMappingForKey(25), upd));

Penting

Gunakan teknik ini hanya jika Anda yakin bahwa rentang untuk pemetaan yang diperbarui kosong. Metode di atas tidak memeriksa data untuk rentang yang dipindahkan, jadi sebaiknya Anda menyertakan cek masuk dalam kode. Jika baris ada dalam rentang yang dipindahkan, distribusi data aktual tidak akan cocok dengan peta shard yang diperbarui. Gunakan alat pisah-gabung untuk melakukan operasi sebagai gantinya dalam kasus ini.

Sumber daya tambahan

Belum menggunakan alat database elastis? Lihat Panduan Memulai kami. Jika memiliki pertanyaan, hubungi kami di halaman pertanyaan Tanya Jawab Microsoft untuk SQL Database dan untuk permintaan fitur, tambahkan ide-ide baru atau ambil suara terbanyak untuk ide yang sudah ada di forum umpan balik SQL Database.