Azure Cosmos DB’ye Azure Stream Analytics çıkışı

Azure Stream Analytics, Azure Cosmos DB'ye JSON biçiminde veri çıkışı yapabilir. Yapılandırılmamış JSON verilerinde veri arşivlemeyi ve düşük gecikme süreli sorguları etkinleştirir. Bu makale, bu yapılandırmayı (Stream Analytics'i Cosmos DB'ye) uygulamaya yönelik bazı en iyi yöntemleri kapsar. Azure Cosmos DB'yi bilmiyorsanız başlamak için Azure Cosmos DB belgelerine bakın.

Not

  • Şu anda Stream Analytics yalnızca SQL API aracılığıyla Azure Cosmos DB bağlantısını destekler. Diğer Azure Cosmos DB API'leri henüz desteklenmiyor. Stream Analytics'i diğer API'lerle oluşturulan Azure Cosmos DB hesaplarına işaret ederseniz veriler düzgün depolanmayabilir.
  • Çıktı olarak Azure Cosmos DB kullanırken işinizi uyumluluk düzeyi 1.2 olarak ayarlamanızı öneririz.

Çıkış hedefi olarak Azure Cosmos DB'nin temelleri

Stream Analytics'teki Azure Cosmos DB çıkışı, akış işleme sonuçlarınızı Azure Cosmos DB kapsayıcılarınıza JSON çıkışı olarak yazmanızı sağlar. Stream Analytics veritabanınızda kapsayıcı oluşturmaz. Bunun yerine, bunları önceden oluşturmanız gerekir. Daha sonra Azure Cosmos DB kapsayıcılarının faturalama maliyetlerini denetleyebilirsiniz. Ayrıca Azure Cosmos DB API'lerini kullanarak kapsayıcılarınızın performansını, tutarlılığını ve kapasitesini doğrudan ayarlayabilirsiniz. Aşağıdaki bölümlerde Azure Cosmos DB için kapsayıcı seçeneklerinden bazıları ayrıntılı olarak açıklanmaktadır.

Tutarlılık, kullanılabilirlik ve gecikme süresini ayarlama

Azure Cosmos DB, uygulama gereksinimlerinizi karşılamak için veritabanı ve kapsayıcılarda ince ayarlamalar yapmanıza ve tutarlılık, kullanılabilirlik, gecikme süresi ve aktarım hızı arasında dengeler oluşturmanıza olanak tanır.

Senaryonuzun okuma ve yazma gecikme süresine karşı hangi okuma tutarlılığı düzeylerine ihtiyaç duyduğuna bağlı olarak, veritabanı hesabınızda bir tutarlılık düzeyi seçebilirsiniz. Kapsayıcıdaki İstek Birimlerinin (RU) ölçeğini artırarak aktarım hızını geliştirebilirsiniz. Ayrıca Azure Cosmos DB varsayılan olarak kapsayıcınıza yapılan her CRUD işleminde zaman uyumlu dizin oluşturmayı etkinleştirir. Bu seçenek, Azure Cosmos DB'de yazma/okuma performansını denetlemek için başka bir yararlı seçenektir. Daha fazla bilgi için Veritabanınızı ve sorgu tutarlılığı düzeylerinizi değiştirme makalesini gözden geçirin.

Stream Analytics'ten Upserts

Azure Cosmos DB ile Stream Analytics tümleştirmesi, kapsayıcınıza belirli bir Belge Kimliği sütununa göre kayıt eklemenize veya güncelleştirmenize olanak tanır. Bu işleme upsert de denir. Stream Analytics iyimser bir upsert yaklaşımı kullanır. Güncelleştirmeler yalnızca bir ekleme belge kimliği çakışmasıyla başarısız olduğunda gerçekleşir.

