Memecahkan masalah umum di API Azure Cosmos DB untuk MongoDB

BERLAKU UNTUK: MongoDB

Important

Apakah Anda ingin memigrasikan aplikasi MongoDB yang sudah ada atau menggunakan fitur MongoDB Query Language (MQL)? Pertimbangkan Azure DocumentDB.

Apakah Anda mencari solusi database untuk skenario skala tinggi dengan perjanjian tingkat layanan ketersediaan (SLA) 99,999%, skala otomatis instan, dan failover otomatis di beberapa wilayah? Pertimbangkan Azure Cosmos DB untuk NoSQL.

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

Nota

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 Description Solution
2 NilaiBuruk Salah satu penyebab umumnya adalah bahwa jalur indeks yang sesuai dengan item order-by yang ditentukan dikecualikan atau kueri order-by tidak memiliki indeks komposit yang sesuai yang bisa digunakan. 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 Gagal Memproses 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 Batas Waktu Terlewati 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): Mengatur 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 (Kunci Pecahan Tidak Ditemukan) Dokumen dalam permintaan Anda tidak berisi kunci shard dari koleksi (disebut juga kunci partisi dalam Azure Cosmos DB). Pastikan kunci shard dari koleksi digunakan dalam permintaan.
66 Ladang Tidak Dapat Diubah 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 Tidak Dapat Buat Indeks 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 PerintahTidakDidukung Permintaan yang dicoba tidak didukung. Detail lainnya harus disertakan mengenai kesalahan. Jika fungsionalitas ini penting untuk penyebaran Anda, buat tiket dukungan di portal Azure, dan tim Azure Cosmos DB akan kembali kepada Anda.
11000 Kunci Duplikat 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 Terlalu Banyak Permintaan 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 serangkaian kontainer melalui portal Azure, atau mencoba operasi kembali. Jika Anda mengaktifkan SSR (coba lagi sisi server), Azure Cosmos DB secara otomatis mencoba ulang permintaan yang gagal karena kesalahan ini.
16501 MelebihiBatasMemori Sebagai layanan multi-penyewa, operasi telah melebihi batas 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 pipa 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 akan mengalami batas waktu habis pada sisi Azure Cosmos DB setelah empat menit. Anda dapat mencoba kembali permintaan yang gagal ini dalam kode aplikasi Anda, mengubah pengaturan klien MongoDB (driver) Anda untuk memutuskan 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: konfigurasi 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. Fitur firewall tidak didukung dengan Mongo shell di portal Azure.
- Menginstal shell Mongo di komputer lokal dalam aturan firewall
- Gunakan versi lama Mongo shell
- Tidak dapat terhubung dengan string koneksi String sambungan telah berubah ketika melakukan upgrade 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.