ป้ายกำกับ: Transaction

Database: หลักการ ACIDDatabase: หลักการ ACID

หลักการ ACID คือหัวใจสำคัญของระบบจัดการฐานข้อมูล ( Database Management System: DBMS ) เพื่อรับประกันว่ารายการเปลี่ยนแปลงข้อมูล ( Transaction ) นั้นมีความถูกต้องและเชื่อถือได้ แม้จะเกิดข้อผิดพลาด ไฟดับ หรือการทำงานพร้อม ๆ กันก็ตาม ACID ย่อมาจากคุณสมบัติ 4 ประการ ดังนี้ครับ


Atomicity ( ความเป็นหนึ่งเดียว )

หลักการ “All or Nothing” คือ Transaction จะต้องทำงานให้เสร็จสิ้นทั้งหมด หรือไม่เกิดขึ้นเลย ( Rollback ) จะไม่มีการค้างอยู่กลางทาง

  • ตัวอย่าง: การโอนเงินจากบัญชี A ไป B ประกอบด้วย 2 ขั้นตอนคือ
    1. หักเงินจาก A และ
    2. เพิ่มเงินให้ B

หากระบบขัดข้องหลังจากหักเงิน A ไปแล้ว ระบบต้องทำการคืนเงินเข้าบัญชี A ทันที เพื่อไม่ให้เงินหายไปเฉย ๆ


Consistency ( ความสอดคล้อง )

การเปลี่ยนแปลงข้อมูลต้องทำให้ฐานข้อมูลอยู่ในสถานะที่ถูกต้องตาม Business Rules หรือเงื่อนไขที่กำหนดไว้เสมอ ( Integrity Constraints )

  • ตัวอย่าง: หากเราตั้งกฎว่า “ยอดเงินในบัญชีห้ามติดลบ” แล้วมี Transaction พยายามถอนเงินมากกว่าที่มีอยู่ ระบบจะต้องปฏิเสธรายการนั้นเพื่อรักษาความถูกต้องของข้อมูลตามกฎเดิม

Isolation ( ความเป็นอิสระ )

ในกรณีที่มีหลาย Transaction ทำงานพร้อมกัน ระบบต้องจัดการให้เหมือนกับว่าแต่ละ Transaction ทำงานแยกกัน ไม่มีการรบกวนกัน ( เหมือนทำทีละรายการตามลำดับ )

  • ตัวอย่าง: หากนาย A และ นาย B โอนเงินเข้าบัญชีของนาย C พร้อมกัน ระบบต้องจัดการคิวเพื่อให้ยอดเงินสุดท้ายของนาย C ถูกต้อง ไม่ใช่ว่ายอดเงินของคนหนึ่งไปทับซ้อนข้อมูลของอีกคนหนึ่ง

Durability ( ความคงทน )

เมื่อ Transaction ทำงานสำเร็จและระบบยืนยัน ( Commit ) แล้ว ข้อมูลนั้นจะถูกบันทึกอย่างถาวร แม้ระบบจะล่มหรือไฟดับในวินาทีต่อมา ข้อมูลก็จะไม่หายไป

  • ตัวอย่าง: หลังจากที่คุณกดโอนเงินสำเร็จและได้สลิปแล้ว แม้แอปฯ จะค้างหรือมือถือดับทันที ยอดเงินในฐานข้อมูลธนาคารก็ยังต้องถูกบันทึกไว้ตามที่ทำรายการไปแล้ว

สรุปสั้น ๆ สำหรับชาว Dev

  • Atomicity: ไม่สำเร็จทั้งหมด ก็ยกเลิกทั้งหมด
  • Consistency: ข้อมูลต้องถูกต้องตามกฎ ( Constraints )
  • Isolation: ทำงานพร้อมกันได้ แต่ต้องไม่กวนกัน
  • Durability: บันทึกแล้ว บันทึกเลย ไม่หายแน่นอน

อ่านเพิ่มเติม