Elastik veritabanı araçlarını kullanarak çok parçalı sorgulama

Şunlar için geçerlidir: Azure SQL Veritabanı

Genel bakış

Elastik Veritabanı araçlarıyla parçalı veritabanı çözümleri oluşturabilirsiniz. Çok parçalı sorgulama , çeşitli parçalar arasında uzanan bir sorgu çalıştırmayı gerektiren veri toplama/raporlama gibi görevler için kullanılır. (Bunu , tüm işleri tek bir parça üzerinde gerçekleştiren veriye bağımlı yönlendirmeyle karşıtlık yapın.)

  1. TryGetRangeShardMap (Java, .NET), TryGetListShardMap (Java, .NET) veya GetShardMap (Java, .NET) yöntemini kullanarak RangeShardMap (Java, .NET) veya ListShardMap (Java, .NET) alın. Bkz . ShardMapManager Oluşturma ve RangeShardMap veya ListShardMap Alma.
  2. MultiShardConnection (Java, .NET) nesnesi oluşturun.
  3. MultiShardStatement veya MultiShardCommand (Java, .NET) oluşturun.
  4. CommandText özelliğini (Java, .NET) T-SQL komutu olarak ayarlayın.
  5. ExecuteQueryAsync veya ExecuteReader (Java, .NET) yöntemini çağırarak komutunu yürütür.
  6. MultiShardResultSet veya MultiShardDataReader (Java, .NET) sınıfını kullanarak sonuçları görüntüleyin.

Örnek

Aşağıdaki kod, myShardMap adlı belirli bir ShardMap kullanılarak çok parçalı sorgu kullanımını göstermektedir.

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);
            }
        }
    }
}

Önemli bir fark, çok parçalı bağlantıların oluşturulmasıdır. SqlConnection tek bir veritabanında çalıştığında, MultiShardConnection girişi olarak bir parça koleksiyonu alır. Parça eşlemesinden parça koleksiyonunu doldurun. Sorgu daha sonra tek bir genel sonucu bir araya getirmek için UNION ALL semantiği kullanılarak parça koleksiyonunda yürütülür. İsteğe bağlı olarak, satırın kaynaklandığı parçanın adı komutundaki ExecutionOptions özelliği kullanılarak çıkışa eklenebilir.

myShardMap.GetShards() çağrısına dikkat edin. Bu yöntem, parça eşlemesinden tüm parçaları alır ve tüm ilgili veritabanlarında sorgu çalıştırmanın kolay bir yolunu sağlar. Çok parçalı sorgu için parça koleksiyonu, myShardMap.GetShards() çağrısından döndürülen koleksiyon üzerinde LINQ sorgusu gerçekleştirilerek daha da iyileştirilebilir. Kısmi sonuç ilkesiyle birlikte, çok parçalı sorgudaki geçerli özellik yüzlerce parçaya kadar iyi çalışacak şekilde tasarlanmıştır.

Çok parçalı sorgulamayla ilgili bir sınırlama, şu anda sorgulanan parçalar ve parçacıklar için doğrulama olmamasıdır. Verilere bağımlı yönlendirme, sorgu sırasında belirli bir parçanın parça eşlemesinin bir parçası olduğunu doğrulasa da, çok parçalı sorgular bu denetimi gerçekleştirmez. Bu, parça eşlemesinden kaldırılan veritabanlarında çalışan çok parçalı sorgulara yol açabilir.

Çok parçalı sorgular ve bölünmüş birleştirme işlemleri

Çok parçalı sorgular, sorgulanan veritabanındaki parçaların devam eden bölünmüş birleştirme işlemlerine katılıp katılmadığını doğrulamaz. (Bkz. Elastik Veritabanı bölünmüş birleştirme aracını kullanarak ölçeklendirme.) Bu, aynı parçadan satırların aynı çok parçalı sorguda birden çok veritabanı için gösterildiği tutarsızlıklara yol açabilir. Bu sınırlamalara dikkat edin ve çok parçalı sorgular gerçekleştirirken devam eden bölünmüş birleştirme işlemlerini ve parça eşlemesinde yapılan değişiklikleri boşaltmayı göz önünde bulundurun.

Elastik veritabanı araçlarını henüz kullanmıyor musunuz? Başlarken Kılavuzumuza göz atın. Sorular için, SQL Veritabanı ve özellik istekleri için Microsoft Soru-Cevap soru sayfasından bizimle iletişime geçin, yeni fikirler ekleyin veya SQL Veritabanı geri bildirim forumunda mevcut fikirler için oy verin.