DBMS - Transaksi: Memahami Dasar dan Lebih Jauh

Hai teman-teman, para ahli basis data masa depan! Saya sangat senang untuk membawa Anda dalam perjalanan melalui dunia menarik dari transaksi basis data. Sebagai guru ilmu komputer yang ramah di lingkungan sekitar Anda, saya telah melihat banyak siswa kesulitan dengan topik ini, tapi saya berjanji Anda, setelah tutorial ini selesai, Anda akan menjadi ahli transaksi! Mari kita masuk ke dalam!

DBMS - Transaction

Apa Itu Transaksi?

Sebelum kita masuk ke dalam hal yang rinci, mari kita mulai dengan dasar-dasar. Bayangkan Anda berada di mesin ATM, menarik uang. Anda memasukkan kartu, memasukkan PIN, memilih jumlah, dan mengambil uang tunai Anda. Proses keseluruhan ini, dari awal sampai akhir, adalah sebuah transaksi. Dalam istilah basis data, transaksi adalah sebuah urutan operasi yang dilakukan sebagai unit kerja logis tunggal.

Ini adalah contoh sederhana dari apa yang mungkin terlihat seperti transaksi dalam pseudocode:

BEGIN TRANSACTION
BACA balance DARI account WHERE id = 12345
JIKA balance >= 100 MAKA
PERBARUI account SET balance = balance - 100 WHERE id = 12345
BERIKAN 100 dolar
ELSE
TAMPILKAN "Dana tidak cukup"
AKHIR JIKA
COMMIT TRANSACTION

Transaksi ini memastikan bahwa baik semua langkah diselesaikan secara sukses (uang ditarik dan balance diperbarui) atau tidak ada yang diselesaikan (jika tidak cukup uang, tidak ada perubahan).

Properti ACID

Sekarang, mari kita bicarakan tentang empat tiang utama transaksi, dikenal sebagai properti ACID. Ini sangat penting untuk menjaga integritas dan konsistensi data dalam sistem basis data.

Atomisitas

Atomisitas memastikan bahwa transaksi dianggap sebagai unit tunggal, tak terpisahkan. Itu semua atau nihil - baik semua operasi dalam transaksi diselesaikan secara sukses, atau tidak ada yang diselesaikan.

Contoh:

BEGIN TRANSACTION;
PERBARUI accounts SET balance = balance - 100 WHERE id = 'Alice';
PERBARUI accounts SET balance = balance + 100 WHERE id = 'Bob';
COMMIT;

Jika bagian mana pun dari transaksi ini gagal (misalnya, rekening Bob tidak ada), seluruh transaksi akan dikembalikan, dan balance Alice tetap tidak berubah.

Konsistensi

Konsistensi memastikan bahwa transaksi membawa basis data dari satu keadaan valid ke yang lain. Itu menjaga batasan integritas basis data.

Contoh: Bayangkan kita memiliki aturan bahwa semua balance rekening harus positif.

BEGIN TRANSACTION;
PERBARUI accounts SET balance = balance - 200 WHERE id = 'Alice';
-- Jika balance Alice menjadi negatif, transaksi akan dibatalkan
COMMIT;

Isolasi

Isolasi memastikan bahwa eksekusi bersamaan transaksi meninggalkan basis data dalam keadaan yang sama seperti yang akan diperoleh jika transaksi dieksekusi secara berurutan.

Contoh: Bayangkan dua transaksi berjalan bersamaan:

-- Transaksi 1
BEGIN TRANSACTION;
PERBARUI accounts SET balance = balance - 100 WHERE id = 'Alice';
-- Beberapa penundaan terjadi di sini
PERBARUI accounts SET balance = balance + 100 WHERE id = 'Bob';
COMMIT;

-- Transaksi 2
BEGIN TRANSACTION;
Pilih balance DARI accounts WHERE id = 'Alice';
COMMIT;

Isolasi memastikan bahwa Transaksi 2 akan melihat balance Alice sebelum transfer atau setelahnya, tapi tidak di antara.

Ketahanan

Ketahanan menjamin bahwa setelah transaksi dikommit, itu akan tetap begitu, bahkan dalam keadaan kehilangan daya, krisis, atau kesalahan.

Contoh: Setelah menjalankan transaksi ini:

BEGIN TRANSACTION;
MASUKKAN KE audit_log (action, timestamp) NILAI ('User login', CURRENT_TIMESTAMP);
COMMIT;

Catatan yang dimasukkan akan bertahan meskipun sistem mogok segera setelah itu.

Serialisabilitas

Serialisabilitas adalah level tertinggi isolasi antara transaksi. Itu memastikan bahwa eksekusi bersamaan transaksi menghasilkan keadaan basis data yang akan diperoleh jika transaksi ini dieksekusi secara berurutan dalam urutan tertentu.

mari kita lihat contoh:

Transaksi 1: R(X), W(X)
Transaksi 2: R(X), W(X)

Jadwal seriasi yang mungkin:

  1. T1 diikuti oleh T2: R1(X), W1(X), R2(X), W2(X)
  2. T2 diikuti oleh T1: R2(X), W2(X), R1(X), W1(X)

Jadwal bersamaan dianggap serializable jika hasilnya setara dengan salah satu jadwal seriasi ini.

Jadwal Equivalen

Dua jadwal dianggap setara jika:

  1. Mereka melibatkan set transaksi yang sama
  2. Mereka memesan operasi konflik dari transaksi yang tidak dibatalkan dengan cara yang sama

Mari kita lihat contoh:

Jadwal 1: R1(X), R2(X), W1(X), W2(X) Jadwal 2: R2(X), R1(X), W1(X), W2(X)

Jadwal ini setara karena operasi konflik (W1(X) dan W2(X)) dalam urutan yang sama di kedua jadwal.

Status Transaksi

Transaksi melalui berbagai status selama siklus hidupnya. Ini adalah tabel yang menggabungkan status ini:

Status Deskripsi
Active Status awal; transaksi berada dalam status ini selama menjalankan
Sebagian Dikommit Setelah pernyataan final dijalankan
Gagal Setelah ditemukan bahwa eksekusi normal tidak dapat terus berlanjut
Dibatalkan Setelah transaksi dikembalikan dan basis data dipulihkan ke keadaan sebelum transaksi dimulai
Dikommit Setelah penyelesaian sukses transaksi

Memahami status ini sangat penting untuk mengelola transaksi secara efektif dan memastikan integritas data.

Dalam kesimpulan, transaksi adalah konsep fundamental dalam sistem manajemen basis data, memastikan konsistensi dan integritas data. Dengan memahami properti ACID, serialisabilitas, jadwal yang setara, dan status transaksi, Anda sudah dalam jalur menjadi ahli basis data!

Ingat, latihan membuat sempurna. Cobalah implementasikan konsep ini dalam sistem basis data nyata, dan Anda akan melihat betapa kuat transaksi bisa menjadi. Selamat coding, para administrator basis data masa depan!

Credits: Image by storyset