Seperti yang kita tahu, database merupakan kumpulan data yang terorganisir dan saling berhubungan dalam suatu sistem komputer. Di dalam suatu database yang besar (seperti database perusahaan yang menyimpan data transaksi ribuan pelanggan), jutaan request per-detik bisa diproses di dalam database. Banyaknya request yang masuk seringkali “menyentuh” komponen yang sama di database, sehingga bisa menimbulkan permasalahan jika tidak dikelola dengan baik.

Untuk lebih jelasnya, bayangkan jika Anda sedang mengikuti suatu flash sale di salah satu e-commerce platform, dan Anda sedang berusaha untuk membeli barang X. Saat flash sale dimulai, Anda segera memasukkan barang X ke keranjang, lalu mencoba untuk checkout. Namun, di saat yang sama, ribuan pengguna lain ternyata juga ingin membeli barang tersebut; mereka memasukkan barang X ke keranjang masing-masing, lalu mencoba untuk checkout di waktu yang sama dengan Anda. Dalam kasus ini, database harus memastikan jumlah stock yang tersisa agar total pembelian yang dilakukan tidak melebihi total stock yang dimiliki oleh store barang X. Nah, bisanya, database transaction digunakan dalam kasus seperti ini.

Namun, apa sebenarnya database transaction itu? Apakah database transaction memiliki mekanisme tertentu untuk menjaga keamanan datanya? Lalu, apa saja prinsip-prinsip yang diterapkan dalam database transaction? Semua pertanyaan ini akan dibahas di bagian selanjutnya.

Konsep Database Transaction

Database transaction (atau dalam Bahasa Indonesia disebut “transaksi basis data”) merupakan suatu runtutan operasi dalam database yang diperlakukan sebagai satu unit (kesatuan) kerja yang logis. Unit kerja ini harus diselesaikan secara keseluruhan atau dibatalkan secara keseluruhan, yang artinya transaksi tidak bisa diselesaikan setengah-setengah. Misalnya, dalam kasus transaksi pembelian di e-commerce, tidak bisa bila database hanya meng-update data inventori atau data accounts receivable (pembayaran yang diterima) karena transaksi yang dilakukan sebetulnya mempengaruhi kedua hal tersebut. Jika ada proses transaksi yang gagal, keseluruhan database harus dikembalikan ke kondisi semula seperti sebelum transaksi tersebut dijalankan.

Ketika database transaction dijalankan (sedang dalam suatu proses sehingga masih terus diubah), kondisi database tersebut menjadi tidak konsisten untuk sementara. Namun, ketika transaksinya di-commit (difinalisasi), perubahan yang dilakukan akan disimpan dan diterapkan sehingga sudah tidak dapat di-undo (dalam database transaction, konsep “undo” ini disebut dengan rollback).

Contoh database transaction yang mudah ditemukan dalam hidup sehari-hari adalah transfer antar rekening. Anggap saja Anda ingin memindahkan 5 dollar dari rekening A ke B. Proses ini dapat dipecah menjadi beberapa operasi dasar sederhana, yaitu:

  1. Membuat record atau catatan transaksi untuk transfer 5 dollar dari rekening A ke B (tahap awal dari database transaction).
  2. Membaca saldo yang ada dari rekening A.
  3. Mengurangi 5 dollar dari rekening A.
  4. Membaca saldo yang ada di rekening B.
  5. Menambahkan 5 dollar ke rekening B.

Nah, jika tiba-tiba terjadi eror pada sistem atau mati listrik saat transaksi masih dijalankan, transaksi tersebut bisa di-undone sehingga database akan dikembalikan ke kondisi awalnya (seperti saat sebelum transaksi dijalankan). Biasanya, istilah “rollback” digunakan untuk merujuk pada proses yang meng-undo perubahan apapun dalam suatu database transaction, sementara istilah “commit” mengacu pada perubahan permanen yang sudah diterapkan pada suatu transaksi.

 

Transaction Properties

Setiap individual transaction (transaksi individu ─ satu unit proses dalam database) harus memiliki beberapa properti yang menjamin keamanan data dalam database. Properti ini disingkat dengan ACID; atomicity, consistency, isolation, dan durability. Berikut adalah penjelasan dari masing-masing properties.

  1. Atomicity

Atomicity memastikan bahwa semua operasi dalam suatu transaksi harus berjalan sepenuhnya atau tidak sama sekali. Jika ada bagian dari transaksi yang mengalami kegagalan, maka seluruh transaksi akan dibatalkan. Misalnya, jika transaksi A memiliki empat perintah SQL (bahasa pemograman yang digunakan dalam Database Management System atau DBMS untuk mengakses dan menjalankan berbagai operasi dalam database), maka keempat perintah tersebut harus berhasil dijalankan semuanya. Jika ada salah satu saja yang gagal, maka keseluruhan transaksi akan dibatalkan. Untuk kasus yang lebih relevan, seperti contoh transaksi dari rekening A ke B yang telah dijelaskan sebelumnya, jika terjadi gangguan saat pembayaran (misalnya server down atau jaringan terputus), transaksi akan langsung dibatalkan sehingga tidak ada pembaruan saldo di kedua rekening.

  1. Consistency