Uyumluluk düzeyi 1.0 ile Stream Analytics bu güncelleştirmeyi PATCH işlemi olarak gerçekleştirdiğinden belgede kısmi güncelleştirmeleri etkinleştirir. Stream Analytics yeni özellikler ekler veya mevcut bir özelliği artımlı olarak değiştirir. Ancak, JSON belgenizdeki dizi özelliklerinin değerlerinde yapılan değişiklikler dizinin tamamının üzerine yazılmasıyla sonuçlanır. Başka bir ifadeyle dizi birleştirilmeyen bir dizidir.

1.2 ile, belgeyi eklemek veya değiştirmek için upsert davranışı değiştirilir. Uyumluluk düzeyi 1.2 hakkında daha sonraki bölümde bu davranış açıklanmaktadır.

Gelen JSON belgesinde bir kimlik alanı varsa, bu alan otomatik olarak Azure Cosmos DB'de Belge Kimliği sütunu olarak kullanılır. Sonraki yazma işlemleri bu şekilde işlenir ve bu durumlardan birine yol açar:

  • Benzersiz kimlikler eklemeye yol açar.
  • Kimlik olarakayarlanmış yinelenen kimlikler ve Belge Kimliği upsert'e yol açar.
  • Yinelenen kimlikler ve Belge Kimliği ayarlanmadı, ilk belgeden sonra hataya neden olur.

Yinelenen kimliği olanlar da dahil olmak üzere tüm belgeleri kaydetmek istiyorsanız, sorgunuzdaki kimlik alanını yeniden adlandırın (AS anahtar sözcüğünü kullanarak). Azure Cosmos DB'nin Kimlik alanını oluşturmasına veya kimliği başka bir sütunun değeriyle değiştirmesine izin verin (AS anahtar sözcüğünü veya Belge Kimliği ayarını kullanarak).

Azure Cosmos DB'de veri bölümleme

Azure Cosmos DB, iş yükünüz temelinde bölümleri otomatik olarak ölçeklendirir. Bu nedenle verilerinizi bölümleme için sınırsız kapsayıcı kullanmanızı öneririz. Stream Analytics sınırsız kapsayıcıya yazdığında, önceki sorgu adımı veya giriş bölümleme düzeni kadar paralel yazıcı kullanır.

Not

Azure Stream Analytics, bölüm anahtarları en üst düzeyde olan yalnızca sınırsız kapsayıcıyı destekler. Örneğin, /region desteklenir. İç içe bölüm anahtarları (örneğin, /region/name) desteklenmez.

Bölüm anahtarı seçiminize bağlı olarak şu uyarıyı alabilirsiniz:

CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.

Birçok farklı değeri olan ve iş yükünüzü bu değerler arasında eşit bir şekilde dağıtmanıza olanak tanıyan bir bölüm anahtarı özelliği seçmek önemlidir. Bölümlemenin doğal bir yapıtı olarak, aynı bölüm anahtarını içeren istekler tek bir bölümün en yüksek aktarım hızıyla sınırlıdır.

