ACID: ทำไมธุรกรรมฐานข้อมูลต้องครบทั้งชุด หรือไม่ทำเลย

29 มิถุนายน 2569อ่าน 6 นาที
ACID: ทำไมธุรกรรมฐานข้อมูลต้องครบทั้งชุด หรือไม่ทำเลย

โอนเงินแล้วหักจากบัญชีหนึ่งได้ แต่ไม่เข้าอีกบัญชี คือฝันร้ายของทุกระบบการเงิน ACID คือคุณสมบัติที่รับประกันว่าธุรกรรมจะทำครบทั้งชุดหรือไม่ทำเลย เข้าใจว่าทำไมมันสำคัญกับข้อมูลที่ผิดไม่ได้

ลองนึกถึงการโอนเงิน ที่ต้องหักจากบัญชีหนึ่งและเพิ่มในอีกบัญชี ถ้าระบบหักเงินออกได้แต่ล่มก่อนจะเพิ่มเข้าปลายทาง เงินก็หายไปเฉย ๆ นี่คือเหตุผลที่ฐานข้อมูลมีแนวคิด ACID ซึ่งเป็นชุดคุณสมบัติที่รับประกันว่าธุรกรรมหนึ่ง ๆ จะทำครบทุกขั้นหรือไม่ทำเลย ไม่มีสถานะค้างครึ่ง ๆ กลาง ๆ ที่ทำให้ข้อมูลผิดเพี้ยน

สี่คุณสมบัติที่รับประกันความถูกต้อง

ACID ย่อมาจากสี่คุณสมบัติ คือ ธุรกรรมต้องทำครบทั้งชุดหรือไม่ทำเลย ต้องรักษากติกาของข้อมูลให้ถูกต้องเสมอ หลายธุรกรรมที่ทำพร้อมกันต้องไม่กวนกันจนข้อมูลเพี้ยน และเมื่อยืนยันสำเร็จแล้วข้อมูลต้องไม่หายแม้ระบบล่มทันทีหลังจากนั้น คุณสมบัติเหล่านี้ทำให้ระบบที่จัดการเงิน สต็อก หรือข้อมูลที่ผิดไม่ได้ ทำงานได้อย่างน่าเชื่อถือแม้ในกรณีที่มีข้อผิดพลาดหรือหลายคนทำพร้อมกัน

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

การเข้าใจ ACID ช่วยให้ผู้บริหารและทีมรู้ว่างานประเภทไหนต้องการการรับประกันความถูกต้องระดับนี้ และไม่ควรประนีประนอมเพื่อความเร็ว โดยเฉพาะงานที่เกี่ยวกับเงินและสต็อก การเลือกใช้ฐานข้อมูลและออกแบบธุรกรรมให้เหมาะกับความสำคัญของข้อมูล คือรากฐานที่ทำให้ระบบไว้ใจได้ในวันที่มีข้อผิดพลาดหรือคนใช้พร้อมกันจำนวนมาก

ACIDDatabaseTransactionsReliability

บริการที่เกี่ยวข้อง

รับพัฒนาเว็บแอปพลิเคชัน

สร้างเว็บแอปที่รองรับการเติบโตและเชื่อมกับระบบอื่นได้

WhaleScope

ดูโครงสร้างตลาดของทุกหมวดธุรกิจไทย บน WhaleScope

รายชื่อบริษัท ผู้เล่นรายใหญ่ และอัตราคงอยู่ของแต่ละหมวด — จากข้อมูลจดทะเบียน 2 ล้านนิติบุคคล

อ่านต่อ

Saga: จัดการธุรกรรมที่ข้ามหลายระบบ เมื่อ ACID ทำไม่ได้

การจองทริปต้องจองตั๋ว โรงแรม และรถพร้อมกัน แต่ทั้งหมดอยู่คนละระบบ ทำเป็นธุรกรรมเดียวไม่ได้ Saga คือรูปแบบที่ทำทีละขั้น และถ้าขั้นใดล้ม ก็ยกเลิกขั้นก่อนหน้าด้วยการชดเชย

Optimistic หรือ Pessimistic Locking: กันข้อมูลชนกันเมื่อหลายคนแก้พร้อมกัน

เมื่อสองคนแก้ข้อมูลเดียวกันพร้อมกัน ใครจะชนะ และอีกคนจะรู้ไหมว่างานถูกทับ Optimistic กับ Pessimistic Locking คือสองวิธีจัดการ ที่เหมาะกับสถานการณ์ต่างกัน

Database Sharding: แบ่งฐานข้อมูลเมื่อใหญ่เกินเครื่องเดียว

เมื่อข้อมูลใหญ่จนเครื่องเดียวรับไม่ไหว การเพิ่มเครื่องให้แรงขึ้นมีเพดาน Sharding คือการแบ่งข้อมูลออกไปหลายเครื่อง ช่วยให้ขยายต่อได้ แต่ก็เพิ่มความซับซ้อนที่ต้องแลก

Read Replica: แยกงานอ่านออกจากงานเขียน เพื่อให้ระบบไหว

ระบบส่วนใหญ่อ่านข้อมูลบ่อยกว่าเขียนมาก เมื่อฐานข้อมูลเดียวรับทั้งสองไม่ไหว Read Replica คือการทำสำเนาไว้รับงานอ่าน ช่วยให้รายงานและหน้าเว็บเร็วขึ้นโดยไม่กระทบงานเขียน