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

Emulasi transaksi CouchDB/Couchbase/MongoDB?

Couchdb bersifat transaksional secara default. Setiap dokumen di couchdb berisi _rev kunci. Semua pembaruan pada dokumen dilakukan terhadap _rev ini kunci:-

  1. Dapatkan dokumennya.
  2. Kirim untuk pembaruan menggunakan properti _rev.
  3. Jika pembaruan berhasil maka Anda telah memperbarui _rev terbaru dari dokumen
  4. Jika pembaruan gagal, dokumen itu bukan yang terbaru. Ulangi langkah 1-3.

Lihat jawaban ini oleh MrKurt untuk penjelasan lebih detail.

resipi sofa memiliki contoh perbankan yang menunjukkan bagaimana transaksi dilakukan di couchdb.

Dan ada juga transfer bank atom artikel yang menggambarkan transaksi di couchdb.

Pokoknya tema umum di semua tautan ini adalah jika Anda mengikuti pola couchdb memperbarui terhadap _rev Anda tidak boleh memiliki status yang tidak konsisten dalam database Anda.

Semua dokumen couchdb unik karena _id bidang dalam dua dokumen tidak boleh sama. Lihat lihat buku masak

Edit berdasarkan komentar

Anda dapat menggunakan dokumen terpisah dalam kasus ini. Anda memasukkan dokumen, tunggu respon sukses. Kemudian tambahkan dokumen lain seperti

{_id:'some_id','count':1}

Dengan ini Anda dapat mengatur tampilan pengurangan peta yang hanya menghitung hasil dari dokumen-dokumen ini dan Anda memiliki penghitung pembaruan. Yang Anda lakukan hanyalah memperbarui satu dokumen untuk pembaruan, Anda memasukkan dokumen baru untuk mencerminkan penyisipan yang berhasil.

Oke jadi saya sudah menjelaskan bagaimana Anda dapat melakukan pembaruan atas dokumen terpisah tetapi bahkan ketika memperbarui satu dokumen Anda dapat menghindari inkonsistensi jika Anda :

  1. Sisipkan file baru
  2. Saat couchdb memberikan pesan sukses -> coba perbarui penghitung.

Mengapa ini berhasil?

Ini berfungsi karena ketika Anda mencoba memperbarui update document Anda harus memberikan _rev rangkaian. Anda dapat memikirkan _rev sebagai negara bagian lokal untuk dokumen Anda. Pertimbangkan skenario ini:-

  1. Anda membaca dokumen yang akan diperbarui.
  2. Anda mengubah beberapa bidang.
  3. Sementara itu permintaan lain telah mengubah dokumen asli. Ini berarti dokumen sekarang memiliki _rev baru
  4. Tetapi Anda meminta couchdb untuk memperbarui dokumen dengan _rev itu stale yang Anda baca di langkah #1.
  5. Couchdb akan menghasilkan pengecualian.
  6. Anda membaca dokumen lagi mendapatkan _rev terbaru dan coba perbarui.

Jadi jika Anda melakukan ini, Anda akan selalu harus memperbarui terhadap revisi dokumen terbaru. Saya harap ini membuat segalanya sedikit lebih jelas.

Catatan:

Seperti yang ditunjukkan oleh Daniel the _rev aturan tidak berlaku untuk pembaruan massal.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Keuntungan MongoDB | Kekurangan MongoDB

  2. Peningkatan kinerja menggunakan UUID alih-alih representasi string sebagai _id di MongoDB?

  3. MongoError:kumpulan instance server dihancurkan

  4. Cara Memformat Angka dengan Koma di SQL

  5. Spring data mongodb, bagaimana cara mengatur SSL?