Gambar 1. Pengenalan ACID.
Pada istilah awam, transaksi merupakan cara aplikasi mengelompokkan beberapa read dan write (CRUD) bersama-sama dalam satu unit logis. Secara teknis yaitu segala sesuatu antara BEGIN TRANSACTION [1] [2] dan pernyataan COMMIT dianggap sebagai bagian dari transaksi yang sama. Dalam transaksi kita pasti membutuhkan jaminan keamanan bukan? Jaminan ini biasa kita kenal dengan singkatan ACID yang merupakan singkatan dari Atomicity, Consistency, Isolation, Durability. Dalam sistem basis data, ACID mengacu pada sekumpulan properti standar yang menjamin transaksi basis data diproses dengan andal. ACID sangat berkaitan dengan bagaimana sebuah basis data memulihkan diri dari kegagalan yang mungkin terjadi saat memproses transaksi. Apa sih ACID itu?
Atomicity mengacu dari kata dasar ATOM yang artinya mengacu pada sesuatu yang kecil dan tidak dapat dipecah menjadi bagian yang lebih kecil lagi. Artinya kalian menjamin bahwa entah seluruh transaksi berhasil atau tidak sama sekali. Kalian tidak akan mendapatkan sebagian dari transaksi berhasil dan sebagian lainnya tidak. Jika salah satu bagian dari transaksi gagal, maka seluruh transaksi akan gagal. Dengan atomisitas, itu adalah "semua atau tidak sama sekali".
Konsistensi memastikan bahwa kalian menjamin semua data akan konsisten. Semua data akan valid sesuai dengan semua aturan yang ditentukan, termasuk semua batasan (constraints), kaskade (cascade), dan pemicu (triggers) yang telah diterapkan pada basis data. Ide dari ACID konsistensi sendiri adalah ketika terjadi transaksi, aplikasi bertanggung jawab atas transaksinya dengan benar dan secara konsisten.
Isolasi menjamin bahwa setiap transaksi akan terjadi secara terisolasi. Tidak ada transaksi yang akan dipengaruhi oleh transaksi lainnya. Jadi, sebuah transaksi tidak dapat membaca data dari transaksi lain yang belum selesai.
Daya Tahan berarti bahwa begitu sebuah transaksi berhasil, itu akan tetap ada dalam sistem, bahkan jika terjadi kegagalan sistem segera setelah transaksi. Setiap perubahan dari transaksi harus disimpan secara permanen. Jika sistem memberitahu pengguna bahwa transaksi telah berhasil, maka transaksi tersebut harus benar-benar berhasil.
Dengan menggunakan prinsip ACID, sistem basis data memastikan keandalan dan konsistensi data dalam melakukan transaksi. Hal ini penting untuk menjaga integritas data dan menjaga keandalan sistem meskipun terjadi kegagalan atau gangguan dalam proses transaksi.
Sistem yang tidak memenuhi kriteria ACID sering disebut sebagai BASE, yaitu Basically Available, Soft state, & Eventual consistent. Sebagian besar basis data NoSQL saat ini sebenarnya mengadopsi pendekatan BASE. Untuk bersaing, mereka mungkin mengklaim bahwa mereka sepenuhnya memenuhi ACID. Apa sih BASE itu?
Sistem basis data NoSQL yang menggunakan model ini lebih fokus pada ketersediaan (availability) daripada konsistensi (immediate consistency). Pada model BASE, ketika terjadi gangguan atau kegagalan sistem, basis data akan tetap tersedia untuk mengakses data. Meskipun data mungkin tidak konsisten secara instan di seluruh sistem, sistem akan terus memberikan layanan kepada pengguna dengan data yang tersedia. Ini berarti pengguna masih dapat mengakses dan menggunakan sebagian data yang konsisten, meskipun ada beberapa replikasi atau salinan data yang mungkin belum ter konsistensi secara penuh.
Soft state mengacu pada sifat fleksibilitas dan dinamisitas sistem basis data NoSQL yang menggunakan model ini. Dalam model soft state, sistem mengizinkan keadaan atau status data untuk sementara waktu menjadi tidak konsisten antara satu operasi dan operasi berikutnya. Ini berarti sistem dapat berada dalam keadaan "lembut" atau "tidak stabil" dalam hal konsistensi data dalam periode waktu tertentu. Dalam lingkungan yang mengadopsi model soft state, perubahan data yang terjadi dalam sistem mungkin tidak segera terdistribusi ke seluruh node atau replika basis data secara instan. Sebaliknya, ada toleransi terhadap perbedaan sementara dalam data yang dilihat oleh berbagai komponen atau entitas sistem.
Eventually consistent mengacu pada karakteristik konsistensi data dalam sistem basis data NoSQL yang mengadopsi model ini. Dalam model Eventually consistent, sistem mengizinkan adanya keterlambatan atau perbedaan sementara dalam penyebaran dan replikasi data di seluruh sistem. Ini berarti bahwa setelah melakukan perubahan data atau transaksi, tidak ada jaminan bahwa semua entitas sistem akan segera melihat perubahan tersebut. Dalam jangka waktu tertentu, sistem secara bertahap akan berkonvergensi menuju keadaan konsisten di mana data yang direplikasi dan disebarkan ke seluruh node atau replika sistem basis data akan menjadi seragam.
Sebenarnya, basis data NoSQL sangat berguna ketika harus menangani volume data yang besar. Mereka bukanlah pengganti untuk basis data relasional, melainkan lebih sebagai alternatif di tengah kebutuhan akan analisis data yang terus meningkat. Basis data SQL terhubung secara relasional, yang menyediakan skema yang lebih kaku dan menawarkan konsistensi data yang lebih baik, namun memiliki fleksibilitas yang lebih terbatas. SQL dapat dilakukan dengan skala vertikal, yang merupakan kelemahan dibandingkan dengan basis data NoSQL.
Gambar 3. Scalability SQL (kiri) dan NoSQL (kanan).
Keputusan dalam memilih jenis basis data yang sesuai harus didasarkan pada kebutuhan khusus dari proyek atau aplikasi yang sedang dikembangkan. Berikut adalah perbedaan karakteristik SQL dan NoSQL:
Tabel 1. Perbedaan karakteristik SQL dan NoSQL.
SQL |
NoSQL |
Menggunakan model data relasional |
Menggunakan model data tanpa relasi |
Memiliki skema yang terstruktur dan ditentukan sebelumnya |
Memiliki skema yang fleksibel dan tidak ditentukan sebelumnya |
Memiliki konsistensi data yang tinggi |
Memiliki konsistensi data yang rendah |
Mendukung transaksi ACID |
Tidak selalu mematuhi properti ACID |
Memiliki bahasa query universal (SQL) |
Tidak memiliki bahasa query universal |
Cocok untuk aplikasi yang membutuhkan keamanan dan integritas data yang ketat |
Cocok untuk aplikasi dengan kebutuhan skalabilitas dan fleksibilitas tinggi |
Tidak mendukung skalabilitas horizontal secara mudah |
Mendukung skalabilitas horizontal dengan baik |
Contoh basis data SQL: MySQL, Oracle, PostgreSQL |
Contoh basis data NoSQL: MongoDB, Cassandra, Redis |
Referensi
Mengenal Transaksi Database & ACID | by Reza Aditya | Medium
What does ACID mean in Database Systems?
ACID vs. BASE: Comparison of Database Transaction Models (phoenixnap.com)