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

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

Race Condition: เมื่อสองงานชนกัน แล้วข้อมูลเพี้ยน
ลูกค้าสองคนกดซื้อของชิ้นสุดท้ายพร้อมกัน ระบบควรขายได้คนเดียว แต่ถ้าออกแบบไม่ดี อาจขายได้ทั้งคู่ นี่คือ Race Condition ปัญหาที่เกิดเมื่อสองงานทำพร้อมกันบนข้อมูลเดียว

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

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

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