กลับไปหน้าบทความ

อ่าน 4 นาที

การควบคุมการทำงานพร้อมกันโดยอิงตามเวลาประทับ

ใน วิทยาการคอมพิวเตอร์ อั ลกอริทึม ควบคุมการทำงานพร้อมกันแบบอิงเวลาประทับถือ เป็น วิธี การควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดี มีการใช้ใน ฐานข้อมูล บางแห่ง...

การควบคุมการทำงานพร้อมกันโดยอิงตามเวลาประทับ

ในวิทยาการคอมพิวเตอร์อั ลกอริทึม ควบคุมการทำงานพร้อมกันแบบอิงเวลาประทับถือเป็น วิธี การควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดีมีการใช้ในฐานข้อมูล บางแห่ง เพื่อจัดการธุรกรรมอย่างปลอดภัยโดยใช้เวลาประทับเพื่อการซิงโครไนซ์แทนการล็อก[ 1 ]

การดำเนินการ

ข้อสมมติฐาน

  • ค่าเวลาแต่ละค่ามีความเป็นเอกลักษณ์และแสดงถึงช่วงเวลาหนึ่งได้อย่างแม่นยำ
  • ค่าเวลาที่มีค่าสูงกว่าจะเกิดขึ้นในเวลาที่ช้ากว่าค่าเวลาที่มีค่าต่ำกว่า

การสร้างการประทับเวลา

มีวิธีการที่หลากหลายในการสร้างการประทับเวลา

  • โดยใช้ค่าเวลาของนาฬิการะบบ ณ จุดเริ่มต้นของการทำธุรกรรมเป็นตัวกำหนดเวลา
  • ใช้ ตัวนับร่วมที่ ปลอดภัยต่อเธรดซึ่งจะเพิ่มขึ้นหนึ่งครั้งเมื่อเริ่มต้นธุรกรรมเพื่อใช้เป็นตัวประทับเวลา
  • เป็นการผสมผสานระหว่างสองวิธีข้างต้น

คำจำกัดความอย่างเป็นทางการ

ธุรกรรมแต่ละรายการ ( ) คือรายการลำดับของการกระทำ ( ) ก่อนที่ธุรกรรมจะดำเนินการการกระทำแรก ( ) จะมีการทำเครื่องหมายด้วยการประทับเวลา ปัจจุบัน หรือลำดับที่เรียงลำดับอย่างเคร่งครัด อื่นๆ: ธุรกรรมทุกรายการยังได้รับเซตของธุรกรรมที่ว่างเปล่าในตอนเริ่มต้นซึ่งธุรกรรมนั้นขึ้นอยู่ด้วยและเซตของวัตถุเก่าที่ว่างเปล่าในตอนเริ่มต้นซึ่งธุรกรรมนั้นอัปเดต

แต่ละอ็อบเจ็กต์ ในฐานข้อมูลจะมีฟิลด์ประทับเวลาสองฟิลด์ ซึ่งไม่ได้ถูกนำไปใช้เพื่อวัตถุประสงค์อื่นใดนอกจากการควบคุมการทำงานพร้อมกัน:

  • คือค่าเวลาของการทำธุรกรรมครั้งสุดท้ายที่อ่านค่าของวัตถุ ( โดยที่คือค่าเวลาของการทำธุรกรรมครั้งสุดท้ายที่อ่านค่าของวัตถุ)
  • คือค่าเวลาของการทำธุรกรรมครั้งสุดท้ายที่อัปเดตค่าของวัตถุ ( โดยที่คือค่าเวลาที่ทำการทำธุรกรรมครั้งสุดท้ายที่อัปเดตค่าของวัตถุ)

สำหรับทุกคน:

สำหรับแต่ละการกระทำ:
หากต้องการอ่านค่าของ:
หาก เกิดกรณี ดังกล่าวให้ยกเลิก (เนื่องจากเธรดที่ใหม่กว่าได้เขียนทับค่าไปแล้ว)
มิฉะนั้น อัปเดตชุดการพึ่งพาและตั้งค่า;
หากต้องการอัปเดตค่าของ:
ถ้าเป็นเช่นนั้นให้ยกเลิก (เนื่องจากเธรดที่ใหม่กว่ากำลังใช้ค่าเก่าอยู่แล้ว)
ถ้าอย่างนั้นให้ข้ามไป (ตามกฎการเขียนของโทมัส )
มิฉะนั้น ให้เก็บค่าก่อนหน้าไว้ ตั้งค่าและอัปเดตค่าของ
ในขณะที่มีธุรกรรมที่ยังไม่เสร็จสิ้น: โปรดรอ
หากมีธุรกรรมใดที่ ถูกยกเลิก ให้ยกเลิกธุรกรรมนั้นด้วย
มิเช่นนั้น: ยืนยัน

เพื่อยกเลิก :

สำหรับแต่ละใน
ถ้าเท่ากันให้คืนค่าและ

คำจำกัดความอย่างไม่เป็นทางการ