Aynı bölüm anahtarı değerine ait belgelerin depolama boyutu 20 GB ile sınırlıdır ( fiziksel bölüm boyutu sınırı 50 GB'tır). İdeal bölüm anahtarı, sorgularınızda sık sık filtre olarak görünen ve çözümünüzün ölçeklenebilir olduğundan emin olmak için yeterli kardinaliteye sahip olan anahtardır.

Stream Analytics sorguları ve Azure Cosmos DB için kullanılan bölüm anahtarlarının aynı olması gerekmez. Tam paralel topolojiler, PartitionIdStream Analytics sorgusunun bölüm anahtarı olarak Giriş Bölümü anahtarının kullanılmasını önerir, ancak azure Cosmos DB kapsayıcısının bölüm anahtarı için önerilen seçenek bu olmayabilir.

Bölüm anahtarı ayrıca Azure Cosmos DB için saklı yordamlardaki ve tetikleyicilerdeki işlemlerin sınırıdır. İşlemlerde birlikte oluşan belgelerin aynı bölüm anahtarı değerini paylaşması için bölüm anahtarını seçmelisiniz. Azure Cosmos DB'de Bölümleme makalesi, bölüm anahtarı seçme hakkında daha fazla ayrıntı sağlar.

Sabit Azure Cosmos DB kapsayıcıları için Stream Analytics, dolduktan sonra ölçeği artırmanın veya genişletmenin hiçbir yolu yoktur. 10 GB ve 10.000 RU/sn aktarım hızı üst sınırına sahiptir. Sabit bir kapsayıcıdaki verileri sınırsız bir kapsayıcıya (örneğin, en az 1.000 RU/sn ve bölüm anahtarı olan bir kapsayıcı) geçirmek için veri geçiş aracını veya değişiklik akışı kitaplığını kullanın.

Birden çok sabit kapsayıcıya yazma özelliği kullanım dışı bırakılıyor. Stream Analytics işinizin ölçeğini genişletmenizi önermiyoruz.

Uyumluluk düzeyi 1.2 ile geliştirilmiş aktarım hızı

Uyumluluk düzeyi 1.2 ile Stream Analytics, Azure Cosmos DB'ye toplu yazma için yerel tümleştirmeyi destekler. Bu tümleştirme, aktarım hızını en üst düzeye çıkarırken ve azaltma isteklerini verimli bir şekilde işlerken Azure Cosmos DB'ye etkili bir şekilde yazmanızı sağlar.

Geliştirilmiş yazma mekanizması, upsert davranışındaki fark nedeniyle yeni bir uyumluluk düzeyi altında kullanılabilir. Düzeyler 1.2'nin öncesinde olduğunda, upsert davranışı belgeyi eklemek veya birleştirmektir. 1.2 ile, belgeyi eklemek veya değiştirmek için upsert davranışı değiştirilir.

1.2 öncesi düzeylerde Stream Analytics, bölüm anahtarı başına belgeleri Azure Cosmos DB'ye toplu olarak eklemek için özel bir saklı yordam kullanır. Burada, bir toplu iş işlem olarak yazılır. Tek bir kayıt geçici bir hataya (azaltma) çarpsa bile, toplu işin tamamının yeniden denenmiş olması gerekir. Bu davranış, makul azaltmaya sahip senaryoları görece yavaş hale getirir.

Aşağıdaki örnekte aynı Azure Event Hubs girişinden okunan iki özdeş Stream Analytics işi gösterilmektedir. Her iki Stream Analytics işi de tam olarak bir geçiş sorgusuyla bölümlenir ve aynı Azure Cosmos DB kapsayıcılarına yazılır. Soldaki ölçümler, uyumluluk düzeyi 1.0 ile yapılandırılan işten alınmaktadır. Sağdaki ölçümler 1.2 ile yapılandırılır. Azure Cosmos DB kapsayıcısının bölüm anahtarı, giriş olayından gelen benzersiz bir GUID'dir.

Stream Analytics ölçümlerinin karşılaştırmasını gösteren ekran görüntüsü.

Event Hubs'da gelen olay oranı, Azure Cosmos DB kapsayıcılarının (20.000 RU) içeri almak üzere yapılandırıldığından iki kat daha yüksek olduğundan Azure Cosmos DB'de azaltma beklenir. Ancak 1,2 olan iş tutarlı olarak daha yüksek bir aktarım hızıyla (dakika başına çıkış olayları) ve ortalama SU kullanımı %1'in altındadır. Ortamınızda bu fark birkaç faktöre daha bağlıdır. Bu faktörler arasında olay biçimi seçimi, giriş olayı/ileti boyutu, bölüm anahtarları ve sorgu bulunur.

Azure Cosmos DB ölçümlerinin karşılaştırmasını gösteren ekran görüntüsü.

1.2 ile Stream Analytics, Azure Cosmos DB'de kullanılabilir aktarım hızının yüzde 100'ünün kullanımı konusunda daha akıllıdır ve azaltma veya hız sınırlamadan az sayıda yeniden yetki alır. Bu davranış, kapsayıcıda aynı anda çalışan sorgular gibi diğer iş yükleri için daha iyi bir deneyim sağlar. Stream Analytics'in Azure Cosmos DB ile saniye başına 1.000 ila 10.000 ileti için havuz olarak ölçeğini nasıl genişlettiğini görmek istiyorsanız bu Azure örnek projesini deneyin.

Azure Cosmos DB çıkışının aktarım hızı 1.0 ve 1.1 ile aynıdır. Azure Cosmos DB ile Stream Analytics'te uyumluluk düzeyi 1.2 kullanmanızı kesinlikle öneririz.

JSON çıkışı için Azure Cosmos DB ayarları

Stream Analytics'te çıkış olarak Azure Cosmos DB kullanılması aşağıdaki bilgi istemini oluşturur.

Azure Cosmos DB çıkış akışı için bilgi alanlarını gösteren ekran görüntüsü.

Alan Açıklama
Çıktı diğer adı Stream Analytics sorgunuzda bu çıkışa başvurmak için bir diğer ad.
Abonelik Azure aboneliği.
Hesap Kodu Azure Cosmos DB hesabının adı veya uç nokta URI'si.
Hesap anahtarı Azure Cosmos DB hesabının paylaşılan erişim anahtarı.
Veritabanı Azure Cosmos DB veritabanı adı.
Kapsayıcı adı Kapsayıcı adı, örneğin MyContainer. adlı MyContainer bir kapsayıcı bulunmalıdır.
Belge Kimliği isteğe bağlı. Ekleme veya güncelleştirme işlemlerinin temel alınması gereken benzersiz anahtar olarak kullanılan çıkış olaylarındaki sütun adı. Boş bırakırsanız, güncelleştirme seçeneği olmadan tüm olaylar eklenir.

Azure Cosmos DB çıkışını yapılandırdıktan sonra sorguda into deyiminin hedefi olarak kullanabilirsiniz. Azure Cosmos DB çıkışını bu şekilde kullandığınızda, bölüm anahtarının açıkça ayarlanması gerekir.

Çıkış kaydı, Azure Cosmos DB'deki bölüm anahtarından sonra adlı büyük/küçük harfe duyarlı bir sütun içermelidir. Daha fazla paralelleştirme elde etmek için deyimi, aynı sütunu kullanan bir PARTITION BY yan tümcesi gerektirebilir.

Aşağıda örnek bir sorgu verilmişti:

    SELECT TollBoothId, PartitionId
    INTO CosmosDBOutput
    FROM Input1 PARTITION BY PartitionId

Hata işleme ve yeniden deneme

Stream Analytics olayları Azure Cosmos DB'ye gönderirken geçici bir hata, hizmet kullanılamazlığı veya azaltma gerçekleşirse, Stream Analytics işlemi başarıyla tamamlamak için süresiz olarak yeniden denenir. Ancak aşağıdaki hatalar için yeniden deneme denemesi yapmaz:

  • Yetkisiz (HTTP hata kodu 401)
  • NotFound (HTTP hata kodu 404)
  • Yasak (HTTP hata kodu 403)
  • BadRequest (HTTP hata kodu 400)

Genel sorunlar

  1. Koleksiyona benzersiz bir dizin kısıtlaması eklenir ve Stream Analytics'ten alınan çıkış verileri bu kısıtlamayı ihlal eder. Stream Analytics'ten alınan çıktı verilerinin benzersiz kısıtlamaları ihlal etmediğinden veya kısıtlamaları kaldırmadığından emin olun. Daha fazla bilgi için bkz . Azure Cosmos DB'de benzersiz anahtar kısıtlamaları.

  2. Sütun PartitionKey yok.

  3. Sütun Id yok.

Sonraki adımlar