Epic Games ได้เปิดซอร์สโค้ดของระบบควบคุมเวอร์ชันแบบรวมศูนย์ Lore ซึ่งก่อนหน้านี้รวมอยู่ในชุดเครื่องมือ Unreal Editor for Fortnite (UEFN) ภายใต้ชื่อ Unreal Revision Control ระบบนี้ได้รับการปรับให้เหมาะสมสำหรับการใช้งานในโครงการพัฒนาที่ผสมผสานซอร์สโค้ดกับไฟล์ที่ไม่ใช่ข้อความขนาดใหญ่มาก ตัวอย่างเช่น Lore เหมาะสำหรับการพัฒนาเกมคอมพิวเตอร์ ซึ่งต้องมีการทำงานร่วมกันในส่วนของสินทรัพย์ เช่น เท็กซ์เจอร์ โมเดล 3 มิติ และข้อมูลเสียง เนื่องจาก1การรวมเวอร์ชันต่างๆ ของไฟล์ที่ไม่ใช่ข้อความนั้นทำได้ยาก การทำงานร่วมกันจึงถูกจัดระเบียบโดยการตั้งค่าการล็อกแบบพิเศษ เพื่อป้องกันไม่ให้ผู้ร่วมงานหลายคนแก้ไขทรัพยากรพร้อมกัน โค้ดของโครงการเขียนด้วยภาษา Rust และเผยแพร่ภายใต้ใบอนุญาต MIT
ระบบนี้สามารถปรับขนาดได้สำหรับทีมที่มีขนาดแตกต่างกัน และสามารถใช้งานบนคอมพิวเตอร์ของนักพัฒนาได้โดยการเรียกใช้ไฟล์ปฏิบัติการเพียงไฟล์เดียวโดยไม่ต้องพึ่งพาส่วนประกอบภายนอก หรือสามารถใช้งานเป็นเซิร์ฟเวอร์ส่วนกลางเพื่อประสานงานการทำงานของทีมขนาดใหญ่มาก ๆ ได้
Lore ประกอบด้วยสองระบบ ได้แก่ ระบบย่อยจัดเก็บข้อมูล และระบบควบคุมเวอร์ชัน ซึ่งมีหน้าที่สร้างการแก้ไข สาขา และการรวมเวอร์ชัน
ระบบจัดเก็บข้อมูลประกอบด้วยกลไกการจัดเก็บข้อมูลสองตัว ได้แก่ ที่เก็บข้อมูลเนื้อหาที่ไม่เปลี่ยนแปลงได้โดยใช้การระบุที่อยู่แบบแฮช และที่เก็บข้อมูลแบบคีย์/ค่าสำหรับเมตาเดตาแบบไดนามิก เช่น ตัวชี้สาขา สามารถเชื่อมต่อแบ็กเอนด์ต่างๆ เพื่อจัดเก็บข้อมูลบนเซิร์ฟเวอร์ส่วนกลางและรับประกันความทนทานต่อความผิดพลาดได้ ตัวอย่างเช่น สามารถใช้ AWS S3 สำหรับการจัดเก็บข้อมูลถาวร และ DynamoDB สำหรับเมตาเดตา
เพื่อแสดงสถานะของที่เก็บข้อมูลและรับประกันความไม่เปลี่ยนแปลงของห่วงโซ่การแก้ไข จึงใช้โครงสร้าง Merkle Tree ซึ่งแต่ละสาขาจะตรวจสอบสาขาและโหนดพื้นฐานทั้งหมดโดยใช้การแฮชแบบต้นไม้ ข้อมูลในที่เก็บข้อมูลจะถูกอ้างอิงด้วยแฮชของเนื้อหา ซึ่งทำให้การเปรียบเทียบและการตรวจสอบความถูกต้องง่ายขึ้น แฮชของแต่ละการแก้ไขจะครอบคลุมสถานะที่เกี่ยวข้อง แฮชของการแก้ไขแม่ และแฮชของข้อมูล ไฟล์ขนาดใหญ่จะถูกจัดเก็บเป็นส่วนย่อย
ระบบนี้มีฟีเจอร์ทั่วไปของระบบควบคุมเวอร์ชัน เช่น การคอมมิต การจัดเตรียมร่าง การสร้างสาขา และการประเมินการเปลี่ยนแปลง ฟังก์ชันขั้นสูงประกอบด้วย: การควบคุมการเข้าถึงของผู้ใช้ การแก้ไขข้อขัดแย้ง การลบข้อมูลซ้ำซ้อนในระดับส่วนย่อย ความสามารถในการทำงานกับสำเนาที่ไม่สมบูรณ์ของโครงสร้างการทำงาน (ข้อมูลที่ขาดหายไปจะถูกโหลดเมื่อจำเป็น) การแคชข้อมูลที่จัดเก็บไว้ การดำเนินการสร้างสาขาแบบเบา และการสลับระหว่างสาขาอย่างรวดเร็ว (สาขาถูกนำไปใช้ผ่านลิงก์ ซึ่งไม่นำไปสู่การทำซ้ำข้อมูล)
ที่มา: opennet.ru
