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

อ่าน 2 นาที

การล็อกบันทึก

การล็อกระเบียน เป็นเทคนิคที่ใช้ป้องกันการเข้าถึงข้อมูลใน ฐานข้อมูล พร้อมกัน เพื่อป้องกันผลลัพธ์ที่ไม่สอดคล้องกัน

การล็อกบันทึก

การล็อกระเบียนเป็นเทคนิคที่ใช้ป้องกันการเข้าถึงข้อมูลในฐานข้อมูล พร้อมกัน เพื่อป้องกันผลลัพธ์ที่ไม่สอดคล้องกัน

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

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

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

ในทฤษฎีการจัดการฐานข้อมูล การล็อกใช้เพื่อแยก การใช้งานฐานข้อมูล ออกจากกันระหว่างผู้ใช้ฐานข้อมูลหลายคน นี่คือตัวอักษร "I" ในคำย่อ ACID

คำอธิบายที่ละเอียดถี่ถ้วนและน่าเชื่อถือเกี่ยวกับการล็อกถูกเขียนโดยJim Gray [ 1 ]

ระดับความละเอียดของตัวล็อค

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

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

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

ใน ฐานข้อมูล SQLโดยทั่วไปแล้วระเบียนจะเรียกว่า "แถว"

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

การใช้กุญแจ

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

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

สามารถขอเลือกใช้กุญแจได้สองประเภทหลัก:

กุญแจพิเศษ

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

  • ตรวจสอบให้แน่ใจว่าได้ล็อกกุญแจไว้ในระยะเวลาที่สั้นที่สุดเท่าที่จะเป็นไปได้
  • อย่าคงการล็อกไว้ระหว่างการเรียกใช้ระบบหรือฟังก์ชันในกรณีที่เอนทิตีไม่ได้ทำงานอยู่บนโปรเซสเซอร์อีกต่อไป เพราะอาจนำไปสู่ภาวะการติดตายได้
  • ตรวจสอบให้แน่ใจว่าหากมีการออกจากระบบโดยไม่คาดคิดด้วยเหตุผลใดก็ตาม ตัวล็อกจะถูกปลดล็อก

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

กุญแจที่ใช้ร่วมกัน

การล็อกแบบใช้ร่วมกันแตกต่างจากการล็อกแบบผูกขาดตรงที่รายชื่อผู้ถือครองสามารถมีได้หลายรายการ การล็อกแบบใช้ร่วมกันอนุญาตให้ผู้ถือครองทุกคนอ่านเนื้อหาของระเบียนได้ โดยรู้ว่าระเบียนนั้นจะไม่สามารถเปลี่ยนแปลงได้จนกว่าผู้ถือครองทุกคนจะปลดล็อกแล้ว การล็อกแบบผูกขาดไม่สามารถทำได้เมื่อระเบียนนั้นถูกล็อกอยู่แล้ว (ไม่ว่าจะเป็นแบบผูกขาดหรือแบบใช้ร่วมกัน) โดยหน่วยงานอื่น

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

ดูเพิ่มเติม

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

สรุปเนื้อหา

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

ข้อมูลสำคัญเกี่ยวกับ การล็อกบันทึก

การล็อกระเบียน เป็นเทคนิคที่ใช้ป้องกันการเข้าถึงข้อมูลใน ฐานข้อมูล พร้อมกัน เพื่อป้องกันผลลัพธ์ที่ไม่สอดคล้องกัน

ระดับความละเอียดของตัวล็อค

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

การใช้กุญแจ

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

กุญแจพิเศษ

ล็อกแบบผูกขาดจะถูกถือครองโดยหน่วยงานเดียวเท่านั้น โดยปกติแล้วเพื่อวัตถุประสงค์ในการเขียนข้อมูลลงในระเบียน หากรูปแบบการล็อกแสดงด้วยรายการ รายการ ผู้ถือครอง จะมีเพียงรายการเดียว เนื่องจากล็อกประเภทนี้จะปิดกั้นไม่ให้หน่วยงานอื่นที่ต้องการล็อกนั้นประมวลผลได้...