Basis data relasional paling populer saat ini mendukung “ACID ” properti – Atomisitas, Konsistensi, Isolasi, dan Daya Tahan. Pengembang dan DBA (Administrator Basis Data) yang bekerja dengan basis data relasional memiliki pemahaman yang baik tentang perilaku ACID. Namun, saat bekerja dengan database NoSQL seperti cloud MongoDB, ada beberapa perbedaan utama yang penting untuk Anda pahami. MongoDB menawarkan fleksibilitas luar biasa dalam penyimpanan, skema, dan penskalaan, tetapi melonggarkan beberapa properti ACID. Sangat penting untuk memahami perbedaannya saat Anda memodelkan data Anda dan menjalankan perintah MongoDB.
Atomitas
Wikipedia mendefinisikan “Atomisitas” sebagai berikut – “Dalam transaksi atom , serangkaian operasi database baik semua terjadi, atau tidak ada terjadi. Jaminan atomisitas mencegah pembaruan ke basis data hanya terjadi sebagian, yang dapat menyebabkan masalah yang lebih besar daripada menolak seluruh rangkaian secara langsung. Dengan kata lain, atomisitas berarti tidak dapat dibagi-bagi dan tidak dapat direduksi”.
Operasi penulisan MongoDB bersifat atomik, hanya pada tingkat satu dokumen. Jika Anda memodifikasi beberapa subdokumen di dalam dokumen, operasinya masih atomik, tetapi jika Anda memodifikasi banyak dokumen, operasinya tidak atomik. Jadi, bagaimana Anda mencapai perilaku atom di banyak dokumen? Anda perlu menggunakan pola "komit dua fase" untuk mencapai atomisitas yang diinginkan. Berikut adalah contoh bagus dari dokumentasi MongoDB tentang cara mengimplementasikan pola ini. Pola komit dua fase tidak sepele untuk diterapkan dan dilakukan dengan benar – jadi pastikan atomitas penulisan beberapa dokumen adalah sesuatu yang ingin Anda bidik.
Isolasi
Wikipedia mendefinisikan “Isolasi” sebagai berikut – “Dalam sistem database, isolasi adalah properti yang menentukan bagaimana/kapan perubahan yang dibuat oleh satu operasi menjadi terlihat oleh operasi bersamaan lainnya”. Ada beberapa cara untuk mencapai Isolasi dengan operasi MongoDB Anda, misalnya:
-
Perintah “findAndModifyOperation()”
Ini adalah salah satu cara paling sederhana untuk menanyakan dan memodifikasi dokumen yang ada. Perintah dapat mengembalikan nilai dokumen sebelumnya atau nilai dokumen baru yang diperbarui. Anda juga dapat mengurutkan dokumen yang cocok, menyisipkan, dan memilih bidang mana yang perlu dikembalikan:
db.collection.findAndModify( { query: <document>, sort: <document>, remove: <boolean>, update: <document>, new: <boolean>, fields: <document>, upsert: <boolean> } );
-
Pola “Perbarui jika saat ini”
Pola ini ditentukan dalam dokumentasi MongoDB. Ini melibatkan lebih banyak pekerjaan manual tetapi memberi Anda lebih banyak kontrol.
-
$Operator isolasi
Operator $isolation menyediakan cara untuk mengisolasi penulisan ke beberapa dokumen. Namun, operator $isolation tidak memberikan jaminan semua-atau-tidak sama sekali – Anda harus menggunakan beberapa teknik atomisitas yang ditentukan di bagian pertama untuk mencapainya. Juga, operator $isolation tidak berfungsi untuk pecahan. Perintah ini dulu disebut “$atomic” – sekarang telah diganti dengan benar menjadi “$isolated”.
Konkurensi
MongoDB menggunakan kunci untuk mencegah beberapa klien memperbarui bagian data yang sama secara bersamaan. MongoDB 2.2+ menggunakan kunci level "database". Jadi, ketika satu operasi tulis mengunci database, semua operasi tulis lainnya ke database yang sama (bahkan jika mereka ke koleksi terpisah) diblokir menunggu di kunci. MongoDB menggunakan kunci “writer greedy” yang mendukung penulisan daripada pembacaan. Di 2.2+, operasi jangka panjang tertentu dapat menghasilkan kuncinya.
Keamanan Thread
Tidak semua kelas klien MongoDB adalah thread-safe – silakan merujuk ke dokumentasi driver khusus Anda untuk memeriksa apakah kelas yang Anda gunakan aman untuk thread. Misalnya, di driver Java, kelas MongoClient adalah thread-safe. Jadi, Anda dapat menggunakan satu instance kelas ini di semua utas Anda. Secara internal, MongoClient menggunakan kumpulan koneksi untuk mengelola koneksi ke server MongoDB.
Seperti biasa, jika Anda memiliki pertanyaan, hubungi kami di [email protected].