Lewati ke konten utama
menjadi.dev
Chapter 25.4 Database Lanjutan

Transaction, Concurrency, dan Data Integrity

Pastikan data konsisten dan aman saat banyak user mengakses bersamaan

Tujuan Pembelajaran

  • Bisa menggunakan transactions dengan benar
  • Mengerti isolation levels
  • Mengerti locking dan deadlock prevention

Analogi

Diagram

      Transaction: ACID
├── Atomicity -> All or nothing
├── Consistency -> Data valid
├── Isolation -> Concurrent transactions don't interfere
└── Durability -> Committed data survives crash
    

Transaction memastikan data integrity — terutama untuk operasi finansial dan inventory

Penjelasan Konsep

Bayangkan kamu transfer uang dari rekening A ke rekening B.

Dua operasi harus terjadi: kurangi A dan tambah B.

Kalau operasi pertama berhasil tapi kedua gagal, uang hilang!

Transaction memastikan kedua operasi berhasil ATAU gagal bersama — tidak ada setengah-setengah.

ACID Properties

Atomicity (semua operasi berhasil atau gagal semua), Consistency (database selalu dalam state yang valid), Isolation (concurrent transactions tidak saling mengganggu), Durability (data yang di-commit tetap ada meski sistem crash).

Isolation Levels

READ UNCOMMITTED (bisa baca uncommitted data — dirty read),

READ COMMITTED (default di PostgreSQL — hanya baca committed data), REPEATABLE READ (data yang dibaca tetap sama dalam transaction), SERIALIZABLE (paling aman, paling lambat — transaction berjalan seolah-olah sequential).

Optimistic Locking

Gunakan version number untuk detect conflict.

Kalau version sudah berubah saat update, retry dengan data terbaru.

Inti yang Perlu Dipahami

Bagian ini berfokus pada bisa menggunakan transactions dengan benar., mengerti isolation levels., dan mengerti locking dan deadlock prevention. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Transaction, Concurrency, dan Data Integrity, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Transaction memastikan data integrity — terutama untuk operasi finansial dan inventory. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa sql. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. BEGIN…COMMIT membungkus operasi menjadi atomic unit. Optimistic locking dengan version number untuk handle concurrent updates.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

sql
-- Transfer dengan transaction
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 'A' AND balance >= 100;
IF NOT FOUND THEN ROLLBACK; RAISE EXCEPTION 'Insufficient balance'; END IF;
UPDATE accounts SET balance = balance + 100 WHERE id = 'B';
INSERT INTO transactions (from_account, to_account, amount) VALUES ('A', 'B', 100);
COMMIT;

-- Optimistic locking untuk inventory
UPDATE products
SET stock = stock - :quantity, version = version + 1, updated_at = NOW()
WHERE id = :product_id AND stock >= :quantity AND version = :expected_version;

-- Cek rows affected:
-- 0 rows = conflict, perlu retry dengan version terbaru

Penjelasan Kode

BEGIN...COMMIT membungkus operasi menjadi atomic unit. Optimistic locking dengan version number untuk handle concurrent updates.

Prompt AI

Implementasikan transaction untuk checkout flow: kurangi stock, buat order, catat payment. Semua harus atomic.

Pertanyaan Reflektif

Tanpa transaction, race condition bisa menyebabkan data corruption — terutama untuk operasi finansial dan inventory.