ทุกครั้งที่มีการเริ่มต้นธุรกรรม จะมีการประทับเวลาให้กับธุรกรรมนั้น การประทับเวลานี้ระบุว่าธุรกรรมเริ่มต้นเมื่อใด การประทับเวลานี้ช่วยให้มั่นใจได้ว่าธุรกรรมจะมีผลต่อวัตถุแต่ละชิ้นตามลำดับการประทับเวลาของธุรกรรมนั้นๆ ดังนั้น หากมีการดำเนินการสองอย่างที่มีผลต่อวัตถุเดียวกันจากธุรกรรมที่แตกต่างกัน การดำเนินการของธุรกรรมที่มีการประทับเวลาก่อนหน้าจะต้องดำเนินการก่อนการดำเนินการของธุรกรรมที่มีการประทับเวลาภายหลัง อย่างไรก็ตาม หากการดำเนินการของธุรกรรมที่ไม่ถูกต้องปรากฏขึ้นก่อน ธุรกรรมนั้นจะถูกยกเลิกและต้องเริ่มต้นธุรกรรมใหม่

ทุกอ็อบเจ็กต์ในฐานข้อมูลจะมีไทม์สแตมป์สำหรับการอ่านซึ่งจะได้รับการอัปเดตทุกครั้งที่มีการอ่านข้อมูลของอ็อบเจ็กต์นั้น และไทม์สแตมป์สำหรับการเขียนซึ่งจะได้รับการอัปเดตทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลของอ็อบเจ็กต์นั้น

หากธุรกรรมต้องการอ่านอ็อบเจ็กต์

  • แต่หากการทำธุรกรรมเริ่มต้นก่อนเวลาประทับการเขียนของวัตถุ นั่นหมายความว่ามีบางอย่างเปลี่ยนแปลงข้อมูลของวัตถุหลังจากที่การทำธุรกรรมเริ่มต้นแล้ว ในกรณีนี้ การทำธุรกรรมจะถูกยกเลิกและต้องเริ่มต้นใหม่
  • และหากการทำธุรกรรมเริ่มต้นหลังจากเวลาที่เขียนข้อมูลลงในวัตถุ นั่นหมายความว่าสามารถ อ่านข้อมูลในวัตถุ ได้อย่างปลอดภัยในกรณีนี้ หากเวลาของการทำธุรกรรมเกิดขึ้นหลังจากเวลาที่อ่านข้อมูลลงในวัตถุ เวลาของการอ่านจะถูกตั้งค่าเป็นเวลาของการทำธุรกรรม

หากธุรกรรมต้องการเขียนข้อมูลลงในอ็อบเจ็กต์

  • แต่เนื่องจากธุรกรรมเริ่มต้นก่อนเวลาประทับการอ่านของวัตถุ นั่นหมายความว่ามีบางสิ่งบางอย่างได้เข้าถึงวัตถุแล้ว และเราสันนิษฐานว่ามันได้คัดลอกข้อมูลของวัตถุไป ดังนั้นเราจึงไม่สามารถเขียนลงในวัตถุได้ เพราะจะทำให้ข้อมูลที่คัดลอกมานั้นไม่ถูกต้อง ดังนั้นธุรกรรมจึงถูกยกเลิกและต้องเริ่มต้นใหม่
  • และหากธุรกรรมเริ่มต้นก่อนเวลาประทับการเขียนของวัตถุ นั่นหมายความว่ามีบางอย่างเปลี่ยนแปลงวัตถุไปแล้วนับตั้งแต่เราเริ่มต้นธุรกรรม ในกรณีนี้ เราใช้กฎการเขียนของ Thomasและข้ามการดำเนินการเขียนของเราไป แล้วดำเนินการต่อตามปกติ ธุรกรรมไม่จำเป็นต้องถูกยกเลิกหรือเริ่มต้นใหม่
  • มิฉะนั้น ธุรกรรมจะเขียนข้อมูลลงในอ็อบเจ็กต์ และเวลาประทับการเขียนของอ็อบเจ็กต์จะถูกตั้งค่าเป็นเวลาประทับของธุรกรรม

ไม่สามารถเกิดขึ้นได้จริงในทางกายภาพ

พฤติกรรมดังกล่าวเป็นไปไม่ได้ในทางกายภาพหากผลลัพธ์ของการทำธุรกรรมไม่สามารถเกิดขึ้นได้หากการทำธุรกรรมเกิดขึ้นทันที สถานการณ์ต่อไปนี้เป็นเพียงสองสถานการณ์เท่านั้นที่ส่งผลให้เกิดพฤติกรรมที่เป็นไปไม่ได้ในทางกายภาพ:

  1. ธุรกรรม T พยายามอ่านค่า X แต่ TS(T) < WT(X) เหตุผล: หมายความว่าค่า X ถูกเขียนโดยธุรกรรมอื่นหลังจากที่ T เริ่มทำงานแล้ว
  2. ธุรกรรม T พยายามเขียนข้อมูลลงใน X แต่ TS(T) < RT(X) เหตุผล: หมายความว่าธุรกรรมที่เกิดขึ้นภายหลังได้อ่านข้อมูล X ไปก่อนที่ T จะเขียนลงไป

