Couchdb bersifat transaksional secara default. Setiap dokumen di couchdb berisi _rev
kunci. Semua pembaruan pada dokumen dilakukan terhadap _rev
ini kunci:-
- Dapatkan dokumennya.
- Kirim untuk pembaruan menggunakan properti _rev.
- Jika pembaruan berhasil maka Anda telah memperbarui _rev terbaru dari dokumen
- 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 :
- Sisipkan file baru
- 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:-
- Anda membaca dokumen yang akan diperbarui.
- Anda mengubah beberapa bidang.
- Sementara itu permintaan lain telah mengubah dokumen asli. Ini berarti dokumen sekarang memiliki
_rev
baru - Tetapi Anda meminta couchdb untuk memperbarui dokumen dengan
_rev
itustale
yang Anda baca di langkah #1. - Couchdb akan menghasilkan pengecualian.
- 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.