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 นั่นเอง

 

1