ความสามารถในการกู้คืน

โปรดทราบว่าการเรียงลำดับตามเวลาในรูปแบบพื้นฐานนั้นไม่สามารถสร้างประวัติที่สามารถกู้คืนได้ ตัวอย่างเช่น ลองพิจารณาประวัติการทำธุรกรรมดังต่อไปนี้:

สิ่งนี้อาจเกิดขึ้นได้จากตัวกำหนดตารางเวลา TO แต่ไม่สามารถกู้คืนได้ เนื่องจากมีการคอมมิตแม้ว่าจะอ่านจากธุรกรรมที่ยังไม่คอมมิตก็ตาม เพื่อให้แน่ใจว่าได้สร้างประวัติที่สามารถกู้คืนได้ ตัวกำหนดตารางเวลาสามารถเก็บรายการธุรกรรมอื่นๆ ที่แต่ละธุรกรรมได้อ่านจากและไม่อนุญาตให้ธุรกรรมคอมมิตก่อนที่รายการนี้จะประกอบด้วยธุรกรรมที่คอมมิตแล้วเท่านั้น เพื่อหลีกเลี่ยงการยกเลิกแบบต่อเนื่อง ตัวกำหนดตารางเวลาสามารถติดแท็กข้อมูลที่เขียนโดยธุรกรรมที่ยังไม่คอมมิตว่าเป็นข้อมูลที่ " สกปรก"และไม่อนุญาตให้เริ่มการดำเนินการอ่านบนรายการข้อมูลดังกล่าวจนกว่าจะลบแท็กออก เพื่อให้ได้ประวัติที่เข้มงวด ตัวกำหนดตารางเวลาไม่ควรอนุญาตให้มีการดำเนินการใดๆ กับรายการที่ "สกปรก"

ปัญหาในการนำไปใช้งาน

ความละเอียดของไทม์สแตมป์

นี่คือช่วงเวลาขั้นต่ำที่ผ่านไประหว่างการประทับเวลาสองครั้งที่อยู่ติดกัน หากความละเอียดของการประทับเวลามากเกินไป (หยาบเกินไป) ความเป็นไปได้ที่การประทับเวลาสองครั้งหรือมากกว่านั้นจะเท่ากันก็จะเพิ่มขึ้น ซึ่งอาจทำให้ธุรกรรมบางอย่างดำเนินการผิดลำดับได้ ตัวอย่างเช่น สำหรับระบบที่สร้างการประทับเวลาที่ไม่ซ้ำกันหนึ่งร้อยครั้งต่อวินาที เหตุการณ์สองเหตุการณ์ที่เกิดขึ้นห่างกัน 2 มิลลิวินาที อาจได้รับการประทับเวลาเดียวกัน แม้ว่าจะเกิดขึ้นในเวลาที่ต่างกันก็ตาม

การล็อกด้วยการประทับเวลา

แม้ว่าเทคนิคนี้จะไม่ใช่เทคนิคล็อก เนื่องจากวัตถุจะไม่ถูกล็อกจากการเข้าถึงพร้อมกันตลอดระยะเวลาของธุรกรรม แต่การบันทึกเวลาแต่ละครั้งลงในวัตถุนั้น จำเป็นต้องมีการล็อกวัตถุหรือพร็อกซีของวัตถุนั้นเป็นระยะเวลาสั้นมาก

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Timestamp-based_concurrency_control&oldid=1345693528 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การควบคุมการทำงานพร้อมกันโดยอิงตามเวลาประทับ

ใน วิทยาการคอมพิวเตอร์ อั ลกอริทึม ควบคุมการทำงานพร้อมกันแบบอิงเวลาประทับถือ เป็น วิธี การควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ดี มีการใช้ใน ฐานข้อมูล บางแห่ง...

ข้อสมมติฐาน

ค่าเวลาแต่ละค่ามีความเป็นเอกลักษณ์และแสดงถึงช่วงเวลาหนึ่งได้อย่างแม่นยำ ค่าเวลาที่มีค่าสูงกว่าจะเกิดขึ้นในเวลาที่ช้ากว่าค่าเวลาที่มีค่าต่ำกว่า

การสร้างการประทับเวลา

มีวิธีการที่หลากหลายในการสร้างการประทับเวลา

คำจำกัดความอย่างเป็นทางการ

ธุรกรรมแต่ละรายการ ( ) คือรายการลำดับของการกระทำ ( ) ก่อนที่ธุรกรรมจะดำเนินการการกระทำแรก ( ) จะมีการทำเครื่องหมายด้วย การประทับเวลา ปัจจุบัน หรือลำดับ ที่เรียงลำดับอย่างเคร่งครัด อื่นๆ:...