Sayfalandırma - Cosmos DB'de sorgu dili (Azure ve Fabric)

Cosmos DB'de (Azure ve Fabric) sorgularda birden çok sonuç sayfası olabilir. Bu belgede Cosmos DB'nin sorgu altyapısının sorgu sonuçlarını birden çok sayfaya bölmeye karar vermek için kullandığı ölçütler açıklanmaktadır. İsteğe bağlı olarak, birden çok sayfaya yayılan sorgu sonuçlarını yönetmek için devamlılık belirteçlerini kullanabilirsiniz.

Sorgu yürütmeleri

Bazen sorgu sonuçları birden çok sayfaya bölünür. Ayrı bir sorgu yürütmesi her sayfanın sonuçlarını oluşturur. Sorgu sonuçları tek bir yürütmede döndürülemiyorsa Cosmos DB sonuçları otomatik olarak birden çok sayfaya böler.

öğesini ayarlayarak MaxItemCountsorgu tarafından döndürülen en fazla öğe sayısını belirtebilirsiniz. MaxItemCount istek başına belirtilir ve sorgu altyapısına bu sayıda veya daha az öğe döndürmesini söyler. Sorgu yürütme başına sonuç sayısına sınır getirmek istemiyorsanız olarak ayarlayabilirsiniz MaxItemCount-1 .

Ayrıca, sorgu altyapısının sorgu sonuçlarını birden çok sayfaya bölmesi gerekebilecek başka nedenler de vardır. Bu nedenler şunlardır:

  • Kapsayıcı kısıtlandı ve daha fazla sorgu sonucu döndürmek için kullanılabilir istek birimi (RU) yoktu
  • Sorgu yürütmenin yanıtı çok büyük
  • Sorgu yürütme süresi çok uzundu
  • Sorgu altyapısının ek yürütmelerle sonuç döndürmesi daha verimliydi

Sorgu yürütme başına döndürülen öğe sayısı 'MaxItemCount' değerinden küçük veya buna eşittir. Ancak, diğer ölçütler sorgunun döndürebileceği sonuç sayısını sınırlandırmış olabilir. Aynı sorguyu birden çok kez yürütürseniz, sayfa sayısı sabit olmayabilir. Örneğin, bir sorgu kısıtlanırsa sayfa başına daha az kullanılabilir sonuç olabilir ve bu da sorgunun ek sayfaları olduğu anlamına gelir. Bazı durumlarda sorgunuz boş bir sonuç sayfası döndürebilir.

Birden çok sonuç sayfasını işleme

Sorgu sonuçlarının doğru olmasını sağlamak için tüm sayfalarda ilerlemeniz gerekir. Ek sayfa kalmayıncaya kadar sorgu yürütmeye devam etmeniz gerekir.

Birden çok sayfaya sahip sorgulardan sonuçları işlemeye yönelik bazı örnekler aşağıda verilmiştir:

Devamlılık belirteçleri

.NET SDK ve Java SDK'sında, isteğe bağlı olarak devamlılık belirteçlerini sorgunuzun ilerleme durumu için yer işareti olarak kullanabilirsiniz. Cosmos DB sorgu yürütmeleri sunucu tarafında durum bilgisi yoktur ve devamlılık belirteci kullanılarak herhangi bir zamanda sürdürülebilir.

Önemli

Python SDK: Bölümler arası sorgular için Devamlılık belirteçleri akışla aktarılabilir sorgular için desteklenir (örneğin, SELECT * FROM c WHERE ...). Bölümler arası sorguları toplama (sıralama, sayma, ayrı) devamlılık belirteçlerini desteklemez. Bölüm anahtarı seçenekler nesnesinde belirtilmelidir.

Devamlılık belirteçlerini kullanmaya yönelik bazı örnekler aşağıda verilmiştir:

Sorgu bir devamlılık belirteci döndürürse ek sorgu sonuçları vardır.

Cosmos DB'nin REST API'sinde devamlılık belirteçlerini üst bilgiyle x-ms-continuation yönetebilirsiniz. .NET veya Java SDK'sı ile sorgulamada olduğu gibi, x-ms-continuation yanıt üst bilgisi boş değilse, sorgunun ek sonuçları olduğu anlamına gelir.

Aynı SDK sürümünü kullandığınız sürece devamlılık belirteçlerinin süresi hiçbir zaman dolmaz. İsteğe bağlı olarak devamlılık belirtecinin boyutunu kısıtlayabilirsiniz. Kapsayıcınızdaki veri miktarından veya fiziksel bölüm sayısından bağımsız olarak sorgular tek bir devamlılık belirteci döndürür.

Ile sorgular GROUP BY için devamlılık belirteçleri kullanamazsınız veya DISTINCT bu sorgular önemli miktarda durum depolamayı gerektireceğinden. DISTINCT sorguları için, sorguya ORDER BY eklerseniz devamlılık belirteçlerini kullanabilirsiniz.

Devamlılık belirteci kullanabilen bir sorgu DISTINCT örneği aşağıda verilmiştir:

SELECT DISTINCT VALUE
    e.name
FROM
    employees e
ORDER BY
    e.name