ความชุกเป็นเทคนิคง่าย ๆ ในการจัดเตรียมคุณสมบัติของกรดให้กับโมเดลวัตถุในหน่วยความจำโดยยึดตามการทำให้เป็นอนุกรมไบนารีและการบันทึกล่วงหน้า มันทำงานได้เช่นนี้:
- เริ่มต้นด้วยภาพรวม ทำให้โมเดลวัตถุเป็นอนุกรมและเขียนลงในไฟล์
- สร้างไฟล์เจอร์นัล สำหรับการโทรทุกครั้งในโมเดลวัตถุให้จัดลำดับการโทรและอาร์กิวเมนต์
- เมื่อวารสารมีขนาดใหญ่เกินไปคุณกำลังปิดตัวลงหรือไม่ก็สะดวกทำด่าน: เขียนสแนปชอตใหม่แล้วตัดทอนบันทึก
- หากต้องการย้อนกลับหรือกู้คืนจากความผิดพลาดหรือกำลังไฟฟ้าให้โหลดภาพรวมล่าสุดและเรียกใช้การโทรทั้งหมดที่บันทึกในเจอร์นัลอีกครั้ง
ข้อควรระวังที่จำเป็นสำหรับการทำงานนี้คือ:
- อย่าปล่อยให้การอ้างอิงวัตถุที่ไม่แน่นอนหนีออกมาหรือเข้าสู่ชั้นความชุก คุณต้องการพร็อกซีหรือแผน OID บางประเภทราวกับว่าคุณกำลังทำ RPC (นี่เป็นความผิดพลาดที่พบบ่อยของมือใหม่ที่ชื่อเล่นว่า ' ปัญหาการล้างบาป ')
- ตรรกะทั้งหมดที่เข้าถึงได้จากการโทรต้องกำหนดอย่างสมบูรณ์และต้องไม่ทำการโทร I / O หรือ OS ที่มีความหมายทางธุรกิจ การเขียนไปยังบันทึกการวินิจฉัยอาจเป็นไปได้ แต่การได้รับเวลาของระบบหรือการเปิดใช้งานตัวแทนไม่ตรงกัน นี่คือเพื่อให้เจอร์นัลรีเพลย์เหมือนกันแม้ว่าจะถูกกู้คืนบนเครื่องอื่นหรือในเวลาอื่น (รหัสความชุกส่วนใหญ่ให้การโทรเวลาอื่นเพื่อรับการบันทึกเวลาธุรกรรม)
- การทำงานพร้อมกันของนักเขียนแนะนำความคลุมเครือในการตีความวารสารดังนั้นจึงเป็นสิ่งต้องห้าม
เป็นเพราะ ...
- คนที่ได้รับการพัฒนารสชาติที่ไม่ดีสำหรับพวกเขาหลังจากที่พยายามที่จะใช้หนึ่งในโครงการที่ไม่เหมาะสมเป็นอย่างดี*ไปได้หรือไม่
- เคลาส์ Wuestefeld ของการสนับสนุนพร่า หันคนออก ?
- คนที่ชอบโมเดลการเขียนโปรแกรมแบบบังคับนั้นไม่ชอบการแยก I / O ออกจากการคำนวณเลือกที่จะใช้ interleave การคำนวณด้วย I / O และการเรียกเธรด?
- เลเยอร์ความชุกนั้นเป็นแนวคิดที่เรียบง่ายและผูกพันกับลักษณะของเฟรมเวิร์กที่พวกเขาอาศัยอยู่โดยปกติพวกมันจะถูกรีดแบบกำหนดเองสำหรับโครงการ
- มันยากเกินไปที่จะทำตามสิ่งที่คุณต้องระวังไม่ให้ทำ
- หัวของมือใหม่ดูเหมือนจะระเบิดเมื่อเผชิญหน้ากับสิ่งที่ไม่ใช่แอพขับเคลื่อนฐานข้อมูลแบบสองชั้นที่พวกเขาเรียนรู้ที่จะเขียนในโรงเรียน ;)
* ทั้งเหมาะกับชุดข้อมูลในแรม , คุณไม่จำเป็นต้องเห็นพ้องด้วยนักเขียนและคุณไม่ต้องทำเฉพาะกิจแบบสอบถามรายงานหรือส่งออกไปยังคลังข้อมูล ด้วยความขอโทษต่อ SQLite ความชุกคือการปรับปรุงไฟล์บันทึกไม่ใช่การแทนที่สำหรับ Oracle