Azure DocumentDB'de Akışı Değiştirme

Değişiklik akışları, veritabanınızdan uygulamanıza akan gerçek zamanlı bir veritabanı değişiklikleri akışıdır. Bu özellik, veritabanı değişikliklerine abone olarak reaktif uygulamalar oluşturmanıza olanak sağlayarak değişiklikleri algılamak için sürekli yoklama gereksinimini ortadan kaldırır.

Note

Azure DocumentDB şu anda tek parçalı kümelerde Değişiklik Akışını desteklemektedir. Yakın gelecekte çok parçalı kümeler için Değişiklik Akışı desteği sağlamak için etkin bir şekilde çalışıyoruz.

Azure DocumentDB, Değişiklik Akışları için 400 MB sistem tarafından yönetilen günlük sınırı uygular. Geçmiş değişiklik olaylarının eksik olmasını önlemek için müşterilerin Değişiklik Akışlarını sürekli işlemesi gerekir. Değişiklik Akışları, 400 MB boyut sınırına sahip sistem tarafından yönetilen günlükleri kullanır. Devam belirteci, günlükten çıkarılan bir değişiklik olayına başvuruyorsa, Değişiklik Akışı bu noktadan devam ettirilemez ve yeniden başlatılması gerekir. Yakın gelecekte genişletilmiş destek için bir önizleme planlıyoruz.

Değişiklik akışlarını etkinleştirme

Azure CLI veya ARM şablonu kullanarak bu özelliği etkinleştirebilir veya devre dışı bırakabilirsiniz. Portal desteği yakında eklenecektir.

CLI aracılığıyla kümede değişiklik akışlarını etkinleştirme adımları

  1. Azure CLI'da oturum açma
az login
  1. Kümenizdeki özellik bayrakları için geçerli ayarları alın. Bu, yeni özelliği eklerken mevcut bayrakları korumanızı sağlar.
az resource show --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Azure DocumentDB cluster>" --api-version 2024-10-01-preview
  1. Özelliği etkinleştirmek için PATCH isteği gönderin.
az resource patch --ids "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>" --api-version 2024-10-01-preview --properties "{\"previewFeatures\": [ \"ChangeStreams\"]}"
  1. Sonucu doğrula:
    • Yanıt yükünün "previewFeatures": ["ChangeStreams"] içerdiğinden emin olun.
    • "Değişiklik akışları bu kümede desteklenmiyor" hatasıyla karşılaşırsanız lütfen bir destek isteği oluşturun.

Değişiklik akışlarını yapılandırma

Bu örnek kod, koleksiyonda exampleCollection değişiklik akışını başlatır ve değişiklikleri sürekli izler. Bir değişiklik algılandığında değişiklik olayını alır ve JSON biçiminde yazdırır.

// Open a change stream
const changeStream = db.exampleCollection.watch();

// Listen for changes
while (changeStream.hasNext()) 
    {
        const change = changeStream.next();
        printjson(change);
    }

Important

değişiklik akışları, imleç açılırken bir özgeçmiş belirteci resumeAfter belirtilerek sürdürülebilir. Bununla birlikte, belirteçle ilişkili işlemi bulmak için yeterli geçmişin olması beklenir. Alanındaki değişiklik akışında _id gözlemlenen belge, devam ettirilebilen belirteci temsil eder.

cursor = db.exampleCollection.watch(resume_after=resume_token)

Değişiklik Akışı ile veritabanı değişikliklerini izleme

Şimdi örnek aracılığıyla değişiklik akışı çıkışını anlayalım.

Bu değişiklik akışı olayında, veritabanındaki koleksiyona insertedexampleCollection yeni bir kayıt eklendiğini cs ve olay ayrıntılarında yeni eklenen belgenin tüm içeriğinin bulunduğunu görüyoruz.

{
  "_id": { "_data": "AeARBpQ/AAAA" }, // "resume_token"
  "operationType": "insert",
  "fullDocument": {
    "_id": { "$oid": "66e6f63e6f49ecaabf794958" },
    "employee_id": "17986",
    "name": "John",
    "position": "Software Engineer",
    "department": "IT",
    "rating": 4
  },
  "ns": { "db": "cs", "coll": "exampleCollection" },
  "documentKey": { "_id": { "$oid": "66e6f63e6f49ecaabf794958" } }
}

Değişiklik Akışı'nda verileri kişiselleştirme

Yapılandırma sırasında bir veya daha fazla işlem hattı aşamasından oluşan bir dizi belirterek değişiklik akışı çıkışınızı özelleştirin. Desteklenen işleçler şunlardır.

  • $addFields
  • $match
  • $project
  • $set
  • $unset

Sınırlamalar

  • Çok parçalı kümedeki değişiklik akışı olayları henüz desteklenmiyor.
  • Geçerli durumdaki bir yük devretme olayından sonra değişiklik akışı imleçlerinin yeniden başlatılması gerekir.
  • Update olayı henüz Güncelleştirme açıklamasını desteklemez.
  • pre-image desteklenmeyen bir seçenektir.
  • $changestream başka bir aşamanın alt aşaması olarak henüz desteklenmiyor.