MongoDB için Azure Cosmos DB API’siyle ilgili yaygın sorunları giderme

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB

Aşağıdaki makalede MongoDB için Azure Cosmos DB kullanılarak yapılan dağıtımlara yönelik yaygın hatalar ve çözümler açıklanmaktadır.

Not

Azure Cosmos DB, MongoDB altyapısını barındırmaz. MongoDB kablo protokolü sürüm 4.0, 3.6'nın bir uygulamasını ve kablo protokolü sürüm 3.2 için eski desteği sağlar. Bu nedenle, bu hatalardan bazıları yalnızca MongoDB için Azure Cosmos DB API'sinde bulunur.

Genel hatalar ve çözümleri

Kod Hata Açıklama Çözüm
2 BadValue Yaygın nedenlerden biri, belirtilen sıralamaya göre öğeye karşılık gelen bir dizin yolunun dışlanması veya sorguya göre sıralamanın, hizmet verebileceği karşılık gelen bir bileşik dizine sahip olmamasıdır. Sorgu, dizine kaydedilmemiş bir alanda sıralama isteğinde bulunur. Denenen sıralama sorgusu için eşleşen bir dizin (veya bileşik dizin) oluşturun.
2 İşlem etkin değil Çok belgeli işlem sabit 5 saniyelik zaman sınırını aştı. Çok belgeli işlemi yeniden deneyin veya çok belgeli işlemin içinde yer alan işlemlerin kapsamını sınırlayarak 5 saniyelik zaman sınırında tamamlanmasını sağlayın.
9 FailedToParse Sağlanan giriş beklenen veya desteklenen biçime uymadığından Cosmos DB sunucusunun parametreyi yorumlayamadığından veya işleyemediğini gösterir. Sorgularınıza yalnızca geçerli ve desteklenen parametrelerin eklendiğinden emin olun.
13 Yetkisiz İsteğin tamamlanması için gerekli izinler yok. Doğru anahtarları kullandığınızdan emin olun.
26 NamespaceNotFound Sorguda başvurulan veritabanı veya koleksiyon bulunamadı. Veritabanı/Koleksiyon adınızın sorgunuzdakiyle bire bir eşleştiğinden emin olun.
50 ExceededTimeLimit İstek 60 saniyelik yürütme zaman aşımı süresini aştı. Bu hatanın birçok nedeni olabilir. Nedenlerden biri, şu anda ayrılmış olan istek birimi kapasitesinin isteği tamamlamak için yeterli olmamasıdır. Bu durum söz konusu koleksiyonun veya veritabanının istek birimlerini artırarak çözülebilir. Diğer durumlarda, büyük bir istek daha küçük isteklere bölünerek bu hatadan kaçınılabilir. Bu hatayı alan yazma işlemini yeniden denemek, yinelenen yazma işlemine neden olabilir.

