Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:Azure SQL Database
Gambaran Umum
Dengan Peluasan skala dengan Azure SQL Database, Anda dapat membuat solusi database terpecah. Kueri multi-pecahan digunakan untuk tugas seperti pengumpulan/pelaporan data yang mengharuskan untuk menjalankan kueri yang membentang di beberapa pecahan. (Ini berlawanan dengan perutean tergantung data,yang melakukan semua pekerjaan pada satu shard.)
-
RangeShardMapDapatkan (Java, .NET) atauListShardMap(Java, .NET) menggunakan metodeTryGetRangeShardMap(Java, .NET), metodeTryGetListShardMap(Java, .NET), atau metodeGetShardMap(Java, .NET). Lihat Membuat ShardMapManager dan Dapatkan RangeShardMap atau ListShardMap. - Buat
MultiShardConnectionobjek (Java, .NET). - Buat
MultiShardStatementatauMultiShardCommand(Java, .NET). - Atur
CommandText property(Java, .NET) ke perintah T-SQL. - Jalankan perintah dengan memanggil metode
ExecuteQueryAsyncatauExecuteReader(Java, .NET). - Lihat hasilnya menggunakan
MultiShardResultSetatauMultiShardDataReaderkelas (Java, .NET).
Contoh
Kode berikut mengilustrasikan penggunaan kueri multi-shard menggunakan ShardMap tertentu bernama myShardMap.
using (MultiShardConnection conn = new MultiShardConnection(myShardMap.GetShards(), myShardConnectionString))
{
using (MultiShardCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT c1, c2, c3 FROM ShardedTable";
cmd.CommandType = CommandType.Text;
cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
cmd.ExecutionPolicy = MultiShardExecutionPolicy.PartialResults;
using (MultiShardDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
var c1Field = sdr.GetString(0);
var c2Field = sdr.GetFieldValue<int>(1);
var c3Field = sdr.GetFieldValue<Int64>(2);
}
}
}
}
Perbedaan utama adalah pembangunan koneksi multi-pecahan. Di mana SqlConnection beroperasi pada database individual, MultiShardConnection mengambil kumpulan pecahan sebagai inputnya. Isi koleksi pecahan dari peta pecahan. Kueri kemudian dijalankan pada kumpulan pecahan menggunakan UNION ALL semantik untuk merakit satu hasil keseluruhan. Secara opsional, nama shard tempat baris berasal dapat ditambahkan ke output menggunakan properti pada ExecutionOptions perintah .
Perhatikan panggilan ke myShardMap.GetShards(). Metode ini mengambil semua pecahan dari peta shard dan menyediakan cara mudah untuk menjalankan kueri di semua database yang relevan. Koleksi komponen untuk kueri multi-komponen dapat disempurnakan lebih mendalam dengan melakukan kueri LINQ pada koleksi yang dihasilkan dari panggilan ke myShardMap.GetShards(). Dikombinasikan dengan kebijakan hasil parsial, kemampuan saat ini dalam kueri multi-pecahan telah dirancang untuk bekerja dengan baik untuk puluhan hingga ratusan pecahan.
Batasan kueri multi-pecahan saat ini adalah kurangnya validasi untuk pecahan dan pecahan yang dikueri. Meskipun perutean tergantung data memverifikasi bahwa pecahan yang diberikan adalah bagian dari shard map pada saat kueri, kueri multi-pecahan tidak melakukan pemeriksaan ini. Hal ini dapat menyebabkan kueri multi-pecahan berjalan pada database yang telah dihapus dari peta pecahan.
Kueri multi-pecahan dan operasi split-merge
Kueri multi-pecahan tidak memverifikasi apakah shardlet pada database yang dikueri berpartisipasi dalam operasi split-merge yang sedang berlangsung. (Lihat Memindahkan data antara database cloud yang diskalakan.) Ini dapat menyebabkan inkonsistensi di mana baris dari shardlet yang sama muncul di beberapa database dalam kueri multi-shard yang sama. Waspadai keterbatasan ini dan pertimbangkan untuk menguras operasi split-merge yang sedang berlangsung dan perubahan pada peta shard saat melakukan kueri multi-pecahan.
Konten terkait
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.