author-pic

Ferry S

An ISTJ, Type 5, Engineer, Gamer, and Thriller-Movies-Lover
ACID pada Database: Atomicity
Tuesday Jan 24th, 2023 06:39 pm2 mins read
Programming Principle, Tips & Tutorial
ACID pada Database: Atomicity
Source: South China Morning Post - Bohr's atomic model 100 years old

ACID merupakan singkatan dari Atomicity, Consistency, Isolation, dan Durability. Bahasan kali ini adalah Atomicity, yaitu memastikan transaksi pada satu sesi harus dieksekusi semuanya sekaligus atau tidak sama sekali. Ini gunanya adalah agar tidak ada data kotor yang tersisa di database ketika salah satu transaksi gagal tapi transaksi sebelumnya masih tertinggal di Database. Biar lebih jelas kita simulasikan data berikut:

Table Order

id order_number product
1 ORD-123 kopi
2 ORD-321 susu

Table Invoice

id invoice_number price order_number
1 INV-123 5000 ORD-123
2 INV-321 7000 ORD-321

Atomicity Failure

Goalsnya disini adalah kita akan menyimpan data Order dan kemudian otomatis men-generate Invoice. Query yang dilakukan oleh aplikasi biasanya kurang lebih begini:

Insert Order

BEGIN;

INSERT INTO orders (order_number, product) VALUES ('ORD-777', 'teh');

COMMIT;

Insert Invoice

BEGIN;

INSERT INTO invoice (invoice_number, price, order_number) VALUES ('INV-777', 3000, 'ORD-777');

COMMIT;

Jika keduanya berhasil dieksekusi mungkin semuanya baik-baik saja. Tetapi misalnya ketika setelah berhasil eksekusi insertion Order, servernya crash, error, atau ada bugs yang membuat algoritmanya terhenti di tengah jalan. Ordernya jadi tetap tersimpan tapi tanpa Invoice. Ini tentu akan menyisakan data kotor. Untuk itu kita perlu membuat transaksi di atas menjadi Atomicity.

Atomicity Solution

BEGIN;

INSERT INTO orders (order_number, product) VALUES ('ORD-777', 'teh');

INSERT INTO invoice (invoice_number, price, order_number) VALUES ('INV-777', 3000, 'ORD-777');

COMMIT;

Sekarang misalkan servernya crash atau error di tengah jalan, data Order yang telah berhasil dieksekusi sebelumnya ga akan tersimpan di database karena commit database hanya bisa terjadi ketika kedua transaksi selesai dieksekusi. Ga ada lagi data yang ter-commit setengah-setengah.

Verdict

Setelah menerapkan Atomicity, kita berhasil terhindar dari data kotor yang tersimpan setengah-setengah. Goalsnya adalah masuk satu berarti harus masuk semua, jika ada salah satu yang gagal berarti semua transaksi lainnya pada sesi tersebut juga harus dibatalkan.

Untuk melihat tulisan terkait ACID lainnya bisa dibaca pada link berikut: