มูลค่า 2 เพนนีของฉัน ค่อนข้างโหยหา แต่ ...... ฉันมีข้อกำหนดที่คล้ายกันในโครงการบ่มเพาะของฉัน คล้ายกับของคุณข้อกำหนดสำคัญของฉันที่ฐานข้อมูลเอกสาร (xml ในกรณีของฉัน) พร้อมการกำหนดเวอร์ชันเอกสาร สำหรับระบบผู้ใช้หลายคนที่มีกรณีการใช้งานร่วมกันจำนวนมาก ความชอบของฉันคือการใช้โซลูชันโอเพนซอร์ซที่มีอยู่ซึ่งรองรับข้อกำหนดหลักส่วนใหญ่
เพื่อลดการไล่ล่าฉันไม่พบผลิตภัณฑ์ใด ๆ ที่ให้ทั้งสองอย่างในแบบที่ปรับขนาดได้เพียงพอ (จำนวนผู้ใช้ปริมาณการใช้งานพื้นที่จัดเก็บข้อมูลและทรัพยากรการประมวลผล) ฉันมีอคติต่อคอมไพล์สำหรับความสามารถทั้งหมดที่มีแนวโน้มและ (เป็นไปได้) วิธีแก้ปัญหาที่เราสามารถสร้างขึ้นมาได้ เมื่อฉันเล่นกับตัวเลือก git มากขึ้นการเปลี่ยนจากมุมมองของผู้ใช้คนเดียวไปสู่มุมมองของผู้ใช้หลาย (มิลลิแอมป์) กลายเป็นความท้าทายที่ชัดเจน น่าเสียดายที่ฉันไม่ได้ทำการวิเคราะห์ประสิทธิภาพที่สำคัญเหมือนที่คุณทำ (.. ขี้เกียจ / เลิกเร็ว .... สำหรับรุ่น 2 มนต์) พลังให้คุณ!. อย่างไรก็ตามความคิดที่เอนเอียงของฉันได้เปลี่ยนไปเป็นทางเลือกถัดไป (ยังคงเอนเอียง): การรวมเครื่องมือที่ดีที่สุดในทรงกลมฐานข้อมูลและการควบคุมเวอร์ชันที่แยกจากกัน
ในขณะที่ยังดำเนินการอยู่ (... และละเลยเล็กน้อย) เวอร์ชันที่ปรับเปลี่ยนเป็นเพียงสิ่งนี้
- ที่ส่วนหน้า: (userfacing) ใช้ฐานข้อมูลสำหรับหน่วยเก็บข้อมูลระดับที่ 1 (เชื่อมต่อกับแอปพลิเคชันผู้ใช้)
- บนแบ็กเอนด์ใช้ระบบควบคุมเวอร์ชัน (VCS) (เช่น git) เพื่อทำการกำหนดเวอร์ชันของอ็อบเจ็กต์ข้อมูลในฐานข้อมูล
โดยพื้นฐานแล้วมันจะเป็นการเพิ่มปลั๊กอินควบคุมเวอร์ชันลงในฐานข้อมูลด้วยกาวการรวมบางอย่างซึ่งคุณอาจต้องพัฒนา แต่อาจจะง่ายกว่ามาก
วิธีการทำงาน (ควรจะ) คือการแลกเปลี่ยนข้อมูลอินเทอร์เฟซหลายผู้ใช้หลักผ่านฐานข้อมูล DBMS จะจัดการกับปัญหาที่สนุกและซับซ้อนทั้งหมดเช่นผู้ใช้หลายคน, e พร้อมกัน, การดำเนินการของอะตอมเป็นต้นในแบ็กเอนด์ VCS จะดำเนินการควบคุมเวอร์ชันบนอ็อบเจ็กต์ข้อมูลชุดเดียว (ไม่มีปัญหาการเกิดพร้อมกันหรือผู้ใช้หลายคน) สำหรับแต่ละธุรกรรมที่มีประสิทธิภาพบนฐานข้อมูลการควบคุมเวอร์ชันจะดำเนินการเฉพาะกับเรกคอร์ดข้อมูลที่จะมีการเปลี่ยนแปลงอย่างมีประสิทธิภาพเท่านั้น
สำหรับกาวเชื่อมจะอยู่ในรูปแบบของฟังก์ชันการทำงานร่วมกันระหว่างฐานข้อมูลและ VCS ในแง่ของการออกแบบแนวทางง่ายๆคืออินเทอร์เฟซที่ขับเคลื่อนด้วยเหตุการณ์โดยการอัปเดตข้อมูลจากฐานข้อมูลจะเรียกใช้ขั้นตอนการควบคุมเวอร์ชัน (คำใบ้: สมมติว่า Mysql ใช้ทริกเกอร์และ sys_exec () blah blah ... ) ในแง่ของความซับซ้อนในการใช้งานจะมีตั้งแต่ขั้นตอนที่เรียบง่ายและมีประสิทธิภาพ (เช่นการเขียนสคริปต์) ไปจนถึงความซับซ้อนและยอดเยี่ยม (อินเทอร์เฟซตัวเชื่อมต่อที่ตั้งโปรแกรมไว้ ทั้งหมดขึ้นอยู่กับว่าคุณต้องการไปกับมันบ้าแค่ไหนและคุณยินดีจ่ายเงินทุนเท่าไร ฉันคิดว่าการเขียนสคริปต์อย่างง่ายควรทำเวทมนตร์ และในการเข้าถึงผลลัพธ์สุดท้ายเวอร์ชันข้อมูลต่างๆทางเลือกง่ายๆคือการเติมข้อมูลโคลนของฐานข้อมูล (โคลนของโครงสร้างฐานข้อมูลเพิ่มเติม) ด้วยข้อมูลที่อ้างอิงโดยแท็กเวอร์ชัน / id / แฮชใน VCS อีกครั้งบิตนี้จะเป็นงานแบบสอบถาม / แปล / แผนที่อย่างง่ายของอินเทอร์เฟซ
ยังคงมีความท้าทายและสิ่งที่ไม่รู้ที่ต้องจัดการ แต่ฉันคิดว่าผลกระทบและความเกี่ยวข้องของสิ่งเหล่านี้ส่วนใหญ่จะขึ้นอยู่กับข้อกำหนดการใช้งานและกรณีการใช้งานของคุณเป็นหลัก บางคนอาจจบลงด้วยการไม่เป็นประเด็น ปัญหาบางอย่างรวมถึงการจับคู่ประสิทธิภาพระหว่างโมดูลหลัก 2 โมดูลฐานข้อมูลและ VCS สำหรับแอปพลิเคชันที่มีกิจกรรมการอัปเดตข้อมูลความถี่สูงการปรับขนาดทรัพยากร (การจัดเก็บและพลังการประมวลผล) ในช่วงเวลาที่ด้าน git เป็นข้อมูลและผู้ใช้ เติบโต: คงที่เลขชี้กำลังหรือในที่สุดก็เป็นที่ราบสูง
ค็อกเทลด้านบนนี่คือสิ่งที่ฉันกำลังชงอยู่
- ใช้ Git สำหรับ VCS (ในตอนแรกถือว่า CVS เก่าที่ดีเนื่องจากมีการใช้เฉพาะชุดการเปลี่ยนแปลงหรือเดลต้าระหว่าง 2 เวอร์ชัน)
- ใช้ mysql (เนื่องจากลักษณะของข้อมูลของฉันมีโครงสร้างสูง xml ที่มีสกีมา xml ที่เข้มงวด)
- เล่นกับ MongoDB (เพื่อลองใช้ฐานข้อมูล NoSQl ซึ่งตรงกับโครงสร้างฐานข้อมูลดั้งเดิมที่ใช้ในคอมไพล์)
ข้อเท็จจริงที่น่าสนใจบางอย่าง - คอมไพล์ทำสิ่งที่ชัดเจนเพื่อเพิ่มประสิทธิภาพการจัดเก็บข้อมูลเช่นการบีบอัดและการจัดเก็บเฉพาะเดลต้าระหว่างการแก้ไขอ็อบเจ็กต์ - ใช่ git จะจัดเก็บเฉพาะการเปลี่ยนแปลงหรือเดลต้าระหว่างการแก้ไขอ็อบเจ็กต์ข้อมูลเท่านั้นที่สามารถใช้ได้ (รู้ เมื่อไรและอย่างไร) การอ้างอิง: packfiles ลึกเข้าไปในความกล้าของ Git ภายใน
- การตรวจสอบการจัดเก็บอ็อบเจ็กต์ของ git (ระบบไฟล์ที่กำหนดแอดเดรสเนื้อหา) แสดงความคล้ายคลึงกัน (จากมุมมองของแนวคิด) ด้วยฐานข้อมูล noSQL เช่น mongoDB อีกครั้งด้วยค่าใช้จ่ายของเงินทุนอาจให้ความเป็นไปได้ที่น่าสนใจยิ่งขึ้นสำหรับการผสานรวม 2 และการปรับแต่งประสิทธิภาพ
หากคุณมาถึงจุดนี้ให้ฉันว่าข้างต้นอาจใช้ได้กับกรณีของคุณหรือไม่และสมมติว่าเป็นไปได้ว่าจะสรุปได้อย่างไรในการวิเคราะห์ประสิทธิภาพที่ครอบคลุมครั้งล่าสุดของคุณ