RU'ları etkilemeden büyük miktarda veriyi silmeye çalışıyorsanız:
- TTL'yi kullanmayı düşünün (Zaman Damgası temelinde): MongoDB için Azure Cosmos DB API'siyle verilerde süre sonu
- Silme işlemini gerçekleştirmek için İmleç/Toplu İş boyutunu kullanın. Tek seferde tek bir belge getirip bir döngü aracılığıyla bunu silebilirsiniz. Bu, üretim uygulamanızı etkilemeden verileri yavaş bir şekilde silmenize yardımcı olur.
61 ShardKeyNotFound İsteğinizdeki belge, koleksiyonun parça anahtarını (Azure Cosmos DB bölüm anahtarı) içermiyor. Koleksiyonun parça anahtarının istekte kullanıldığından emin olun.
66 ImmutableField İstek, sabit bir alanı değiştirmeye çalışıyor "_id" alanları sabittir. İsteğinizin bu alanı veya parça anahtarı alanını güncelleştirmeye çalışmadığından emin olun.
67 CannotCreateIndex Dizin oluşturma isteği tamamlanamıyor. Bir kapsayıcıda en fazla 500 tek alan dizini oluşturulabilir. Bileşik dizinde en fazla sekiz alan bulunabilir (bileşik dizinler 3.6+ sürümünde desteklenir).
112 WriteConflict Çok belgeli işlem çakışan başka bir çok belgeli işlem nedeniyle başarısız oldu Çok belgeli işlemi başarılı olana kadar yeniden deneyin.
115 CommandNotSupported Denenen istek desteklenmiyor. Hatada diğer ayrıntılar sağlanmalıdır. Bu işlev dağıtımlarınız için önemliyse Azure portalında bir destek bileti oluşturun. Azure Cosmos DB ekibi size geri döner.
11000 DuplicateKey Eklediğiniz belgenin parça anahtarı (Azure Cosmos DB bölüm anahtarı) koleksiyonda zaten var veya bir benzersiz dizin alanı kısıtlaması ihlal edildi. Mevcut belgeyi güncelleştirmek için update() işlevini kullanın. Benzersiz dizin alanı kısıtlaması ihlal edildiyse, belgeyi parçada/bölümde henüz var olmayan bir alan değeriyle ekleyin veya güncelleştirin. Bir diğer seçenek de kimlik ve parça anahtarı alanlarının birleşimini içeren bir alan kullanmaktır.
16500 TooManyRequests Kullanılan toplam istek birimi sayısı, koleksiyon için sağlanan istek birimi hızından fazla ve kısıtlanmış. Azure portaldan bir kapsayıcıya veya kapsayıcı kümesine atanan aktarım hızını ölçeklendirmeyi göz önünde bulundurabilir veya işlemi yeniden deneyebilirsiniz. SSR'yi (sunucu tarafı yeniden deneme) etkinleştirirseniz, Azure Cosmos DB bu hata nedeniyle başarısız olan istekleri otomatik olarak yeniden dener.
16501 ExceededMemoryLimit Çok kiracılı bir hizmet olarak, işlem istemcinin bellek hizmet birimini aşıyor. Bu yalnızca MongoDB sürüm 3.2 için Azure Cosmos DB için geçerlidir. Daha kısıtlayıcı sorgu ölçütleriyle işlemin kapsamını daraltın veya Azure portaldan destekle iletişime geçin. Örnek: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Tanınmayan işlem hattı aşaması adı. Toplama işlem hattı isteğinizdeki aşama adı tanınmadı. İsteğinizdeki tüm toplama işlem hattı adlarının geçerli olduğundan emin olun.
- MongoDB kablo sürümü sorunları MongoDB sürücülerinin eski sürümleri bağlantı dizelerinde Azure Cosmos DB hesabının adını algılayamıyor. azure cosmos DB hesabınızın adı olan accountName bağlantı dizesi sonuna ekleyinappName=@accountName@.
- MongoDB istemci ağı sorunları (yuva veya endOfStream özel durumları gibi) Ağ isteği başarısız oldu. Bu genellikle MongoDB istemcisinin kullanmaya çalıştığı bir TCP bağlantısının etkin olmamasından kaynaklanır. MongoDB sürücüleri genellikle bağlantı havuzunu kullanır ve bu, istek için havuzdan seçilen rastgele bir bağlantının kullanılmasıyla sonuçlanır. Etkin olmayan bağlantılar normalde Azure Cosmos DB ucunda dört dakika sonra zaman aşımına uğrar. Bu başarısız istekleri uygulama kodunuzda yeniden deneyebilir, MongoDB istemci (sürücü) ayarlarınızı dört dakikalık zaman aşımı penceresinden önce etkin olmayan TCP bağlantılarını kapatacak şekilde değiştirebilir veya işletim sisteminizin keepalive ayarlarını TCP bağlantılarını etkin durumda tutmak üzere yapılandırabilirsiniz.

Bağlantı iletilerini önlemek için, bağlantı dizesini değiştirip maxConnectionIdleTime değerini 1-2 dakika olarak ayarlamayı isteyebilirsiniz.
- Mongo sürücüsü: maxIdleTimeMS=120000 yapılandırması uygulayın
- Node.JS: socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 minutes yapılandırması uygulayın
- Mongo Kabuğu Azure portalda çalışmıyor Kullanıcı Mongo kabuğunu açmayı denediğinde hiçbir şey olmuyor ve sekme boş kalıyor. Güvenlik Duvarı’nı denetleyin. Azure portalda Mongo kabuğuyla güvenlik duvarı desteklenmez.
- Mongo kabuğunu güvenlik duvarı kuralları içinde yerel bilgisayara yükleyin
- Eski Mongo kabuğunu kullanın
- Bağlantı dizesiyle bağlanılamıyor 3.2 -> 3.6'dan yükseltirken bağlantı dizesi değişti MongoDB hesapları için Azure Cosmos DB API'sini kullanırken, hesapların 3.6 sürümünde uç nokta biçimindeyken *.mongo.cosmos.azure.com hesapların 3.2 sürümünde uç nokta biçimindedir *.documents.azure.com.

Sonraki adımlar