การทำความเข้าใจ Journaling ใน MongoDB



บล็อกจะให้ข้อมูลสั้น ๆ เกี่ยวกับ Journaling ใน MongoDB

การทำงานกับ Mongod Write Operation

Mongod โฮสต์การดำเนินการเขียนในหน่วยความจำเป็นหลักในมุมมองที่ใช้ร่วมกัน เรียกว่าแชร์เนื่องจากมีการแมปหน่วยความจำในดิสก์จริง





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

ในที่นี้กระบวนการนี้เรียกว่า No Journal Option ซึ่งหมายความว่าในกรณีที่มีการหน่วงเวลา 60 วินาทีในการบันทึกข้อมูลจากหน่วยความจำลงดิสก์หรือปิดเครื่องอย่างกะทันหันหมายความว่าข้อมูลใด ๆ ที่อยู่ในหน่วยความจำอาจไม่สามารถเรียกคืนได้ ดังนั้น Journaling จึงมีความเกี่ยวข้องที่นี่



สิ่งสำคัญคือต้องทราบว่า Journaling ถูกปิดใช้งานก่อนเวอร์ชัน 2.4.10 โดยค่าเริ่มต้น แต่หลังจากนั้นจะถูกเปิดใช้งาน

ansible vs หุ่น vs พ่อครัว

ในขณะที่กระบวนการ mongod เริ่มขึ้นสามารถสังเกตข้อความต่อไปนี้:

Journal dir = D: Rana2custom datajournal



ที่นี่ Journal Directory เป็นไดเร็กทอรีลูกภายในไดเร็กทอรีข้อมูลและเปิดใช้งานโดยค่าเริ่มต้น

Journaling ใน MongoDB คืออะไร?

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

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

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

มันทำงานอย่างไร?

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

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

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

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

เชื่อมโยงระหว่างมุมมองส่วนตัวและมุมมองที่ใช้ร่วมกัน

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

ในแผนภูมิรายการสีน้ำเงินทั้งหมดอยู่ใน RAM (หน่วยความจำเข้าถึงโดยสุ่ม) และ Saffron หมายถึงแผ่นดิสก์

หากในกรณีนี้ข้อมูลไม่กะพริบในไดเร็กทอรีข้อมูล แต่เขียนการดำเนินการอยู่ในไดเร็กทอรีข้อมูล mongod จะประมวลผลใหม่และใช้การดำเนินการเขียนกับไดเร็กทอรีข้อมูล

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

โปรดทราบว่าในสมุดรายวันเรายังคงเขียนการดำเนินการจริง

ในตัวอย่างคำสั่งเช่น ‘Db.class.insert’ ซึ่งเป็นการดำเนินการแทรกข้อมูลที่แทรกลงในการดำเนินการของคลาส ดังนั้นการดำเนินการของชั้นเรียนไม่ได้อยู่ แต่การดำเนินการอยู่

ต้องสังเกตด้วยว่าหากมีความล่าช้าในการใช้สมุดรายวันจะส่งผลกระทบต่อประสิทธิภาพ

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

ประการที่สองสามารถกำหนดกรอบเวลาช่วงเวลาของวารสาร '200 มิลลิวินาที' ได้ซึ่งสามารถเปิดใช้งานด้วย '- - ช่วงการคอมมิตของวารสาร' ที่ใดก็ได้ระหว่าง 3 ถึง 300 มิลลิวินาทีซึ่งทั้งหมดนี้ขึ้นอยู่กับข้อกำหนดที่ไม่ทำงาน (ความถี่ในการเขียนเกิดขึ้นและ ความถี่ที่เราต้องการเขียนในสารบบวารสาร) ในกรณีที่มีการดำเนินการเขียนจำนวนมากดังนั้นขอแนะนำให้ใช้เวลาน้อยกว่ามิลลิวินาที

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

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

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

กระทู้ที่เกี่ยวข้อง:

วิธีการติดตั้ง hadoop บน linux