MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

VersionError:Tidak ada dokumen yang cocok ditemukan kesalahan pada Node.js/Mongoose

Sesuai permintaan, berikut adalah garis besar masalah kami, dan bagaimana kami menyelesaikannya:

Dalam sistem kami, kami membuat rutinitas penguncian Dokumen khusus (menggunakan redis-lock), di mana hal berikut terjadi dalam urutan yang tepat (salah):

TATA OPERASI YANG SALAH:

  1. Permintaan klien diterima
  2. Dokumen dikunci
  3. Dokumen diambil
  4. Dokumen diedit
  5. Dokumen tidak terkunci
  6. Permintaan klien diselesaikan
  7. Dokumen disimpan

Setelah Anda melihatnya tertulis, masalahnya jelas:kami menyimpan Dokumen kami di luar kunci Dokumen kami.

Mari kita asumsikan #6 membutuhkan 100ms di sistem kami. Itu adalah jendela 100 ms di mana jika ada permintaan lain yang mengambil Dokumen yang sama, kita akan mengalami konflik penyimpanan (kesalahan berjudul dalam Pertanyaan ini pada dasarnya adalah konflik penyimpanan IMHO).

Dengan kata lain/contoh:di sistem kami, Permintaan A mengambil Versi 1 dari Dokumen X, mengeditnya, lalu membuka kuncinya, tetapi sebelum Permintaan A menyimpan Dokumen, Permintaan B mengambil Dokumen X dan menambahkannya ke Versi 2 (baca di Mongo versi untuk info lebih lanjut tentang ini). Kemudian Permintaan A menyelesaikan permintaan Klien dan pergi untuk menyimpan Dokumen X, tetapi mencoba untuk menyimpan Versi 1, dan sekarang ia melihat memiliki Versi 2, dan dengan demikian kesalahan di atas.

Jadi perbaikannya mudah. Simpan Dokumen Anda di dalam kunci Anda. (Pada contoh di atas, pindahkan #7 ke sebelum #5. Lihat di bawah.)

TATA OPERASI YANG BENAR/TETAP

  1. Permintaan klien diterima
  2. Dokumen dikunci
  3. Dokumen diambil
  4. Dokumen diedit
  5. Dokumen disimpan
  6. Dokumen tidak terkunci
  7. Permintaan klien diselesaikan

(Anda dapat membuat argumen bahwa #6 dan #7 harus ditukar, tetapi itu di luar cakupan Mongo/Mongoose/pertanyaan ini.)

Saya akan membiarkan pertanyaan ini tidak terjawab untuk sementara waktu dan melihat apakah ada yang bisa menjelaskan cara yang lebih baik untuk mengisolasi kode yang relevan dan memecahkan masalah ini. Dalam kasus kami, ini adalah masalah yang sangat sistemik dan SANGAT menantang untuk memecahkan masalah untuk tingkat keahlian kami saat itu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $strcasecmp

  2. Apa bidang __v di luwak

  3. pymongo:MongoClient atau Koneksi

  4. Bagaimana cara menetapkan nilai default integer di mongodb?

  5. Pembentukan Ulang Dokumen MongoDB