Idempotency

Menengah

Properti sebuah operasi di mana hasilnya selalu sama meski dijalankan berkali-kali. Kalau operasi kamu idempoten, kamu bisa retry tanpa takut data jadi kacau atau duplikat.

Apa itu Idempotency?

Idempotency adalah sifat sebuah operasi di mana menjalankannya satu kali atau seratus kali menghasilkan output yang sama persis. Nggak ada side effect tambahan dari eksekusi berulang.

Ini konsep yang kedengarannya abstrak, tapi dampaknya sangat nyata dalam sistem terdistribusi dan data pipeline. Dalam dunia nyata, kegagalan itu pasti terjadi: koneksi terputus, server timeout, atau proses yang restart di tengah jalan. Sistem yang baik harus bisa retry operasi yang gagal tanpa menimbulkan kerusakan data.

Analogi Sehari-hari

Tombol lift adalah contoh idempoten. Kamu tekan tombol lantai 5 sekali atau sepuluh kali, hasilnya sama: lift ke lantai 5. Nggak ada efek buruk dari pencet berulang kali.

Sebaliknya, kirim WhatsApp bukan idempoten. Kirim pesan yang sama sepuluh kali berarti penerima dapat sepuluh pesan, bukan satu.

Idempotency dalam Konteks Data

OperasiIdempoten?Kenapa
SELECT *YaNggak ubah state apapun
INSERT (plain)NggakBisa buat record duplikat
INSERT ... ON CONFLICT DO NOTHINGYaAda duplicate guard bawaan
UPDATE SET x = 5YaSet ke nilai fixed, bukan relatif
UPDATE SET x = x + 1NggakSetiap run nambah lagi
DELETE WHERE id = 123YaSetelah pertama, nggak ada yang dihapus lagi
POST /api/orderTergantungBisa buat order ganda tanpa idempotency key

Idempotency Key

Cara umum untuk membuat operasi non-idempoten jadi idempoten adalah dengan idempotency key: identifier unik per operasi yang disimpan di sistem. Kalau operasi dengan key yang sama datang lagi (misalnya karena retry), sistem abaikan atau return hasil yang sama tanpa proses ulang.

Xendit, Midtrans, dan payment gateway lain pakai mekanisme ini. Kalau request pembayaran gagal di tengah jalan karena timeout, kamu bisa retry dengan idempotency key yang sama tanpa khawatir charge pelanggan dua kali.

Kenapa Ini Penting di Data Pipeline?

Pipeline data sering punya retry logic otomatis. Kalau sebuah task gagal, orchestrator seperti Airflow akan retry beberapa kali secara otomatis. Kalau task itu nggak idempoten, setiap retry bisa bikin duplikat data atau inkonsistensi yang susah dideteksi.

Contoh konkret: pipeline harian yang load data ke BigQuery. Kalau pakai INSERT biasa dan pipeline-nya gagal di tengah jalan lalu di-retry, data bisa masuk dua kali. Solusinya: pakai partition overwrite (write_disposition = WRITE_TRUNCATE per partisi) sehingga retry hanya mengganti partisi yang sama, bukan menambah duplikat.

Desain yang idempoten bikin pipeline kamu jauh lebih robust, aman untuk di-scale, dan lebih mudah dioperasikan karena tim nggak perlu panic dan manual cleanup setiap kali ada failure.

Lanjut Latihan

Udah paham Idempotency? Lanjut latihan SQL dan Excel yuk!

Latihan interaktif, langsung di browser.

Mulai Latihan →