ACID dalam Database: Atomicity, Consistency, Isolation, Durability

ACID adalah singkatan dari empat properti penting dalam database relasional (RDBMS) yang memastikan bahwa transaksi data dijalankan dengan aman, konsisten, dan dapat diandalkan.

A — Atomicity (Atomisitas)

Setiap transaksi adalah satu kesatuan utuh: berhasil semua atau gagal semua. Tidak ada separuh jalan.

Misalnya: Transfer uang dari akun A ke B. Jika gagal di tengah (misalnya debit berhasil, tapi kredit gagal), maka sistem harus mengembalikan semua perubahan. Tidak boleh setengah jalan.

C — Consistency (Konsistensi)

Data harus selalu mematuhi aturan integritas yang telah ditentukan (constraints, relasi, validasi).

Misalnya: Kalau database melarang saldo negatif, maka setelah transaksi berapa pun, kondisi ini harus tetap benar.

I — Isolation (Isolasi)

Transaksi yang berjalan secara bersamaan harus tetap berjalan seolah-olah dijalankan satu per satu (secara berurutan).

Misalnya: Dua orang membeli produk yang stoknya 1, sistem harus menghindari double-purchase. Transaksi harus "terisolasi".

D — Durability (Daya Tahan)

Setelah transaksi selesai (commit), perubahan data tidak akan hilang, meskipun ada crash, mati listrik, atau kegagalan sistem.

Misalnya: Kalau transaksi pembelian berhasil dan server tiba-tiba mati, data tetap aman dan tidak akan rollback secara otomatis.

Kapan ACID perlu di Implementasi?

ACID perlu diimplementasi saat datamu tidak boleh salah, dan transaksinya harus selalu utuh, konsisten, aman, dan tidak hilang. Dalam penggunaan RDBMS sudah ada fitur untuk menggunakan konsep ACID, yaitu dengan menggunakan command transaksi, misalnya pakai BEGIN dan COMMIT.

  1. Ada Transaksi yang harus satu kesatuan – apabila salah satu bagian gagal, seluruh transaksi harus dibatalkan agar data tetap valid.
    Contohnya :
    Ketika buat transaksi, ini menjadi satu kesatuan dengan insert data ke transaksi_detail, payment_detail, update_status, dll.
    Ketika proses insert ke transaksi detail gagal, maka keseluruhan proses harus gagal tidak boleh ada data yang masuk di tabel transaksi.
  2. Data Harus Selalu Konsisten – untuk memastikan semua aturan dan constraint database tetap dipatuhi setiap saat.
  3. Banyak Akses dan Penulisan Data Secara Bersamaan – berkemungkinan data di akses bersamaan dan penulisan data bersamaan padahal seharusnya data sudah berubah.
    Contohnya :
    Dua orang atau lebih mengakses produk yang sama dengan stock 5 pcs.
    User A – Beli 3 barang – Sistem cek stok : 5 – Simpan transaksi: sisa 2
    User B – Beli 4 barang – Sistem cek stok : 5 – Simpan transaksi: sisa 1
    Stok jadi 1, padahal seharusnya 5 - 3 - 4 = -2 Seharusnya user B tidak bisa membeli barang tersebut.
    Ini bisa menyebabkan Data tabrakan (race condition), Penulisan data lama menimpa data baru, Data tidak up to date.
    Solusinya :
    Dengan isolation, transaksi milik User B akan menunggu transaksi milik User A selesai.
    User A – Beli 3 barang – Sistem cek stok : 5 – Simpan transaksi: sisa 2
    User B – Beli 4 barang – Sistem cek stok : 2 – Transaksi gagal
  4. Data Harus Tahan Terhadap Kegagalan – adanya potensi kegagalan seperti Server tiba-tiba mati, Aplikasi crash, Gangguan hardware. Kalau sistem tidak tahan terhadap kondisi tersebut, maka data penting bisa hilang, setengah jadi, atau rusak, yang tentu saja berisiko besar.
    Contohnya :
    Misal lagi di ATM sudah melakukan transaksi tapi kemudian, listrik langsung mati.
    Tanpa durability, semua data hilang, uang bisa saja sudah di kirim namun di anggap transaksi gagal.
    Dengan Durability, ketika mesin menyala data tetap ada dan status transaksi sesuai.

BEGIN dan COMMIT adalah fondasi dasar untuk menjalankan ACID,
tapi harus juga:

  • Menjaga skema dan logikamu untuk Consistency
  • Atur level isolasi transaksi untuk Isolation

Setelah semua operasi berhasil, baru melakukan COMMIT. Namun ketika ada operasi yang gagal, perlu melakukan Rollback