The incorrect summary problem
@ ปัญหานี้เกิดจากการที่มี transaction หนึ่งกำลังทำการคำนวณผลรวมข้อมูลกลุ่มหนึ่ง แล้วอีก transaction ได้เรียกข้อมูลไป update ค่าโดยการ update นั้นๆไม่ได้ทำให้ผลรวมของข้อมูลชุดนั้นเปลี่ยนไป แต่ปรากฏว่าการคำนวณผลรวมจะได้ค่าที่ไม่ถูกต้อง ตัวอย่างเช่นลำดับการทำงานของสอง transaction ต่อไปนี้
สมมติค่าเริ่มต้น a = 10 , b = 20 , c = 30
transaction " x " |
time |
transaction " y " |
sum = 0; read ค่า a; sum: = sum + a; |
t1 |
|
t2 |
read ค่า b; b:= b + 2; |
|
read ค่า b; sum: = sum + b; read ค่า c; sum: = sum + c; |
t3 |
|
t4 |
read ค่า c; c:= c - 2; |
สมมติให้ transaction x เป็นการหาผลรวมของจำนวนที่นั่งที่ถูกจองทั้งหมดจากเที่ยวบิน 2 เที่ยวบิน (a,b,c) และ transaction y เป็นการเปลี่ยนเที่ยวบินของลูกค้า 2 ที่นั่งจากเที่ยวบิน c ไปเป็นเที่ยวบิน b ซึ่งการเปลี่ยนเที่ยวบินนี้จำนวนที่นั่งที่ถูกจองทั้งหมด 3 เที่ยวบินก็ควรจะเท่าเดิมคือ 60 ที่นั่ง แต่จากลำดับของการประมวลผลข้างต้น ผลลัพธ์จาก transaction x จะได้เป็น 62 ที่นั่งซึ่งเป็นค่าที่ไม่ถูกต้อง และนี่ก็คือปัญหา incorrect summary นั่นเอง