Multiversion Concurrency Control Techniques
เทคนิคนี้จะอาศัยการเก็บรักษาข้อมูลที่ถูกเปลี่ยนแปลงให้เป็นหลายๆ version และเมื่อมี transaction ต้องการใช้ข้อมูลนั้นๆ ก็จะเลือก version ที่เหมาะสมกับ transaction นั้นไปใช้ โดยการควบคุมลำดับการทำงานจะมีอยู่ 2 ลักษณะคือ Based on Timestamp Ordering และ Based on Two-phase locking
Multiversion Technique Based on Timestamp Ordering
ในเทคนิคนี้ version ต่างๆของข้อมูล a (สัญลักษณ์ a1,a2,a3,...ak) จะถูกจัดเก็บโดยแต่ละ version ก็จะมีค่า read timestamp (read_TS(ai)) และ write timestamp (write_TS(ai))ตามหลักการที่ได้กล่าวมาในเรื่องของ timestamp โดยมีการกำหนดค่าคือ
- เมื่อ transaction X ได้รับอนุญาตให้แก้ไขข้อมูล a เมื่อนั้นจะมีการสร้าง version ใหม่ของข้อมูล a ขึ้นมา (ak+1) และตั้งค่า read_TS(ak+1) และ write_TS(ak+1) ให้เป็นค่า TS(X)
- เมื่อ transaction X ได้รับอนุญาตให้อ่านข้อมูลจาก version ai ของข้อมูล a ( เป็น version ที่เหมาะสม ) ค่าของ read_TS(ai) จะถูกตั้งเป็นค่าที่มากกว่าระหว่าง read_TS(ai) เดิมกับ TS(X)
Guarantee Serializability
จะใช้กฎในการอ่านหรือเขียนข้อมูลดังนี้
ถ้า transaction X ต้องการ write ข้อมูล a
1.จะตรวจสอบ version i ซึ่งเป็น version ที่มีค่า write_TS(ai) สูงสุดแต่น้อยกว่าหรือเท่ากับ TS(X) ว่ามีค่า read_TS(ai) > TS(X) หรือไม่ ถ้าใช่ transaction X จะถูก rollback
2. ถ้าไม่เป็นตามเงื่อนไขข้อ 1. จะสร้าง version ใหม่ของข้อมูล a (ak+1) เพื่อแก้ไขค่าตาม transaction X และตั้งค่า read_TS(ak+1) และ write_TS(ak+1) ให้เป็นค่า TS(X)
ถ้า transaction X ต้องการ read ข้อมูล a
ให้เลือกอ่นจาก version i ซึ่งมีค่า write_TS(ai) สูงสุดแต่น้อยกว่าหรือเท่ากับ TS(X) จากนั้นตั้งค่า read_TS(ai) เป็นค่าที่มากกว่าระหว่าง read_TS(ai) เดิมกับ TS(X)
จากกฎที่ว่ามาหมายความว่าการ read ข้อมูลของ transaction ใดๆจะได้รับอนุญาตเสมอและเลือก read จาก version ที่ถูก โดยพิจารณาจากลำดับของ timestamp เป็นเกณฑ์ ส่วนการ write จะมีการพิจารณาอนุญาตให้ทำหรือให้ rollback ตามหลักเกณฑ์เดียวกัน
Multiversion Two-phase locking
ในการใช้แนวคิด Multiversion กับ Two-phase locking นี้จะมีสถานะของการปิดกั้น 3 แบบคือ read lock , write lock และ certify lock โดยระดับของการปิดกั้นเปรียบเทียบกับเทคนิคการ locking ธรรมดาเป็นดังตาราง โดยแนวนอนเป็นสถานะการปิดกั้นของ transaction X ส่วนแนวตั้งเป็นการขอปิดกั้นของ transaction Y
standard Locking Technique
read lock |
write lock |
|
read lock |
อนุญาต |
ไม่อนุญาต |
write lock |
ไม่อนุญาต |
ไม่อนุญาต |
Multiversion Two-phase Locking Technique
read lock |
write lock |
certify lock |
|
read lock |
อนุญาต |
อนุญาต |
ไม่อนุญาต |
write lock |
อนุญาต |
ไม่อนุญาต |
ไม่อนุญาต |
certify lock |
ไม่อนุญาต |
ไม่อนุญาต |
ไม่อนุญาต |
โดยการใช้ multiversion จะสามารถอนุญาตให้ transaction อื่นๆ read ข้อมูลที่ถูก write lock อยู่ได้โดยจะ read จาก version ที่ถูก commit แล้ว ส่วนการ write ข้อมูลจะแก้ไขในอีก version หนึ่งซึ่งเมื่อแก้ไขเสร็จแล้วจะต้องขอ certify lock เพื่อทำการ commit อีกที