Bagikan melalui


Memecahkan masalah umum di API Azure Cosmos DB untuk MongoDB

BERLAKU UNTUK: MongoDB

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

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 umumnya adalah bahwa jalur indeks yang sesuai dengan item order-by yang ditentukan dikecualikan atau urutan berdasarkan kueri tidak memiliki indeks komposit yang sesuai yang dapat dilayani. Kueri meminta pengurutan pada bidang 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 agar dapat diselesaikan dalam batas waktu 5 detik.
9 FailedToParse Menunjukkan bahwa server Cosmos DB tidak dapat menginterpretasikan atau memproses parameter karena input yang disediakan tidak sesuai dengan format yang diharapkan atau didukung. Pastikan hanya parameter yang valid dan didukung yang disertakan dalam kueri Anda.
13 Tidak diizinkan Permintaan tidak memiliki izin untuk menyelesaikan. Pastikan Anda menggunakan kunci yang benar.
26 NamespaceNotFound Database atau koleksi 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 koleksi (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 dapat 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 lain harus diberikan dalam kesalahan. Jika fungsionalitas ini penting untuk penyebaran Anda, buat tiket dukungan di portal Azure, dan tim Azure Cosmos DB akan kembali kepada Anda.
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 lain adalah menggunakan bidang yang berisi kombinasi bidang ID dan kunci shard.
16500 TooManyRequests Jumlah total unit permintaan yang digunakan melebihi laju unit permintaan yang disediakan 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 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 alur agregasi Anda tidak dikenali. Pastikan semua nama saluran agregasi dalam permintaan Anda valid.
- Masalah versi kawat MongoDB Versi lama driver MongoDB tidak dapat mendeteksi nama akun Azure Cosmos DB 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 karena waktu habis di 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 Azure.
- Menginstal shell Mongo di komputer lokal dalam aturan firewall
- Gunakan legasi Mongo shell
- Tidak dapat terhubung dengan string koneksi String koneksi telah berubah saat meningkatkan dari 3.2 -> 3.6 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 Azure Cosmos DB untuk MongoDB.
  • Pelajari cara menggunakan Robo 3T dengan API Microsoft Azure Cosmos DB untuk MongoDB.
  • Jelajahi sampel MongoDB dengan API Azure Cosmos DB untuk MongoDB.