Jawaban singkatnya adalah ya untuk atomisitas.
Di MongoDB, Transaksi (juga disebut transaksi multi-dokumen) dikaitkan dengan sesi . Artinya, Anda memulai transaksi untuk satu sesi. Pada waktu tertentu, Anda dapat memiliki paling banyak satu buka transaksi untuk satu sesi.
Anda tidak dapat mengunci seluruh koleksi untuk penulisan. Anda mungkin ingin membuat beberapa transaksi untuk memastikan bahwa penulisan tidak saling terkait/menimpa di antara proses Anda. MongoDB menggunakan Penguncian Optimis alih-alih Penguncian Pesimis .
Demikian pula dalam transaksi multi-dokumen MongoDB. Misalnya, menggunakan mongo shell :
s1 = Mongo().startSession()
sessionTest = s1.getDatabase("databaseName").test;
s1.startTransaction()
sessionTest.find({a:"foo"})
> {_id: ObjectId(..), a:"foo", b:1}
// Let's update the record outside of the session (i.e. another process)
db.test.update({a:"foo"}, {$set:{b:2}})
sessionTest.update({a:"foo"}, {$set:{b:9}})
// You'll get a WriteConflict error because the the document has been modified outside of the session.
Perhatikan juga bahwa saat transaksi terbuka, tidak ada perubahan data yang dibuat oleh operasi dalam transaksi yang terlihat di luar transaksi.
- Saat transaksi dilakukan, semua perubahan data disimpan dan terlihat di luar transaksi dan transaksi berakhir.
- Saat transaksi dibatalkan, semua perubahan data yang dibuat oleh penulisan dalam transaksi akan dibuang tanpa pernah terlihat dan transaksi berakhir.
Lihat juga Contoh Atomicity .
Perlu diperhatikan bahwa MongoDB adalah database terdistribusi , jadi Anda juga perlu mengetahui berbagai opsi untuk konsistensi. Anda dapat menentukan opsi ini saat memulai Session.startTransaction() tergantung pada kasus penggunaan :
-
Isolasi Baca (Baca Kekhawatiran) :Transaksi multi-dokumen MongoDB mendukung masalah baca "snapshot ", "lokal ", dan "mayoritas ".
Transaksi multi-dokumen mendukung preferensi baca utama dan semua operasi dalam transaksi tertentu harus dirutekan ke anggota yang sama.
Anda mungkin juga tertarik dengan Chalk and Talks Teknik:Transaksi MongoDB video yang berisi beberapa penjelasan teknis di balik transaksi MongoDB.