Memecahkan masalah umum API Azure Cosmos DB untuk MongoDB

BERLAKU UNTUK: API Azure Cosmos DB untuk MongoDB

Artikel berikut menjelaskan kesalahan umum dan solusi untuk penyebaran MongoDB menggunakan Azure Cosmos DB API.

Catatan

Azure Cosmos DB tidak meng-host mesin database MongoDB. Ini menyediakan implementasi protokol kabel MongoDB versi 4.0, 3.6, dan dukungan lama untuk protokol kabel versi 3.2. Oleh karena itu, beberapa kesalahan ini hanya ditemukan di API Azure Cosmos DB untuk MongoDB

Kesalahan dan solusi umum

Kode Kesalahan Deskripsi Solusi
2 BadValue Salah satu penyebab umum adalah ketentuan jalur indeks yang sesuai dengan item urutkan dikecualikan atau urutkan berdasarkan kueri tidak memiliki indeks gabungan yang sesuai yang dapat dilayani. Kueri meminta pengurutan di kolom yang tidak diindeks. Membuat indeks yang cocok (atau indeks komposit) untuk kueri pengurutan yang sedang dicoba.
2 Transaksi tidak aktif Transaksi multi-dokumen melampaui batas waktu tetap 5 detik. Coba lagi transaksi multi-dokumen atau batasi cakupan operasi dalam transaksi multi-dokumen untuk menyelesaikannya dalam batas waktu 5 detik.
13 Tidak diizinkan Permintaan tidak memiliki izin untuk menyelesaikan. Pastikan Anda menggunakan kunci yang benar.
26 NamespaceNotFound Database atau kumpulan yang direferensikan dalam kueri tidak dapat ditemukan. Pastikan nama database/kumpulan Anda sama persis dengan nama dalam kueri Anda.
50 ExceededTimeLimit Permintaan telah melebihi batas waktu 60 detik eksekusi. Mungkin ada banyak penyebab kesalahan ini. Salah satu penyebabnya adalah ketika kapasitas unit permintaan yang dialokasikan saat ini tidak cukup untuk menyelesaikan permintaan. Masalah ini dapat diselesaikan dengan meningkatkan unit permintaan kumpulan atau database tersebut. Dalam kasus lain, kesalahan ini dapat diatasi dengan membagi permintaan besar menjadi permintaan yang lebih kecil Mencoba kembali operasi tulis yang telah menerima kesalahan ini dapat mengakibatkan penulisan duplikat.

