Kueri multi-pecahan menggunakan alat database elastis
Berlaku untuk: Azure SQL Database
Gambaran Umum
Dengan alat Elastic 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.)
- Dapatkan RangeShardMap (Java, .NET)atau ListShardMap (Java, .NET) dengan menggunakan metode TryGetRangeShardMap (Java, .NET), tryGetListShardMap (Java, .NET), atau Metode GetShardMap (Java, .NET). Lihat Membuat ShardMapManager dan Dapatkan RangeShardMap atau ListShardMap.
- Buat objek MultiShardConnection (Java, .NET).
- Buat MultiShardStatement atau MultiShardCommand (Java, .NET).
- Atur properti CommandText (Java, .NET)ke perintah T-SQL.
- Jalankan perintah dengan memanggil metode ExecuteQueryAsync atau ExecuteReader (Java, .NET).
- Lihat hasil menggunakan kelas MultiShardResultSet atau MultiShardDataReader (Java, .NET).
Contoh
Kode berikut mengilustrasikan penggunaan kueri multi-pecahan menggunakan ShardMap 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. Jika SqlConnection beroperasi pada database individu, MultiShardConnection mengambil kumpulan pecahan sebagai inputnya. Isi koleksi pecahan dari peta pecahan. Kueri kemudian dieksekusi pada kumpulan pecahan menggunakan semantik UNION ALL untuk mengumpulkan satu hasil keseluruhan. Secara opsional, nama pecahan tempat baris berasal dapat ditambahkan ke output menggunakan properti ExecutionOptions pada 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. Kumpulan pecahan untuk kueri multi-pecahan dapat disempurnakan lebih lanjut dengan melakukan kueri LINQ atas koleksi yang dikembalikan 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 Penskalaan menggunakan alat split-merge Elastic Database.) Ini dapat menyebabkan inkonsistensi di mana baris dari shardlet yang sama menunjukkan untuk beberapa database dalam kueri multi-pecahan 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.