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

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

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

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

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

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