อ่าน 2 นาที
อัลกอริทึมสำหรับการกู้คืนและการแยกส่วนโดยใช้ประโยชน์จากความหมาย
ในวิทยาการคอมพิวเตอร์อัลกอริทึมสำหรับการกู้คืนและการแยกโดยใช้ความหมายหรือARIESเป็นอัลกอริทึม การกู้คืน ที่ออกแบบมาเพื่อใช้งานกับ วิธีการขโมยฐานข้อมูล แบบไม่ใช้กำลัง อั ลกอริทึมนี้.
อัลกอริทึมสำหรับการกู้คืนและการแยกส่วนโดยใช้ประโยชน์จากความหมาย
ในวิทยาการคอมพิวเตอร์อัลกอริทึมสำหรับการกู้คืนและการแยกโดยใช้ความหมายหรือARIESเป็นอัลกอริทึม การกู้คืน ที่ออกแบบมาเพื่อใช้งานกับ วิธีการขโมยฐานข้อมูล แบบไม่ใช้กำลัง อั ลกอริทึมนี้ ถูกใช้โดยIBM Db2 , Microsoft SQL Serverและระบบฐานข้อมูล อื่นๆ อีกมากมาย [ 1 ] Chandrasekaran Mohan นักวิจัยอาวุโสของ IBM เป็นผู้คิดค้นหลักของตระกูลอัลกอริทึม ARIES [ 2 ]
ราศีเมษมีหลักการสำคัญ 3 ประการ ได้แก่:
- การบันทึกล่วงหน้า (Write-ahead logging ): การเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับวัตถุจะถูกบันทึกไว้ในไฟล์บันทึก ก่อน และไฟล์บันทึกนั้นจะต้องถูกเขียนลงในหน่วยจัดเก็บข้อมูลถาวรก่อนที่จะเขียนการเปลี่ยนแปลงใดๆ ของวัตถุลงดิสก์
- การทำซ้ำประวัติระหว่างการทำซ้ำ (Redo): เมื่อระบบเริ่มต้นใหม่หลังจากเกิดข้อผิดพลาด ARIES จะย้อนรอยการกระทำของฐานข้อมูลก่อนเกิดข้อผิดพลาด และนำระบบกลับสู่สถานะเดิมทุกประการก่อนเกิดข้อผิดพลาด จากนั้นจะยกเลิกธุรกรรมที่ยังคงทำงานอยู่ ณ เวลาที่ระบบเกิดข้อผิดพลาด
- การบันทึกการเปลี่ยนแปลงระหว่างการยกเลิก: การเปลี่ยนแปลงที่เกิดขึ้นกับฐานข้อมูลในขณะที่ยกเลิกธุรกรรมจะถูกบันทึกไว้ เพื่อให้แน่ใจว่าการกระทำดังกล่าวจะไม่เกิดขึ้นซ้ำในกรณีที่มีการเริ่มต้นระบบใหม่หลายครั้ง
การบันทึกข้อมูล
อัลกอริทึม ARIES อาศัยการบันทึกการดำเนินการฐานข้อมูลทั้งหมดด้วยหมายเลขลำดับที่เพิ่มขึ้น โดยปกติไฟล์บันทึกที่ได้จะถูกจัดเก็บไว้ใน "พื้นที่จัดเก็บข้อมูลที่เสถียร" ซึ่งก็คือสื่อจัดเก็บข้อมูลที่คาดว่าจะสามารถทนต่อการขัดข้องและความล้มเหลวของฮาร์ดแวร์ได้
เพื่อรวบรวมข้อมูลที่จำเป็นสำหรับบันทึกข้อมูลต้องมีการบำรุงรักษาโครงสร้างข้อมูล สองแบบ ได้แก่ ตารางเพจ ที่มีการเปลี่ยนแปลง (DPT) และตารางธุรกรรม (TT)
ตารางหน้าข้อมูลที่เปลี่ยนแปลง (Dirty Page Table) จะบันทึกข้อมูลของหน้าข้อมูลที่ได้รับการแก้ไขทั้งหมด แต่ยังไม่ได้บันทึกลงดิสก์ รวมถึงหมายเลขลำดับแรกที่ทำให้หน้าข้อมูลนั้นเปลี่ยนแปลง ส่วนตารางธุรกรรม (Transaction Table) จะบันทึกธุรกรรมที่กำลังทำงานอยู่ทั้งหมด พร้อมทั้งหมายเลขลำดับของรายการบันทึกสุดท้ายที่ธุรกรรมเหล่านั้นสร้างขึ้น
เราสร้างบันทึกการเปลี่ยนแปลงในรูปแบบ (หมายเลขลำดับ, รหัสธุรกรรม, รหัสหน้า, ทำซ้ำ, ยกเลิก, หมายเลขลำดับก่อนหน้า) ช่องทำซ้ำและยกเลิกจะเก็บข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่บันทึกนี้บันทึกไว้และวิธีการยกเลิกการเปลี่ยนแปลงนั้น หมายเลขลำดับก่อนหน้าเป็นข้อมูลอ้างอิงถึงบันทึกการเปลี่ยนแปลงก่อนหน้าที่สร้างขึ้นสำหรับธุรกรรมนี้ ในกรณีที่ธุรกรรมถูกยกเลิก คุณสามารถย้อนกลับไปยังไฟล์บันทึกโดยใช้หมายเลขลำดับก่อนหน้าเพื่อยกเลิกการกระทำทั้งหมดที่เกิดขึ้นภายในธุรกรรมนั้นได้
ทุกธุรกรรมจะเริ่มต้นโดยปริยายด้วยรายการประเภท "อัปเดต" รายการแรกสำหรับรหัสธุรกรรมที่กำหนด และจะได้รับการยืนยันด้วยรายการ "สิ้นสุดบันทึก" (EOL) สำหรับธุรกรรมนั้น
ในระหว่างการกู้คืน หรือในขณะที่ยกเลิกการกระทำของธุรกรรมที่ถูกยกเลิก ระบบจะบันทึกข้อมูลพิเศษชนิดหนึ่งที่เรียกว่า บันทึกการชดเชย (Compensation Log Record หรือ CLR) เพื่อบันทึกว่าการกระทำนั้นได้ถูกยกเลิกไปแล้ว CLR มีรูปแบบ (หมายเลขลำดับ, รหัสธุรกรรม, รหัสหน้า, ทำซ้ำ, หมายเลขลำดับก่อนหน้า, หมายเลขลำดับการยกเลิกถัดไป) ช่องทำซ้ำ (Redo) จะบันทึกการใช้ช่องยกเลิก (Undo) ของการกระทำที่ถูกย้อนกลับ และช่องยกเลิก (Undo) จะถูกละเว้นเนื่องจาก CLR จะไม่ถูกย้อนกลับ
การกู้คืน
กระบวนการกู้คืนทำงานเป็นสามขั้นตอน ขั้นตอนแรกคือ การวิเคราะห์ ซึ่งจะคำนวณข้อมูลที่จำเป็นทั้งหมดจากไฟล์บันทึก ขั้นตอนการทำซ้ำ (Redo) จะกู้คืนฐานข้อมูลให้อยู่ในสถานะเดียวกับตอนที่เกิดข้อผิดพลาด รวมถึงการเปลี่ยนแปลงทั้งหมดของธุรกรรมที่ยังไม่ได้รับการยืนยันซึ่งกำลังทำงานอยู่ ณ จุดนั้น ขั้นตอนการยกเลิก (Undo) จะยกเลิกการเปลี่ยนแปลงที่ยังไม่ได้รับการยืนยันทั้งหมด ทำให้ฐานข้อมูลอยู่ในสถานะที่สอดคล้องกัน
การวิเคราะห์
ในระหว่างขั้นตอนการวิเคราะห์ เราจะคืนค่า DPT และ TT ให้กลับไปเป็นสภาพเดิม ณ เวลาที่เกิดอุบัติเหตุ
เราตรวจสอบไฟล์บันทึก (ตั้งแต่ต้นหรือจุดตรวจสอบสุดท้าย) และเพิ่มธุรกรรมทั้งหมดที่เราพบรายการ "เริ่มธุรกรรม" ลงใน TT เมื่อใดก็ตามที่พบรายการ "สิ้นสุดบันทึก" ธุรกรรมที่เกี่ยวข้องจะถูกลบออก นอกจากนี้ หมายเลขลำดับสุดท้ายของแต่ละธุรกรรมก็จะถูกเก็บรักษาไว้ด้วย
ในระหว่างการทำงานเดียวกัน เรายังเติมตารางหน้าข้อมูลที่เปลี่ยนแปลง (dirty page table) โดยการเพิ่มรายการใหม่ทุกครั้งที่เราพบหน้าข้อมูลที่ได้รับการแก้ไขและยังไม่ได้อยู่ในตาราง DPT อย่างไรก็ตาม การคำนวณนี้จะคำนวณเฉพาะส่วนของหน้าข้อมูลที่เปลี่ยนแปลงทั้งหมด ณ เวลาที่เกิดข้อผิดพลาดเท่านั้น เนื่องจากเราไม่ได้ตรวจสอบไฟล์ฐานข้อมูลจริงว่าหน้าข้อมูลนั้นถูกเขียนกลับไปยังที่จัดเก็บหรือไม่
ทำซ้ำ
จาก DPT เราสามารถคำนวณหมายเลขลำดับขั้นต่ำของเพจที่มีการเปลี่ยนแปลงได้ จากนั้น เราต้องเริ่มทำซ้ำการกระทำต่างๆ จนกระทั่งเกิดข้อผิดพลาด ในกรณีที่การกระทำเหล่านั้นยังไม่ได้ถูกบันทึกไว้
เมื่อเราตรวจสอบไฟล์บันทึก เราจะตรวจสอบแต่ละรายการว่าหน้า P ที่แก้ไขในรายการนั้นมีอยู่ใน DPT หรือไม่ หากไม่มี เราก็ไม่จำเป็นต้องทำซ้ำรายการนี้ เนื่องจากข้อมูลยังคงอยู่ในดิสก์ หากหน้า P มีอยู่ในตาราง DPT เราจะตรวจสอบว่าหมายเลขลำดับใน DPT น้อยกว่าหมายเลขลำดับของระเบียนบันทึกหรือไม่ (กล่าวคือ การเปลี่ยนแปลงในบันทึกใหม่กว่าเวอร์ชันล่าสุดที่ถูกบันทึกไว้หรือไม่) หากไม่เป็นเช่นนั้น เราก็ไม่ต้องทำซ้ำรายการนั้น เนื่องจากมีการเปลี่ยนแปลงอยู่แล้ว หากเป็นเช่นนั้น เราจะดึงหน้าจากที่เก็บข้อมูลในฐานข้อมูลและตรวจสอบหมายเลขลำดับที่เก็บไว้ในหน้ากับหมายเลขลำดับในระเบียนบันทึก หากหมายเลขลำดับที่เก็บไว้ในหน้าน้อยกว่าหมายเลขลำดับในระเบียนบันทึก หน้าดังกล่าวจำเป็นต้องถูกเขียนลงดิสก์ การตรวจสอบนี้จำเป็นเพราะ DPT ที่กู้คืนมานั้นเป็นเพียงส่วนขยายแบบอนุรักษ์นิยมของหน้าที่จำเป็นต้องมีการเปลี่ยนแปลงจริงๆ สุดท้าย เมื่อการตรวจสอบทั้งหมดข้างต้นเสร็จสิ้นและล้มเหลว เราจะทำการดำเนินการทำซ้ำอีกครั้งและบันทึกหมายเลขลำดับใหม่ลงในหน้าเว็บ การดำเนินการนี้มีความสำคัญต่อการกู้คืนจากข้อผิดพลาดระหว่างขั้นตอนการทำซ้ำ เนื่องจากจะไม่ทำการทำซ้ำสองครั้งกับหน้าเว็บเดียวกัน
เลิกทำ
หลังจากขั้นตอน Redo เสร็จสิ้น ฐานข้อมูลจะสะท้อนสถานะที่แน่นอน ณ เวลาที่เกิดข้อผิดพลาด อย่างไรก็ตาม การเปลี่ยนแปลงของธุรกรรมที่ยังไม่ได้รับการยืนยันจะต้องถูกยกเลิกเพื่อกู้คืนฐานข้อมูลให้อยู่ในสถานะที่สอดคล้องกัน
สำหรับขั้นตอนนี้ เราจะไล่ดูบันทึกย้อนหลังสำหรับแต่ละรายการธุรกรรมใน TT (ซึ่งสามารถรวมเข้าด้วยกันได้) โดยใช้ฟิลด์หมายเลขลำดับก่อนหน้าในเรคอร์ด สำหรับแต่ละรายการ เราจะยกเลิกการเปลี่ยนแปลง (โดยใช้ข้อมูลในฟิลด์ยกเลิก) และเขียนเรคอร์ดบันทึกการชดเชยลงในไฟล์บันทึก หากเราพบเรคอร์ดเริ่มต้นธุรกรรม เราจะเขียนเรคอร์ดสิ้นสุดธุรกรรมสำหรับธุรกรรมนั้น
บันทึกการชดเชย (CLR) ช่วยให้สามารถกู้คืนระบบได้ในกรณีที่เกิดข้อผิดพลาดระหว่างขั้นตอนการกู้คืน ซึ่งไม่ใช่เรื่องแปลกอย่างที่คิด เนื่องจากขั้นตอนการกู้คืนอาจใช้เวลานานพอสมควร บันทึก CLR จะถูกอ่านในระหว่างขั้นตอนการวิเคราะห์ และทำซ้ำในระหว่างขั้นตอนการทำซ้ำ (Redo)
จุดตรวจ
เพื่อหลีกเลี่ยงการสแกนไฟล์บันทึกทั้งหมดใหม่อีกครั้งในระหว่างขั้นตอนการวิเคราะห์ ขอแนะนำให้บันทึกค่า DPT และ TT ลงในไฟล์บันทึกเป็นประจำเพื่อสร้างจุดตรวจสอบ แทนที่จะต้องอ่านไฟล์ทั้งหมดใหม่ ก็เพียงแค่ย้อนกลับไปจนกว่าจะพบจุดตรวจสอบ จากนั้นก็สามารถกู้คืนค่า DPT และ TT ให้กลับมาเป็นเหมือนเดิมในขณะที่เกิดข้อผิดพลาดได้โดยการอ่านไฟล์บันทึกไปข้างหน้าอีกครั้ง จากนั้นก็สามารถดำเนินการต่อได้ตามปกติด้วยฟังก์ชัน Redo และ Undo
วิธีการสร้างจุดตรวจสอบ แบบดั้งเดิม นั้นเกี่ยวข้องกับการล็อกฐานข้อมูลทั้งหมดเพื่อป้องกันการเปลี่ยนแปลงใน DPT และ TT ในระหว่างการสร้างจุดตรวจสอบ การบันทึกแบบฟัซซี (Fuzzy logging) แก้ปัญหานี้โดยการเขียนบันทึกสองรายการ รายการแรกคือบันทึก "Fuzzy Log Starts Here" และรายการที่สองคือจุดตรวจสอบจริง หลังจากเตรียมข้อมูลจุดตรวจสอบเสร็จแล้ว สามารถสร้างบันทึกอื่นๆ ขึ้นได้ระหว่างบันทึกทั้งสองรายการ ในระหว่างการกู้คืน จำเป็นต้องค้นหาบันทึกทั้งสองรายการเพื่อให้ได้จุดตรวจสอบที่ถูกต้อง
ลิงก์ภายนอก
- ผลกระทบของตระกูลอัลกอริธึมการล็อกและการกู้คืน ARIES - C. Mohan , เก็บถาวรจากต้นฉบับเมื่อ 2012-08-19 , เรียกดูเมื่อ 2013-09-18
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ อัลกอริทึมสำหรับการกู้คืนและการแยกส่วนโดยใช้ประโยชน์จากความหมาย
ในวิทยาการคอมพิวเตอร์อัลกอริทึมสำหรับการกู้คืนและการแยกโดยใช้ความหมายหรือARIESเป็นอัลกอริทึม การกู้คืน ที่ออกแบบมาเพื่อใช้งานกับ วิธีการขโมยฐานข้อมูล แบบไม่ใช้กำลัง อั ลกอริทึมนี้.
การบันทึกข้อมูล
อัลกอริทึม ARIES อาศัยการบันทึกการดำเนินการฐานข้อมูลทั้งหมดด้วยหมายเลขลำดับที่เพิ่มขึ้น โดยปกติไฟล์บันทึกที่ได้จะถูกจัดเก็บไว้ใน "พื้นที่จัดเก็บข้อมูลที่เสถียร" ซึ่งก็คือสื่อจัดเก็บข้อมูลที่คาดว่าจะสามารถทนต่อการขัดข้องและความล้มเหลวของฮาร์ดแวร์ได้
การกู้คืน
กระบวนการกู้คืนทำงานเป็นสามขั้นตอน ขั้นตอนแรกคือ การวิเคราะห์ ซึ่งจะคำนวณข้อมูลที่จำเป็นทั้งหมดจากไฟล์บันทึก ขั้นตอนการทำซ้ำ (Redo) จะกู้คืนฐานข้อมูลให้อยู่ในสถานะเดียวกับตอนที่เกิดข้อผิดพลาด...
การวิเคราะห์
ในระหว่างขั้นตอนการวิเคราะห์ เราจะคืนค่า DPT และ TT ให้กลับไปเป็นสภาพเดิม ณ เวลาที่เกิดอุบัติเหตุ