TLabCircle
Published in

TLabCircle

Database Transaction

Photo by Austin Distel on Unsplash

Andi ingin mengirim uang ke Reni untuk dibelikan kopi kekinian menggunakan aplikasi dompet digital. Sedangkan, untuk mengirimkan uang diperlukan setidaknya 4 query ke basis data dari awal sampai uang terkirim ke akun Reni.

Lantas, bagaimana jika di tengah jalan tiba-tiba proses terhenti karena terjadi kesalahan sistem? Bisa saja uang Andi sudah terpotong tetapi uang yang ada di rekening Rani belum bertambah. Hal ini dapat menimbulkan data yang tidak konsisten dan kerugian bagi pengguna aplikasi. Untuk mengatasinya, kita bisa menggunakan Database Transaction.

What is database transaction?

Dewasa ini hampir semua basis data baik SQL maupun NoSQL telah memiliki fitur untuk melakukan database transaction. Secara singkat database transaction merupakan kemampuan basis data untuk menjamin bahwa semua proses yang sedang atau akan dijalankan memberikan nilai keberhasilan. Jika terjadi kesalahan pada salah satu proses, semua proses tersebut akan dibatalkan.

Untuk membantu dalam pemahaman mengenai database transaction, dapat dilihat pada gambar berikut:

Terjadi gagal eksekusi pada query ke 3

Dari jumlah n-query yang dijalankan pada gambar, terdapat satu kesalahan pada query 3. Saat itulah semua proses yang telah berjalan akan dibatalkan dan dianggap tidak pernah terjadi oleh basis data.

Semua query berhasil dijalankan

Dari jumlah n-query yang akan dijalankan, semuanya berhasil dieksekusi dan semua perubahan data akan tersimpan dalam basis data.

Tujuan utama dari penggunaan database transaction adalah untuk menjaga integritas data.

When to use database transaction?

Database transaction dapat digunakan untuk membuat fitur yang melakukan lebih dari satu query dalam satu eksekusi. Contohnya adalah fitur kirim uang. Query yang dibutuhkan dari awal sampai selesai kurang lebih seperti ini:

  1. Memeriksa apakah uang yang akan dikirim lebih dari jumlah saldo
  2. Memeriksa tujuan apakah valid atau tidak
  3. Melakukan update saldo pada pengirim
  4. Melakukan update saldo pada penerima
Proses transfer saldo antar rekening

Technical concept

Dalam Database transaction setidaknya terdapat 3 tahapan yang perlu dipahami, yaitu:

Begin

Proses ini akan menjalankan semua query yang telah ditentukan secara berurutan dari awal sampai akhir. Biasanya proses berlangsung secara blocking atau sync.

Commit

Proses ini berjalan ketika semua query telah dijalankan dan tidak terjadi kesalahan. Proses commit menyimpan data dari hasil eksekusi.

Proses commit berjalan ketika semua eksekusi berhasil dijalankan

Rollback

Merupakan mekanisme yang dieksekusi jika terjadi kesalahan di salah satu query yang dieksekusi. Jika terdapat satu saja kesalahan, semua query akan dibatalkan dan data akan dikembalikan ke tahap sebelum proses begin.

Proses rollback berjalan ketika terdapat satu query gagal dijalankan

How to use?

Setiap basis data memiliki cara implementasi Database transaction yang berbeda, tetapi secara umum proses yang ada adalah begin, commit dan rollback.

Beberapa framework populer telah memiliki fitur database transaction. Salah satu yang sering saya gunakan adalah Laravel. untuk mengetahui bagaimana cara menerapkan database transaction, dapat membaca di Laravel Documentation, atau dapat melihat source code mini-ewallet yang saya buat dengan menerapkan database transaction.

Summary

Database transaction merupakan hal yang wajib diimplementasikan pada fitur yang memerlukan banyak proses query dalam sekali eksekusi. Hal ini sebagai rancangan mitigasi ketika terjadi kesalahan di tengah proses yang sedang berlangsung serta untuk memastikan proses berjalan dengan benar.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store