Kueri multi-pecahan menggunakan alat database elastis

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

  1. RangeShardMap Dapatkan (Java, .NET) atau ListShardMap (Java, .NET) menggunakan metode TryGetRangeShardMap (Java, .NET), metode TryGetListShardMap (Java, .NET), atau metode GetShardMap (Java, .NET). Lihat Membuat ShardMapManager dan Dapatkan RangeShardMap atau ListShardMap.
  2. Buat MultiShardConnection objek (Java, .NET).
  3. Buat MultiShardStatement atau MultiShardCommand (Java, .NET).
  4. Atur CommandText property (Java, .NET) ke perintah T-SQL.
  5. Jalankan perintah dengan memanggil metode ExecuteQueryAsync atau ExecuteReader (Java, .NET).
  6. Lihat hasilnya menggunakan MultiShardResultSet atau MultiShardDataReader kelas (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.

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.