Conflict Serializable
transaction schedule ที่ conflict กัน ก็คือ ลักษณะที่ 2 transaction ใดๆ มีการคำสั่งที่ทำงานพร้อมกับ ที่ data เดียวกัน และมี transaction หนึ่ง write ข้อมูลนั้นๆและ transaction ที่สามารถสลับคำสั่งได้โดยที่ไม่ conflict กับ ถือว่า เป็น conflict equivalent
และถ้า transaction ใดที่เป็น conflict equivalent กับ serializable transaction ก็จะเป็น conflict serializable ซึ่งนั่นหมายถึงว่า transaction นั่นๆ จะให้ผลลัพธ์เช่นเดียวกับการทำงานแบบ serialize ด้วยเสมอ
ลักษณะของ conflict equivalent คือ
1. transaction 2 transaction ทำงานกับข้อมูลเดียวกัน
2. มีอย่างน้อย 1 transaction ที่ write ข้อมูลนั้น
ตัวอย่างเช่น
T1 | T2 |
---|---|
read(A) | |
write(A) | |
read(A) | |
read(B) | |
write(A) | |
write(B) | |
read(B) | |
write(B) |
T1 | T2 |
---|---|
read(A) | |
write(A) | |
read(B) | |
write(B) | |
read(A) | |
write(A) | |
read(B) | |
write(B) |
Conflict Serializable schedule คือ schedule ที่สามารถทำ conflict serializable ได้ ซึ่งเป็นการรับประกันว่า้ผลลัพธ์ของ transaction ใดๆ จะเหมือนกับ serializable transaction (ยกเว้นปัญหาเรื่อง Phantom phenomenon)
แต่ทั้งนี้ทั้งนั้น transaction ที่เป็น non-conflict serializable ก็ไม่ไ้ด้หมายถึงว่าผลลัพธ์จะไม่ตรงกับ serializable เสมอไป (แต่ในทางกลับกัน คือ transaction ที่เป็น conflict serializable จะให้ผลลัพธ์ที่เป็น serializable เสมอ)
View Serializable
เนื่องจากการใช้ conflict serializable schedule อาจจะีมีผลกับ transaction เนื่องจากมีบาง transaction ที่เป็น non-conflict serializable แต่ยังให้ผลลัพธ์ถูกต้อง จึงมีคนพยายามจะคิดวิธีใหม่เพื่อขนาดให้สามารถรองรับ transaction แบบนี้ได้transaction ที่จะเป็น view equivalent กันจะต้องเป็นดังนี้
1. transaction ที่ read ค่าก่อนจะต้องเป็น transaction เดียวกัน
2. transaction ที่ write ค่าหลังจะต้องเป็น transaciton เดียวกัน
3. transaction ที่ read ค่าจากอีก transaction หนึ่ง จะต้องเหมือนกัน
schedule ที่สามารถทำ view serializable คือ schedule ที่สามารถทำ view serializable ได้ ซึ่งหมายถึงรองรับการสลับคำสั่ง แล้วยังคงลักษณะ view serializable ได้
No comments:
Post a Comment