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

ซึ่งต่อให้ User A และ B กดจองที่นั่งพร้อมกัน แต่คอมพิวเตอร์ทำงานเร็วมาก คำสั่งจองของทั้งสองคนยังห่างกันหลาย micro วินาที
การ lock record เพื่อปรับปรุงข้อมูลยังมีกลไกปลีกย่อยอีก เช่น กำหนดระยะเวลาที่ทำการ lock เพื่อป้องกัน dead lock ในกรณีที่ User A ขาดการติดต่อ ( network down, ตัดสินใจนานเกินไป ฯลฯ)
การ lock record ก็เพื่อให้ข้อมูลที่ถูกบันทึกมีความถูกต้องตามความจริง และลำดับเวลา ตัวอย่างที่เห็นได้ง่ายๆ คือ ข้อมูลบัญชีเงินฝากในธนาคาร
ถ้าบัญชีของ A มีเงินอยู่ 5,000 บาท
A ให้บัตร ATM กับ B มาที่ตู้ ATM ทำการถอนเงิน 100 บาท ในขณะที่ A ก็ถอนเงินผ่าน counter อีก 200 บาท
ในกรณีแบบนี้ เงินในบัญชีของ A จะต้องเหลือ 4,700 บาท
แต่ถ้าหากไม่มีการ lock record มันก็จะเป็นอย่างนี้
1. B ถอนเงินจาก ATM 100 บาท ยอดเงินคงเหลือเป็น 4,900 บาท
2. A ถอนเงินจาก counter 200 บาท โดยที่ยอดเงินก่อนถอนคือ 5,000 บาท ยอดเงินคงเหลือเป็น 4,800 บาท หรือในกรณีกลับกัน ยอดเงินคงเหลือจะเป็น 4,900 บาท เพราะถูกรายการถอนเงินของ B เขียนทับ
-- เพิ่มเติม --
ตัวอย่างสำหรับการ lock 2 records พร้อมกัน เช่นกรณีการฝาก/ถอน/โอนเงินให้ 2 บัญชี อย่าง A ถอนเงินเพื่อโอนให้ B ในขณะที่ B ก็ถอนเงินเพื่อโอนให้ A
ในกรณีเช่นนี้ DBMS (Database Management System) จะทำงานแบบนี้

จะเห็นว่า ระบบจะต้อง lock ข้อมูลทั้งหมดที่จะต้องปรับปรุงให้ได้เสียก่อน จึงจะทำการปรับปรุงข้อมูลแล้วปลด lock ด้วยกัน ไม่เช่นนั้น Transaction ของ A ก็จะรอ Transaction ของ B ปลด lock ซึ่งเป็น dead lock
**** กลับมาอ่านอีกที มีหลายความคิดเห็นกันเยอะเกี่ยวกับเรื่องเวลาในการกดยืนยันการจอง ซึ่งตรงนี้แหละ ที่ผู้เขียนโปรแกรมจะใช้เป็นเกณฑ์เลือกว่า ใครจะได้ที่นั่ง ซึ่งในระบบที่ไม่ต้องการความละเอียดแม่นยำมาก แค่สัญญานนาฬิกาของเครื่อง Server ระบบก็เพียงพอแล้ว
แต่สำหรับระบบงานที่ต้องใช้เวลาที่มีความละเอียดสูงเป็นเกณฑ์เพื่อทำธุรกรรม เช่นการซื้อขายหลักทรัพย์ เพราะเพียงแค่เวลาเพียงเศษเสี้ยววินาทีก่อนหรือหลังจากการเปลี่ยนแปลงราคาของหลักทรัพย์ก็มีผลทำให้มูลค่ากำไรหรือขาดทุนซื้อขายสูงหรือต่ำเป็นหลักร้อยล้านบาทได้ ระบบควบคุมการซื้อขายหลักทรัพย์จึงใช้สัญญานนาฬิกาจากนาฬิกาอะตอมแทน ซึ่งนาฬิกาอะตอมนั้นก็ไม่ได้อยู่ที่ศูนย์ประมวลผลที่ไหนบนพื้นโลก แต่มันเป็นนาฬิกาอะตอมในดาวเทียม GPS คือใช้เวลาจากสัญญานนาฬิกาอะตอมมาสร้างเป็น timestamp กำกับคำสั่งซื้อขายหลักทรัพย์
อธิบายอย่างง่ายๆ ก็เป็นแบบนี้

