อ่าน 4 นาที
การควบคุมการทำงานพร้อมกันโดยอิงตามเวลาประทับ
ใน วิทยาการคอมพิวเตอร์ อั ลกอริทึม ควบคุมการทำงานพร้อมกันแบบอิงเวลาประทับถือ เป็น วิธี การควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดี มีการใช้ใน ฐานข้อมูล บางแห่ง...
การควบคุมการทำงานพร้อมกันโดยอิงตามเวลาประทับ
ในวิทยาการคอมพิวเตอร์อั ลกอริทึม ควบคุมการทำงานพร้อมกันแบบอิงเวลาประทับถือเป็น วิธี การควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดีมีการใช้ในฐานข้อมูล บางแห่ง เพื่อจัดการธุรกรรมอย่างปลอดภัยโดยใช้เวลาประทับเพื่อการซิงโครไนซ์แทนการล็อก[ 1 ]
การดำเนินการ
ข้อสมมติฐาน
- ค่าเวลาแต่ละค่ามีความเป็นเอกลักษณ์และแสดงถึงช่วงเวลาหนึ่งได้อย่างแม่นยำ
- ค่าเวลาที่มีค่าสูงกว่าจะเกิดขึ้นในเวลาที่ช้ากว่าค่าเวลาที่มีค่าต่ำกว่า
การสร้างการประทับเวลา
มีวิธีการที่หลากหลายในการสร้างการประทับเวลา
- โดยใช้ค่าเวลาของนาฬิการะบบ ณ จุดเริ่มต้นของการทำธุรกรรมเป็นตัวกำหนดเวลา
- ใช้ ตัวนับร่วมที่ ปลอดภัยต่อเธรดซึ่งจะเพิ่มขึ้นหนึ่งครั้งเมื่อเริ่มต้นธุรกรรมเพื่อใช้เป็นตัวประทับเวลา
- เป็นการผสมผสานระหว่างสองวิธีข้างต้น
คำจำกัดความอย่างเป็นทางการ
ธุรกรรมแต่ละรายการ ( ) คือรายการลำดับของการกระทำ ( ) ก่อนที่ธุรกรรมจะดำเนินการการกระทำแรก ( ) จะมีการทำเครื่องหมายด้วยการประทับเวลา ปัจจุบัน หรือลำดับที่เรียงลำดับอย่างเคร่งครัด อื่นๆ: ธุรกรรมทุกรายการยังได้รับเซตของธุรกรรมที่ว่างเปล่าในตอนเริ่มต้นซึ่งธุรกรรมนั้นขึ้นอยู่ด้วยและเซตของวัตถุเก่าที่ว่างเปล่าในตอนเริ่มต้นซึ่งธุรกรรมนั้นอัปเดต
แต่ละอ็อบเจ็กต์ ในฐานข้อมูลจะมีฟิลด์ประทับเวลาสองฟิลด์ ซึ่งไม่ได้ถูกนำไปใช้เพื่อวัตถุประสงค์อื่นใดนอกจากการควบคุมการทำงานพร้อมกัน:
- คือค่าเวลาของการทำธุรกรรมครั้งสุดท้ายที่อ่านค่าของวัตถุ ( โดยที่คือค่าเวลาของการทำธุรกรรมครั้งสุดท้ายที่อ่านค่าของวัตถุ)
- คือค่าเวลาของการทำธุรกรรมครั้งสุดท้ายที่อัปเดตค่าของวัตถุ ( โดยที่คือค่าเวลาที่ทำการทำธุรกรรมครั้งสุดท้ายที่อัปเดตค่าของวัตถุ)
สำหรับทุกคน:
- สำหรับแต่ละการกระทำ:
- หากต้องการอ่านค่าของ:
- หาก เกิดกรณี ดังกล่าวให้ยกเลิก (เนื่องจากเธรดที่ใหม่กว่าได้เขียนทับค่าไปแล้ว)
- มิฉะนั้น อัปเดตชุดการพึ่งพาและตั้งค่า;
- หากต้องการอัปเดตค่าของ:
- ถ้าเป็นเช่นนั้นให้ยกเลิก (เนื่องจากเธรดที่ใหม่กว่ากำลังใช้ค่าเก่าอยู่แล้ว)
- ถ้าอย่างนั้นให้ข้ามไป (ตามกฎการเขียนของโทมัส )
- มิฉะนั้น ให้เก็บค่าก่อนหน้าไว้ ตั้งค่าและอัปเดตค่าของ
- หากต้องการอ่านค่าของ:
- ในขณะที่มีธุรกรรมที่ยังไม่เสร็จสิ้น: โปรดรอ
- หากมีธุรกรรมใดที่ ถูกยกเลิก ให้ยกเลิกธุรกรรมนั้นด้วย
- มิเช่นนั้น: ยืนยัน
เพื่อยกเลิก :
- สำหรับแต่ละใน
- ถ้าเท่ากันให้คืนค่าและ
คำจำกัดความอย่างไม่เป็นทางการ
ทุกครั้งที่มีการเริ่มต้นธุรกรรม จะมีการประทับเวลาให้กับธุรกรรมนั้น การประทับเวลานี้ระบุว่าธุรกรรมเริ่มต้นเมื่อใด การประทับเวลานี้ช่วยให้มั่นใจได้ว่าธุรกรรมจะมีผลต่อวัตถุแต่ละชิ้นตามลำดับการประทับเวลาของธุรกรรมนั้นๆ ดังนั้น หากมีการดำเนินการสองอย่างที่มีผลต่อวัตถุเดียวกันจากธุรกรรมที่แตกต่างกัน การดำเนินการของธุรกรรมที่มีการประทับเวลาก่อนหน้าจะต้องดำเนินการก่อนการดำเนินการของธุรกรรมที่มีการประทับเวลาภายหลัง อย่างไรก็ตาม หากการดำเนินการของธุรกรรมที่ไม่ถูกต้องปรากฏขึ้นก่อน ธุรกรรมนั้นจะถูกยกเลิกและต้องเริ่มต้นธุรกรรมใหม่
ทุกอ็อบเจ็กต์ในฐานข้อมูลจะมีไทม์สแตมป์สำหรับการอ่านซึ่งจะได้รับการอัปเดตทุกครั้งที่มีการอ่านข้อมูลของอ็อบเจ็กต์นั้น และไทม์สแตมป์สำหรับการเขียนซึ่งจะได้รับการอัปเดตทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลของอ็อบเจ็กต์นั้น
หากธุรกรรมต้องการอ่านอ็อบเจ็กต์
- แต่หากการทำธุรกรรมเริ่มต้นก่อนเวลาประทับการเขียนของวัตถุ นั่นหมายความว่ามีบางอย่างเปลี่ยนแปลงข้อมูลของวัตถุหลังจากที่การทำธุรกรรมเริ่มต้นแล้ว ในกรณีนี้ การทำธุรกรรมจะถูกยกเลิกและต้องเริ่มต้นใหม่
- และหากการทำธุรกรรมเริ่มต้นหลังจากเวลาที่เขียนข้อมูลลงในวัตถุ นั่นหมายความว่าสามารถ อ่านข้อมูลในวัตถุ ได้อย่างปลอดภัยในกรณีนี้ หากเวลาของการทำธุรกรรมเกิดขึ้นหลังจากเวลาที่อ่านข้อมูลลงในวัตถุ เวลาของการอ่านจะถูกตั้งค่าเป็นเวลาของการทำธุรกรรม
หากธุรกรรมต้องการเขียนข้อมูลลงในอ็อบเจ็กต์
- แต่เนื่องจากธุรกรรมเริ่มต้นก่อนเวลาประทับการอ่านของวัตถุ นั่นหมายความว่ามีบางสิ่งบางอย่างได้เข้าถึงวัตถุแล้ว และเราสันนิษฐานว่ามันได้คัดลอกข้อมูลของวัตถุไป ดังนั้นเราจึงไม่สามารถเขียนลงในวัตถุได้ เพราะจะทำให้ข้อมูลที่คัดลอกมานั้นไม่ถูกต้อง ดังนั้นธุรกรรมจึงถูกยกเลิกและต้องเริ่มต้นใหม่
- และหากธุรกรรมเริ่มต้นก่อนเวลาประทับการเขียนของวัตถุ นั่นหมายความว่ามีบางอย่างเปลี่ยนแปลงวัตถุไปแล้วนับตั้งแต่เราเริ่มต้นธุรกรรม ในกรณีนี้ เราใช้กฎการเขียนของ Thomasและข้ามการดำเนินการเขียนของเราไป แล้วดำเนินการต่อตามปกติ ธุรกรรมไม่จำเป็นต้องถูกยกเลิกหรือเริ่มต้นใหม่
- มิฉะนั้น ธุรกรรมจะเขียนข้อมูลลงในอ็อบเจ็กต์ และเวลาประทับการเขียนของอ็อบเจ็กต์จะถูกตั้งค่าเป็นเวลาประทับของธุรกรรม
ไม่สามารถเกิดขึ้นได้จริงในทางกายภาพ
พฤติกรรมดังกล่าวเป็นไปไม่ได้ในทางกายภาพหากผลลัพธ์ของการทำธุรกรรมไม่สามารถเกิดขึ้นได้หากการทำธุรกรรมเกิดขึ้นทันที สถานการณ์ต่อไปนี้เป็นเพียงสองสถานการณ์เท่านั้นที่ส่งผลให้เกิดพฤติกรรมที่เป็นไปไม่ได้ในทางกายภาพ:
- ธุรกรรม T พยายามอ่านค่า X แต่ TS(T) < WT(X) เหตุผล: หมายความว่าค่า X ถูกเขียนโดยธุรกรรมอื่นหลังจากที่ T เริ่มทำงานแล้ว
- ธุรกรรม T พยายามเขียนข้อมูลลงใน X แต่ TS(T) < RT(X) เหตุผล: หมายความว่าธุรกรรมที่เกิดขึ้นภายหลังได้อ่านข้อมูล X ไปก่อนที่ T จะเขียนลงไป
ความสามารถในการกู้คืน
โปรดทราบว่าการเรียงลำดับตามเวลาในรูปแบบพื้นฐานนั้นไม่สามารถสร้างประวัติที่สามารถกู้คืนได้ ตัวอย่างเช่น ลองพิจารณาประวัติการทำธุรกรรมดังต่อไปนี้:
สิ่งนี้อาจเกิดขึ้นได้จากตัวกำหนดตารางเวลา TO แต่ไม่สามารถกู้คืนได้ เนื่องจากมีการคอมมิตแม้ว่าจะอ่านจากธุรกรรมที่ยังไม่คอมมิตก็ตาม เพื่อให้แน่ใจว่าได้สร้างประวัติที่สามารถกู้คืนได้ ตัวกำหนดตารางเวลาสามารถเก็บรายการธุรกรรมอื่นๆ ที่แต่ละธุรกรรมได้อ่านจากและไม่อนุญาตให้ธุรกรรมคอมมิตก่อนที่รายการนี้จะประกอบด้วยธุรกรรมที่คอมมิตแล้วเท่านั้น เพื่อหลีกเลี่ยงการยกเลิกแบบต่อเนื่อง ตัวกำหนดตารางเวลาสามารถติดแท็กข้อมูลที่เขียนโดยธุรกรรมที่ยังไม่คอมมิตว่าเป็นข้อมูลที่ " สกปรก"และไม่อนุญาตให้เริ่มการดำเนินการอ่านบนรายการข้อมูลดังกล่าวจนกว่าจะลบแท็กออก เพื่อให้ได้ประวัติที่เข้มงวด ตัวกำหนดตารางเวลาไม่ควรอนุญาตให้มีการดำเนินการใดๆ กับรายการที่ "สกปรก"
ปัญหาในการนำไปใช้งาน
ความละเอียดของไทม์สแตมป์
นี่คือช่วงเวลาขั้นต่ำที่ผ่านไประหว่างการประทับเวลาสองครั้งที่อยู่ติดกัน หากความละเอียดของการประทับเวลามากเกินไป (หยาบเกินไป) ความเป็นไปได้ที่การประทับเวลาสองครั้งหรือมากกว่านั้นจะเท่ากันก็จะเพิ่มขึ้น ซึ่งอาจทำให้ธุรกรรมบางอย่างดำเนินการผิดลำดับได้ ตัวอย่างเช่น สำหรับระบบที่สร้างการประทับเวลาที่ไม่ซ้ำกันหนึ่งร้อยครั้งต่อวินาที เหตุการณ์สองเหตุการณ์ที่เกิดขึ้นห่างกัน 2 มิลลิวินาที อาจได้รับการประทับเวลาเดียวกัน แม้ว่าจะเกิดขึ้นในเวลาที่ต่างกันก็ตาม
การล็อกด้วยการประทับเวลา
แม้ว่าเทคนิคนี้จะไม่ใช่เทคนิคล็อก เนื่องจากวัตถุจะไม่ถูกล็อกจากการเข้าถึงพร้อมกันตลอดระยะเวลาของธุรกรรม แต่การบันทึกเวลาแต่ละครั้งลงในวัตถุนั้น จำเป็นต้องมีการล็อกวัตถุหรือพร็อกซีของวัตถุนั้นเป็นระยะเวลาสั้นมาก
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การควบคุมการทำงานพร้อมกันโดยอิงตามเวลาประทับ
ใน วิทยาการคอมพิวเตอร์ อั ลกอริทึม ควบคุมการทำงานพร้อมกันแบบอิงเวลาประทับถือ เป็น วิธี การควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดี มีการใช้ใน ฐานข้อมูล บางแห่ง...
ข้อสมมติฐาน
ค่าเวลาแต่ละค่ามีความเป็นเอกลักษณ์และแสดงถึงช่วงเวลาหนึ่งได้อย่างแม่นยำ ค่าเวลาที่มีค่าสูงกว่าจะเกิดขึ้นในเวลาที่ช้ากว่าค่าเวลาที่มีค่าต่ำกว่า
การสร้างการประทับเวลา
มีวิธีการที่หลากหลายในการสร้างการประทับเวลา
คำจำกัดความอย่างเป็นทางการ
ธุรกรรมแต่ละรายการ ( ) คือรายการลำดับของการกระทำ ( ) ก่อนที่ธุรกรรมจะดำเนินการการกระทำแรก ( ) จะมีการทำเครื่องหมายด้วย การประทับเวลา ปัจจุบัน หรือลำดับ ที่เรียงลำดับอย่างเคร่งครัด อื่นๆ:...