Consistency menjamin bahwa database selalu dalam keadaan konsisten sebelum dan sesudah transaksi. Jika ada bagian dari transaksi yang melanggar integrity rule (aturan yang diciptakan untuk memastikan keakuratan, konsistensi, dan validitas data di dalam suatu database), maka seluruh transaksi akan dibatalkan supaya data yang disimpan tetap valid dan akurat. Misalnya, aturan sistem database menyatakan bahwa stok barang tidak boleh bernilai negatif. Jika seorang pelanggan ingin membeli barang X dengan jumlah yang lebih banyak dari stok yang tersedia (anggap saja stok yang tersedia 1, tetapi pelanggan ingin membeli 2 buah barang X), maka transaksi akan dibatalkan supaya database tetap konsisten (tidak ada stok yang bernilai negatif).

  1. Isolation

Isolation memastikan bahwa data yang digunakan dalam suatu transaksi tidak bisa diakses oleh transaksi lain sebelum transaksi tersebut selesai dijalankan. Misalnya, bayangkan ada dua penumpang (sebut saja A dan B) yang sama-sama ingin memesan kursi terakhir pada pesawat X melalui aplikasi pesan tiket pesawat. Jika penumpang A terlebih dahulu menekan tombol pemesanan, maka sistem akan “mengunci” data kursi tersebut untuk transaksi A hingga transaksi tersebut selesai. Selama proses ini berlangsung, penumpang B yang juga ingin memesan kursi yang sama harus menunggu hingga transaksi A selesai. Jika transaksi A berhasil, maka kursi akan diperbarui menjadi penuh sehingga transaksi B akan dibatalkan. Namun, jika transaksi A gagal (misalnya karena pembayaran tidak berhasil), maka penumpang B bisa melanjutkan pemesanannya.

  1. Durability

Durability menjamin bahwa data yang sudah difinalisasi di database tidak akan hilang meskipun terjadi kegagalan sistem atau pemadaman listrik. Jadi, data yang sudah disimpan akan tetap ada secara permanen. Misalnya, jika penumpang telah berhasil membeli tiket pesawat melalui aplikasi online, maka transaksi yang dilakukan penumpang tersebut akan di-commit (difinalisasi) dan jumlah tiket yang masih tersedia di sistem database akan berkurang. Jika di kemudian hari ada gangguan listrik atau server down, perubahan pada database (jumlah tiket yang sudah dikurangi pembelian tersebut) tetap akan disimpan dan tidak akan hilang.

Sebagai tambahan, jika ingin mengeksekusi multiple transaction (banyak transaksi yang berjalan secara bersamaan), Database Management System (DBMS ─ “otak” dari database, memungkinkan user untuk mengakses dan menjalankan berbagai operasi dalam database) harus mengatur jalannya transaksi agar tidak terjadi konflik. Proses eksekusi transaksi ini harus menunjukkan serializability, yang berfungsi dalam memastikan bahwa hasil akhirnya sama seperti jika transaksi dijalankan satu per satu secara berurutan.

Contoh penerapannya, misalkan ada dua calon penumpang (sebut saja A dan B) yang ingin memesan tiket pesawat yang tersisa 2 kursi pada waktu bersamaan. Transaksi A pertama-tama membaca jumlah kursi yang tersedia (2 kursi), memesan 1 kursi, lalu memperbarui jumlah kursi (menjadi sisa 1 kursi). Sementara itu, transaksi B juga membaca jumlah kursi yang tersedia (2 kursi) sebelum transaksi A selesai, kemudian memesan 1 kursi dan memperbarui jumlah kursi pesawat hingga menjadi 1 kursi. Jika DBMS tidak menerapkan serializability, kedua transaksi tersebut akan menghasilkan data yang tidak konsisten karena seharusnya kursi sudah tidak tersedia lagi (sisa 0). Namun, dengan serializability, DBMS akan mengeksekusi kedua transaksi ini hingga seolah-olah dilakukan secara berurutan. Jadi, transaksi A akan diselesaikan terlebih dahulu sehingga jumlah kursi diperbarui menjadi 1 kursi, barulah transaksi B dijalankan dengan membaca data paling baru, memesan kursi terakhir, dan memperbarui jumlah kursi menjadi 0 kursi.

 

Referensi

Coronel, C. & Morris, S. (2023). Database Systems Design, Implementation, and Management (Eleventh Edition). Cengage Learning.

Fauna. (2021). What is a Database Transaction? Diakses dari https://fauna.com/blog/database-transaction pada tanggal 5 Maret 2025.

Aditya. (2021). Mengenal Transaksi Database & ACID. Diakses dari https://subreza.medium.com/mengenal-transaksi-database-acid-b1a9c187ad62 pada tanggal 6 Maret 2025.

[GAMBAR ILUSTRASI] https://www.scylladb.com/wp-content/uploads/acid-diagram.png

 

Editor : Edi Purnomo Putra