ซึ่งต่อให้ User A และ B กดจองที่นั่งพร้อมกัน แต่คอมพิวเตอร์ทำงานเร็วมาก คำสั่งจองของทั้งสองคนยังห่างกันหลาย micro วินาที
การ lock record เพื่อปรับปรุงข้อมูลยังมีกลไกปลีกย่อยอีก เช่น กำหนดระยะเวลาที่ทำการ lock เพื่อป้องกัน dead lock ในกรณีที่ User A ขาดการติดต่อ ( network down, ตัดสินใจนานเกินไป ฯลฯ)
การ lock record ก็เพื่อให้ข้อมูลที่ถูกบันทึกมีความถูกต้องตามความจริง และลำดับเวลา ตัวอย่างที่เห็นได้ง่ายๆ คือ ข้อมูลบัญชีเงินฝากในธนาคาร
ถ้าบัญชีของ A มีเงินอยู่ 5,000 บาท
A ให้บัตร ATM กับ B มาที่ตู้ ATM ทำการถอนเงิน 100 บาท ในขณะที่ A ก็ถอนเงินผ่าน counter อีก 200 บาท
ในกรณีแบบนี้ เงินในบัญชีของ A จะต้องเหลือ 4,700 บาท
แต่ถ้าหากไม่มีการ lock record มันก็จะเป็นอย่างนี้
1. B ถอนเงินจาก ATM 100 บาท ยอดเงินคงเหลือเป็น 4,900 บาท
2. A ถอนเงินจาก counter 200 บาท โดยที่ยอดเงินก่อนถอนคือ 5,000 บาท ยอดเงินคงเหลือเป็น 4,800 บาท หรือในกรณีกลับกัน ยอดเงินคงเหลือจะเป็น 4,900 บาท เพราะถูกรายการถอนเงินของ B เขียนทับ
-- เพิ่มเติม --
ตัวอย่างสำหรับการ lock 2 records พร้อมกัน เช่นกรณีการฝาก/ถอน/โอนเงินให้ 2 บัญชี อย่าง A ถอนเงินเพื่อโอนให้ B ในขณะที่ B ก็ถอนเงินเพื่อโอนให้ A
ในกรณีเช่นนี้ DBMS (Database Management System) จะทำงานแบบนี้

จะเห็นว่า ระบบจะต้อง lock ข้อมูลทั้งหมดที่จะต้องปรับปรุงให้ได้เสียก่อน จึงจะทำการปรับปรุงข้อมูลแล้วปลด lock ด้วยกัน ไม่เช่นนั้น Transaction ของ A ก็จะรอ Transaction ของ B ปลด lock ซึ่งเป็น dead lock
**** กลับมาอ่านอีกที มีหลายความคิดเห็นกันเยอะเกี่ยวกับเรื่องเวลาในการกดยืนยันการจอง ซึ่งตรงนี้แหละ ที่ผู้เขียนโปรแกรมจะใช้เป็นเกณฑ์เลือกว่า ใครจะได้ที่นั่ง ซึ่งในระบบที่ไม่ต้องการความละเอียดแม่นยำมาก แค่สัญญานนาฬิกาของเครื่อง Server ระบบก็เพียงพอแล้ว
แต่สำหรับระบบงานที่ต้องใช้เวลาที่มีความละเอียดสูงเป็นเกณฑ์เพื่อทำธุรกรรม เช่นการซื้อขายหลักทรัพย์ เพราะเพียงแค่เวลาเพียงเศษเสี้ยววินาทีก่อนหรือหลังจากการเปลี่ยนแปลงราคาของหลักทรัพย์ก็มีผลทำให้มูลค่ากำไรหรือขาดทุนซื้อขายสูงหรือต่ำเป็นหลักร้อยล้านบาทได้ ระบบควบคุมการซื้อขายหลักทรัพย์จึงใช้สัญญานนาฬิกาจากนาฬิกาอะตอมแทน ซึ่งนาฬิกาอะตอมนั้นก็ไม่ได้อยู่ที่ศูนย์ประมวลผลที่ไหนบนพื้นโลก แต่มันเป็นนาฬิกาอะตอมในดาวเทียม GPS คือใช้เวลาจากสัญญานนาฬิกาอะตอมมาสร้างเป็น timestamp กำกับคำสั่งซื้อขายหลักทรัพย์
แสดงความคิดเห็น
ระบบของ software ซื้อตั๋วหนังเค้ามีอัลกอริทึมอย่างไรครับ ที่จะกันการเลือกที่ซ้ำกัน
คราวนี้ผมอยากนั่งที่นั่งหมายเลข "G16" ผมสั่งซื้อหมายเลข "G16" พนักงานเค้าก้อกดที่เก้าอี้ "G16"
ในทันใดนั้นเอง เนื่องจากหนังเรื่องมันนี่ มีคนต้องการดูเยอะมาก ก็บังเอิญมีคนมีความชอบแบบเดียวกับผม อยากนั่งที่ "G16" ซาวแทร็ก รอบ 10.45 น. โรงที่ 14 ด้วย
ถามว่าในระหว่างก่อนที่จะทำรายการสำเร็จ
1. ซอฟต์แวร์เค้ามีระบบอย่างไรครับ ไม่ให้กันการเลือกที่ซ้ำกันในต่างเครื่อง ต่างสถานที่ (เช่นมีการเลือกที่ออนไลน์หรือเครื่องอัตโนมัติ)
2. ซอฟต์แวร์จะตัดสินใจอย่างไรครับ first click first get หรือ first complete first get
3. เวลามีปัญหาจ๊ะเอ๋แบบนี้จริงๆ โรงหนังออฟเฟอร์อะไร