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
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
-- 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 terbaruPenjelasan Kode
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.