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 <em>database transaction?</em>

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:

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.

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

<em>Technical concept</em>

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

<strong>Begin</strong>

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

<strong>Commit</strong>

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

<strong>Rollback</strong>

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.

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. S_alah 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.

Original post from Tlab Circle on June 11, 2021.