วันก่อนแอดนั่งเรียนคอร์ส SQL Concepts for Data Engineers1 บน edX เค้ามีอธิบายเรื่อง ACID เข้าใจง่ายดี เลยเขียนสรุปสั้นๆมาให้อ่าน พร้อมยกตัวอย่างประกอบ

✅ ถ้าใครอยากเริ่มงานสาย Data Engineer ACID Transactions คือพื้นฐานสำคัญที่ต้องเข้าใจ โดยเฉพาะเวลาเราทำงานกับ Relational/ SQL Databases
Table of Contents
ACID Transactions คืออะไร
Transaction แปลภาษาไทยว่า “ธุรกรรม” คือ indivisible unit of work หรืองานที่ประกอบด้วย SQL statements หลายๆอันทำงานร่วมกัน เกิดขึ้นพร้อมกันทั้งหมดหรือไม่เกิดขึ้นเลย
📝 Indivisible (adj.) แปลว่าไม่สามารถแบ่งเป็นหน่วยย่อยๆได้
ด้านล่างเป็นตัวอย่าง SQL statement ที่ represent หนึ่ง transaction
-- transaction
BEGIN
UPDATE bank_account
SET balance = balance - 200
WHERE account = 'john';
UPDATE bank_account
SET balance = balance + 200
WHERE account = 'toy';
COMMIT
ACID2 ย่อมาจาก Atomicity, Consistency, Isolation, Durability ตอนเรียนเรื่องนี้ครั้งแรก แอดงงมาก 555+ มาลองดูความหมายของแต่ละคำนี้ก่อน
Atomicity
All changes must be performed successfully or not at all.
ถ้า transaction ของเราประกอบด้วย 5 SQL statements เราจะนับว่า transaction นี้สำเร็จ success ก็ต่อเมื่อทั้ง 5 statements รันผ่านทั้งหมด
แต่ถ้ามี statement ตัวใดตัวหนึ่ง รันไม่ผ่าน หรือเกิด error ขึ้นมา transaction นี้จะล้มเหลวหรือนับเป็น failure ทันที
Consistency
Data must be in a consistent state before and after the transaction.
ข้อมูลใน database ต้องมีความ consistent สอดคล้องกันทั้งก่อนและหลังการเกิด transaction ตัวอย่างเช่น ถ้าเงินในบัญชี Toy มี 500 บาท
มีเพื่อนชื่อ John โอนเงินให้เรา 200 บาท บัญชีของ John ต้อง -200 และบัญชีของ Toy ต้อง +200 เห็นเงินในบัญชีเป็น 700 บาท (consistency)
Isolation
No other process can change the data while the transaction is running.
Transactions เกิดขึ้นแบบ independent และไม่สามารถรบกวน (interfere) กันได้ จนกว่า transaction จะถูก committed ลงใน database
Commit (v.) คือศัพท์เทคนิคในงาน database
เวลาเรา commit changes ระบบจะบันทึกการเปลี่ยนแปลงลงในฐานข้อมูล เมื่อ commit แล้วจะไม่สามารถย้อนกลับได้ (cannot be undone) นอกจากจะมีอีกหนึ่ง commit เพื่อเปลี่ยนข้อมูลกลับไปที่ state ก่อนหน้า
กลับไปที่ตัวอย่าง John กับ Toy เมื่อกี้ กฎของ isolation บอกว่า John ต้องเห็นเงินในบัญชี -200 บาทก่อน Toy ถึงจะเห็นเงินในบัญชี +200 บาท ได้
📝 ธุรกรรมทางด้านการเงินต้องการระดับ isolation สูงมาก เช่น การฝากและถอนเงินในบัญชี เพื่อให้ข้อมูลการเงินใน database อยู่ในสภาวะ consistent และถูกต้องตลอดเวลา
Durability
The changes made by the transaction must persist.
Durable (adj.) แปลว่า ทนทาน
เมื่อ transaction สำเร็จแล้ว (committed) จะไม่สามารถเปลี่ยนแปลงได้อีก (permanent) ฝนตก ไฟดับ data center ระเบิด เดี๋ยวๆ ก็ทำอะไร transactions ที่เกิดขึ้นแล้วไม่ได้ 55+
Real-Life ACID Example

ACID ช่วยให้ข้อมูลของเรามีความน่าเชื่อถือ ถูกต้องตลอดเวลา ถ้าไม่มี ACID อาจเกิดปัญหา data loss, inconsistent data หรือ transactional conflicts
การซื้อของออนไลน์บน e-commerce platforms จำเป็นต้องใช้ ACID transactions เพื่อให้ระบบมีความ consistent และ reliable ตัวอย่าง transaction หนึ่งๆ เช่น
- ลูกค้าเข้าเว็บไซต์ กดสั่งซื้อสินค้า
- จ่ายเงินสำเร็จ (เงินในบัญชีผู้ซื้อถูกหัก + เงินเข้าบัญชีผู้ขาย)
- ระบบตัด stock ตามจำนวนที่ลูกค้าสั่ง
- จัดส่งสินค้าตามที่อยู่ของลูกค้า
- ลูกค้าได้รับสินค้าที่สั่งไว้
เวลาทำงานจริง เราสามารถใช้ programming languages ที่เราถนัด เช่น R, Python, Java, C เขียนคำสั่งจัดการ ACID transactions ใน database ผ่าน API/ connectors
COMMIT
เวลาที่ transaction ทั้งหมดสำเร็จROLLBACK
เวลาที่ transaction ไม่สำเร็จ เกิด error บางอย่าง
จบแล้ว! หวังว่าบทความนี้จะเป็นประโยชน์กับเพื่อนๆที่สนใจงาน data engineering นะครับ จริงๆ data analyst อย่างพวกเราก็ควรรู้เรื่องนี้เหมือนกัน เย้

บทความนี้แอดค้นหาข้อมูลใน Google Search แล้วก็ใช้ Bard AI ช่วยสรุปเรื่อง ACID แบบอ่านง่ายๆให้ด้วย ยุคแห่ง Gen AI อย่างแท้จริง 555+
จริงๆ NoSQL บางตัวก็ support ACID transactions ได้เช่นกัน ไม่ได้จำกัดเฉพาะ SQL databases เท่านั้น เช่น MongoDB3 ก็รองรับ multi-document ACID transactions
Footnotes
- IBM: SQL Concepts for Data Engineers – edX ↩︎
- ACID – Wikipedia ↩︎
- ACID Properties In DBMS Explained | MongoDB | MongoDB ↩︎
Leave a Reply