ACID

Pengertian Dasar ACID

ACID adalah singkatan dari empat properti kunci yang harus dimiliki oleh sebuah sistem manajemen database (DBMS) untuk menjamin keandalan dan konsistensi setiap transaksi. Empat properti tersebut adalah:

  • Atomicity (Atomisitas)

  • Consistency (Konsistensi)

  • Isolation (Isolasi)

  • Durability (Ketahanan)

Sebuah "transaksi" di sini adalah satu unit kerja logis, yang bisa terdiri dari satu atau lebih perintah SQL (seperti INSERT, UPDATE, atau DELETE).


Penjelasan Lengkap dan Studi Kasus

Kita akan menggunakan studi kasus umum: Transfer Uang dari Rekening A ke Rekening B.

1. Atomicity (Atomisitas)

Definisi: Sebuah transaksi harus dianggap sebagai satu kesatuan yang tidak terbagi. Artinya, semua operasi dalam transaksi harus berhasil seluruhnya, atau tidak ada yang berhasil sama sekali. Jika salah satu bagian gagal, seluruh transaksi harus dibatalkan (di-rollback) kembali ke keadaan semula.

Studi Kasus Transfer Uang:

Bayangkan Anda ingin mentransfer Rp 500.000 dari rekening A ke rekening B. Transaksi ini terdiri dari dua operasi:

  1. Kurangi saldo rekening A sebesar Rp 500.000.

  2. Tambahkan saldo rekening B sebesar Rp 500.000.

Praktik:

  • Jika operasi pertama (mengurangi saldo A) berhasil, tetapi tiba-tiba sistem mati atau terjadi kesalahan sebelum operasi kedua (menambah saldo B) selesai, maka seluruh transaksi harus dibatalkan.

  • Saldo rekening A akan dikembalikan ke nilai awal.

  • Tanpa Atomicity, saldo rekening A akan berkurang, tetapi saldo rekening B tidak bertambah, menyebabkan kerugian uang secara permanen.

  • Dalam SQL, ini diimplementasikan dengan BEGIN TRANSACTION (atau START TRANSACTION) dan diakhiri dengan COMMIT (untuk menyimpan perubahan) atau ROLLBACK (untuk membatalkan perubahan).

2. Consistency (Konsistensi)

Definisi: Transaksi hanya akan membawa database dari satu kondisi valid ke kondisi valid lainnya. Ini berarti transaksi tidak boleh melanggar aturan integritas yang sudah ditetapkan, seperti constraints (misalnya UNIQUE, NOT NULL, atau CHECK) dan aturan bisnis.

Studi Kasus Transfer Uang:

  • Misalkan ada aturan bahwa saldo rekening tidak boleh negatif.

  • Sebelum transaksi dimulai, saldo A adalah Rp 300.000. Anda mencoba mentransfer Rp 500.000.

  • Operasi pertama akan mencoba mengurangi saldo A sebesar Rp 500.000.

  • Consistency akan memeriksa aturan yang ada. Karena saldo akan menjadi negatif (Rp -200.000), transaksi akan ditolak.

Praktik:

  • Properti ini memastikan data selalu dalam keadaan benar sesuai dengan aturan yang sudah ditentukan.

  • Hal ini mencegah data yang tidak valid, seperti saldo negatif, nomor ID yang duplikat, atau alamat email tanpa format @, masuk ke dalam database.

  • Consistency juga bergantung pada programmer yang mendefinisikan aturan integritas data dengan benar di skema database.

3. Isolation (Isolasi)

Definisi: Transaksi yang sedang berjalan tidak boleh dipengaruhi atau mengganggu transaksi lain yang berjalan secara bersamaan. Seolah-olah setiap transaksi berjalan sendiri, tanpa ada transaksi lain yang berjalan.

Studi Kasus Transfer Uang:

  • Anda (Tx1) sedang mentransfer uang dari A ke B.

  • Pada saat yang sama, teman Anda (Tx2) memeriksa saldo rekening B.

  • Tanpa Isolation, teman Anda mungkin melihat saldo B setelah uang bertambah dari transaksi Anda, tetapi transaksi Anda belum sepenuhnya selesai (belum di-commit). Jika transaksi Anda gagal, teman Anda akan melihat saldo yang salah.

Praktik:

  • DBMS menggunakan mekanisme seperti locking dan MVCC (Multi-Version Concurrency Control) untuk memastikan properti ini.

  • Ada beberapa level isolasi (misalnya READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE) yang memberikan tingkat perlindungan berbeda.

  • Pada level SERIALIZABLE, yang paling ketat, transaksi seolah-olah dieksekusi satu per satu, sehingga tidak ada konflik sama sekali.

  • Properti ini sangat penting untuk mencegah masalah seperti dirty reads, non-repeatable reads, dan phantom reads.

4. Durability (Ketahanan)

Definisi: Setelah sebuah transaksi berhasil di-commit, perubahannya harus permanen. Bahkan jika terjadi kegagalan sistem (seperti mati listrik atau crash), data yang sudah di-commit tidak boleh hilang.

Studi Kasus Transfer Uang:

  • Anda telah berhasil mentransfer uang dari rekening A ke B.

  • Anda menerima notifikasi bahwa transaksi berhasil (COMMIT).

  • Beberapa detik kemudian, server database mengalami mati listrik.

Praktik:

  • Dengan Durability, ketika sistem hidup kembali, saldo di rekening A dan B akan tetap sesuai dengan yang sudah di-commit.

  • Database mengimplementasikan properti ini dengan menyimpan perubahan ke dalam log transaksi (sering disebut write-ahead logging atau WAL) sebelum data ditulis ke disk utama.

  • Log ini digunakan untuk "mengulang" (replay) perubahan yang belum sempat ditulis ke disk jika terjadi kegagalan, memastikan data tetap utuh.

Kesimpulan

Properti ACID adalah fondasi utama dari database relasional yang andal. Mereka menjamin bahwa setiap operasi yang mengubah data dapat dipercaya, bahkan di bawah tekanan tinggi dengan banyak transaksi yang berjalan secara bersamaan. Ini adalah alasan mengapa database seperti PostgreSQL, MySQL, dan Oracle masih menjadi pilihan utama untuk aplikasi yang membutuhkan integritas data yang ketat, seperti sistem perbankan dan e-commerce.

Last updated