สิ่งที่ฉันไม่ชัดเจนเป็นพิเศษคือเหตุผลที่คุณจะต้องคืนค่าการรวมของคุณจาก Event Store เอง
เพราะ "เหตุการณ์" เป็นหนังสือบันทึก
หากการฉายการเปลี่ยนแปลงกับฐานข้อมูล "อ่าน" นั้นง่ายมากทำไมไม่ฉายโครงการการเปลี่ยนแปลงไปยังฐานข้อมูล "เขียน" ซึ่งสคีมาตรงกับรูปแบบโดเมนของคุณอย่างสมบูรณ์ นี่จะเป็นฐานข้อมูลสแน็ปช็อตอย่างมีประสิทธิภาพ
ใช่; บางครั้งเป็นการเพิ่มประสิทธิภาพการทำงานที่มีประโยชน์ในการใช้สำเนาแคชของสถานะรวมแทนที่จะสร้างสถานะนั้นใหม่ตั้งแต่เริ่มต้นทุกครั้ง ข้อควรจำ: กฎการเพิ่มประสิทธิภาพข้อแรกคือ "ไม่" มันเพิ่มความซับซ้อนเป็นพิเศษให้กับโซลูชันและคุณต้องการหลีกเลี่ยงปัญหานั้นจนกว่าคุณจะมีแรงจูงใจทางธุรกิจที่น่าสนใจ
หากเป็นกรณีนี้ Event Store จะมีประโยชน์เฉพาะเมื่อสร้างฐานข้อมูล "เขียน" ของคุณใหม่เนื่องจากการเปลี่ยนแปลงสคีมาหรือไม่ หรือฉันกำลังพลาดอะไรที่ใหญ่กว่านี้?
คุณกำลังพลาดสิ่งที่ใหญ่กว่า
จุดแรกคือว่าถ้าคุณกำลังพิจารณาการแก้ปัญหาเหตุการณ์ที่มาก็เป็นเพราะคุณคาดหวังว่าจะมีความคุ้มค่าในการรักษาประวัติศาสตร์ของสิ่งที่เกิดขึ้นซึ่งเป็นที่จะบอกว่าคุณต้องการที่จะทำให้การเปลี่ยนแปลงไม่ทำลาย
นั่นคือเหตุผลที่เราเขียนถึงร้านค้ากิจกรรมเลย
โดยเฉพาะอย่างยิ่งนี่หมายความว่าการเปลี่ยนแปลงทุกอย่างจะต้องเขียนลงในที่จัดเก็บกิจกรรม
นักเขียนที่แข่งขันกันอาจทำลายการเขียนของกันและกันหรือผลักดันระบบให้อยู่ในสถานะที่ไม่ได้ตั้งใจหากพวกเขาไม่ได้ตระหนักถึงการแก้ไขของกันและกัน ดังนั้นวิธีการปกติเมื่อคุณต้องการความสอดคล้องคือการเขียนของคุณไปยังตำแหน่งเฉพาะในวารสาร (คล้ายกับ PUT ตามเงื่อนไขใน HTTP api) การเขียนที่ล้มเหลวจะบอกผู้เขียนว่าความเข้าใจในวารสารปัจจุบันของพวกเขาไม่ตรงกันและพวกเขาควรกู้คืน
กลับไปที่ตำแหน่งที่ดีที่รู้จักแล้วเล่นซ้ำเหตุการณ์ใด ๆ เพิ่มเติมเนื่องจากจุดนั้นเป็นกลยุทธ์การกู้คืนทั่วไป ตำแหน่งที่ดีที่รู้จักนั้นสามารถเป็นสำเนาของสิ่งที่อยู่ในแคชภายในเครื่องหรือการเป็นตัวแทนในที่เก็บภาพรวมของคุณ
ในเส้นทางแห่งความสุขคุณสามารถเก็บภาพรวมของการรวมไว้ในหน่วยความจำ คุณต้องติดต่อกับร้านค้าภายนอกเมื่อไม่มีสำเนาในเครื่องเท่านั้น
นอกจากนี้คุณไม่จำเป็นต้องถูกติดตามอย่างสมบูรณ์หากคุณมีสิทธิ์เข้าถึงหนังสือบันทึก
ดังนั้นวิธีการปกติ ( ถ้าใช้พื้นที่เก็บข้อมูลภาพ) คือการรักษามันถ่ายทอดสด ด้วยวิธีนี้หากคุณต้องการกู้คืนคุณสามารถทำได้โดยไม่ต้องโหลดซ้ำและเล่นซ้ำประวัติทั้งหมดของการรวม
มีหลายกรณีที่ความซับซ้อนนี้ไม่เป็นที่สนใจเนื่องจากการรวมเม็ดเล็ก ๆ ที่มีช่วงอายุที่กำหนดมักจะไม่รวบรวมเหตุการณ์เพียงพอสำหรับผลประโยชน์ที่เกินกว่าค่าใช้จ่ายในการบำรุงรักษาแคชสแนปชอต
แต่เมื่อเป็นเครื่องมือที่เหมาะสมสำหรับปัญหาการโหลดการรวมที่ค้างของการรวมลงในโมเดลการเขียนจากนั้นอัพเดตด้วยเหตุการณ์เพิ่มเติมเป็นสิ่งที่สมเหตุสมผลอย่างสมบูรณ์