Jika Anda mencoba menghapus data dalam jumlah besar tanpa memengaruhi RU:
- Pertimbangkan untuk menggunakan TTL (Berdasarkan Timestamp): Kedaluwarsa data dengan API Azure Cosmos DB untuk MongoDB
- Gunakan ukuran Kursor/Batch untuk melakukan penghapusan. Anda dapat mengambil satu dokumen sekaligus dan menghapusnya melalui loop. Cara ini akan membantu Anda menghapus data secara perlahan tanpa memengaruhi aplikasi produksi.
61 ShardKeyNotFound Dokumen dalam permintaan Anda tidak berisi kunci shard kumpulan (kunci partisi Azure Cosmos DB). Pastikan kunci shard kumpulan sedang digunakan dalam permintaan.
66 ImmutableField Permintaan ini mencoba mengubah bidang yang tidak dapat diubah "_id" bidang tidak dapat diubah. Pastikan permintaan Anda tidak mencoba memperbarui bidang tersebut atau bidang kunci shard.
67 CannotCreateIndex Permintaan untuk membuat indeks tidak bisa diselesaikan. Hingga 500 indeks bidang tunggal dapat dibuat dalam wadah. Hingga delapan bidang dapat dimasukkan dalam indeks gabungan (indeks gabungan didukung dalam versi 3.6+).
112 WriteConflict Transaksi multi-dokumen gagal karena transaksi multi-dokumen yang bertentangan Coba lagi transaksi multi-dokumen hingga berhasil.
115 CommandNotSupported Permintaan yang dicoba tidak didukung. Detail tambahan harus diberikan dalam kesalahan. Jika fungsionalitas ini penting untuk penyebaran Anda, buat tiket dukungan di portal Azure dan tim Azure Cosmos DB akan menghubungi Anda kembali.
11000 DuplicateKey Kunci shard (kunci partisi Azure Cosmos DB) dari dokumen yang Anda masukkan sudah ada dalam kumpulan atau batasan bidang indeks unik telah dilanggar. Gunakan fungsi perbarui() untuk memperbarui dokumen yang sudah ada. Jika batasan bidang indeks unik telah dilanggar, sisipkan atau perbarui dokumen dengan nilai bidang yang belum ada di shard/partisi. Opsi lainnya adalah menggunakan bidang yang berisi kombinasi bidang kunci ID dan shard.
16500 TooManyRequests Jumlah total unit permintaan yang digunakan melebihi laju unit permintaan yang tersedia untuk pengumpulan dan telah dibatasi. Pertimbangkan untuk menskalakan throughput yang ditetapkan ke kontainer atau set kontainer dari portal Microsoft Azure, atau Anda dapat mencoba kembali operasi. Jika Anda mengaktifkan SSR (coba lagi sisi server), Azure Cosmos DB secara otomatis mencoba ulang permintaan yang gagal karena kesalahan ini.
16501 ExceededMemoryLimit Sebagai layanan multi-penyewa, operasi telah melampaui jatah memori klien. Ini hanya berlaku untuk API Azure Cosmos DB untuk MongoDB versi 3.2. Kurangi cakupan operasi melalui kriteria kueri yang lebih ketat atau hubungi dukungan dari portal Azure. Contoh: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Nama tahap pipeline yang tidak dikenal. Nama tahap dalam permintaan saluran agregasi Anda tidak dikenali. Pastikan semua nama saluran agregasi dalam permintaan Anda valid.
- Masalah versi kabel MongoDB Versi lama driver MongoDB tidak dapat mendeteksi nama akun Azure Cosmos dalam string koneksi. Tambahkan appName=@accountName@ di akhir string koneksi Anda, accountName di nama akun Azure Cosmos DB Anda.
- Masalah jaringan klien MongoDB (seperti, pengecualian soket atau endOfStream) Permintaan jaringan gagal. Kegagalan ini sering disebabkan oleh koneksi TCP tidak aktif yang coba digunakan oleh klien MongoDB. Driver MongoDB sering menggunakan penggabungan koneksi, yang menghasilkan koneksi acak yang dipilih dari kumpulan yang digunakan untuk permintaan. Koneksi tidak aktif biasanya timeout pada Azure Cosmos DB berakhir setelah empat menit. Anda dapat mencoba kembali permintaan yang gagal ini dalam kode aplikasi Anda, mengubah pengaturan klien MongoDB (driver) Anda menjadi menjalankan koneksi TCP yang tidak aktif sebelum jendela batas waktu empat menit, atau mengonfigurasi pengaturan OS keepalive Anda untuk mempertahankan koneksi TCP dalam keadaan aktif.

Untuk menghindari pesan konektivitas, Anda mungkin ingin mengubah string koneksi untuk diatur ke maxConnectionIdleTime 1-2 menit.
- Driver Mongo: mengonfigurasi maxIdleTimeMS=120000
- Node.JS: mengonfigurasi socketTimeoutMS=120000, autoReconnect = benar, keepAlive = benar, keepAliveInitialDelay = 3 menit
- Mongo Shell tidak berfungsi di portal Microsoft Azure Ketika pengguna mencoba membuka Mongo shell, tidak ada aktivitas yang terjadi dan tab tetap kosong. Periksa Firewall. Firewall tidak didukung jika Mongo shell ada di portal Microsoft Azure.
- Instal Mongo shell di komputer lokal sesuai aturan firewall
- Gunakan legasi Mongo shell
- Tidak dapat terhubung dengan string koneksi String koneksi telah berubah saat meningkatkan dari 3.2 -> 3.6 Perhatikan bahwa saat menggunakan API Azure Cosmos DB untuk akun MongoDB, akun versi 3.6 memiliki titik akhir dalam format *.mongo.cosmos.azure.com sedangkan akun versi 3.2 memiliki titik akhir dalam format *.documents.azure.com.

Langkah berikutnya

  • Pelajari cara menggunakan Studio 3T dengan API Microsoft Azure Cosmos DB untuk MongoDB.
  • Pelajari cara menggunakan Robo 3T dengan API Microsoft Azure Cosmos DB untuk MongoDB.
  • Jelajahi sampel MongoDB dengan API Microsoft Azure Cosmos DB untuk MongoDB.