Serializability Theory
@จากปัญหาที่เกิดจากการใช้พร้อมกันตามที่ ได้กล่าวมาแล้ว จะเห็นว่า จำเป็นต้องมีการจัดลำดับการทำงานของ transaction ให้ลำดับนั้นๆได้ผลลัพธ์ที่ถูกต้องตรงกับความเป็นจริง ซึ่งลำดับที่ให้ผลลัพธ์ถูกต้องทุกลำดับจะเรียกว่าเป็นลำดับที่มีคุณสมบัติ "Serializable"
พิจารณาลำดับการทำงาน 3 แบบ ของ transaction X และ Y
----------------- แบบที่ 1 ------------------------------------- แบบที่ 2 --------------------------------------- แบบที่ 3 -------------
transaction "X" |
time |
transaction "Y" |
transaction "X" | time |
transaction "Y" | transaction "X" | time |
transaction "Y" | ||
read ค่า a; |
t1 |
read ค่า a; | t1 |
read ค่า a; | t1 |
|||||
a = a-n; | t2 | t2 | read ค่า a; | a = a-n; | t2 | |||||
read ค่า b; | t3 | a = a-n; | t3 | t3 | read ค่า a; | |||||
b = b+n; | t4 | t4 | a = a+m; | t4 | a = a+m; | |||||
t5 | read ค่า a; | read ค่า b; | t5 | read ค่า b; | t5 | |||||
t6 |
a = a+m; |
b = b+n; | t6 |
b = b+n; | t6 |
จะเห็นว่าลำดับแบบที่ 1 จะทำ transaction X จนเสร็จแล้วจึงเริ่มทำ transaction Y ลำดับลักษณะนี้เรียกว่า ลำดับที่เป็น "serial" ส่วนลำดับแบบที่ 2 และ 3 เป็นลำดับที่มีการสลับกันทำงานระหว่าง 2 transaction (interleaved) ซึ่งเรียกว่าลำดัยที่เป็น "nonserial"
ลำดับที่เป็น serial ทุกลำดับจะให้ผลลัพธ์ที่ถูกต้องเสมอ ขณะที่ลำดับที่เป็น nonserial จะมีบางลำดับเท่านั้นที่ให้ผลลัพธ์ที่ตรงกับลำดับแบบ serial ดังเช่น ลำดับแบบที่ 2 ให้ผลลัพธ์ที่ผิด (เกิดปัญหา lost update problem ) แต่ ลำดับแบบที่ 3 นั้นให้ผลลัพธ์ตรงกับแบบที่ 1 ซึ่งก็คือลำดับแบบที่ 3 เป็นลำดับที่มีคุณสมบัติ serializable นั่นเอง