การซิงโครไนซ์ระหว่างสองระบบโดยใช้ MongoDB เป็น changelog


11

เรากำลังพัฒนาสองระบบที่เกี่ยวข้อง หนึ่งในนั้น (A) จะถูกติดตั้งบนเครื่องของลูกค้าของเรา องค์กรของฉันจะใช้ส่วนที่เหลือ (B)

แต่ละระบบมีฐานข้อมูลของตัวเอง (สัมพันธ์) และสกีมาของพวกเขาแตกต่างกัน อย่างไรก็ตามทั้งสองระบบจะต้องทำข้อมูลให้ตรงกัน นอกจากนี้การเปลี่ยนแปลงบางอย่างใน B จะต้องส่งออกไปยังระบบคลาส A ทั้งหมดและอื่น ๆ ไปยังการเปลี่ยนแปลงที่เฉพาะเจาะจง

ลูกค้าบางรายไม่มีการเชื่อมต่ออินเทอร์เน็ตดังนั้นในบางกรณีต้องทำข้อมูลให้ตรงกันผ่านการแลกเปลี่ยนไฟล์

ดังนั้นเราจึงวางแผนที่จะแก้ไขปัญหานี้ดังต่อไปนี้:

  1. แต่ละระบบรักษาการเปลี่ยนแปลงของฐานข้อมูล เรากำลังวางแผนที่จะนำไปใช้กับ MongoDB
  2. เมื่อระบบเริ่มต้นกระบวนการซิงโครไนซ์ระบบจะดึงการเปลี่ยนแปลงที่ทำทั้งหมดจากบันทึก หากระบบเป็น B การเปลี่ยนแปลงที่ดึงมาขึ้นอยู่กับปลายทาง จากนั้นระบบจะจัดลำดับพวกเขาในรูปแบบ XML และในที่สุดก็ส่งพวกเขา (ผ่านไฟล์หรือเครือข่าย)
  3. เมื่อปลายทางอื่นได้รับเซ็ตการแก้ไขมันจะยกเลิกการตั้งค่า จากนั้นระบบจะทำการแปลงข้อมูลบางอย่างซึ่งจำเป็นและในที่สุดก็บันทึกการเปลี่ยนแปลง ในขั้นตอนนี้ถ้าจำเป็นระบบจะต้องแก้ไขข้อขัดแย้งที่อาจมีอยู่
  4. ขั้นสุดท้ายระบบรับจะส่งการเปลี่ยนแปลง (และผลิตภัณฑ์อื่น ๆ ของการแก้ไขข้อขัดแย้ง)

วิธีนี้เป็นไปได้ปรับขนาดได้และสง่างามหรือไม่? คุณต้องการเปลี่ยนแปลงหรือเพิ่มเติมสิ่งใด


คุณดูเครื่องมือใด ๆ ที่เกี่ยวข้องกับ DBMS เพื่อช่วยในการจำลองข้อมูลหรือไม่? DBMS ใดที่เกี่ยวข้อง
Adam Zuckerman

เราใช้ MySQL 5.5.8 เราได้ดูเครื่องมือบางอย่าง แต่เราคิดว่ามันไม่เหมาะสมกับความต้องการของเรา
k91

ข้อผิดพลาดประการหนึ่งคือ ObjectIds จะไม่เพิ่มขึ้นซ้ำซากจำเจ
CodesInChaos

คำตอบ:


1

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

วิธีการของคุณฟังดูดีโดยเฉพาะ:

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

ฉันไม่รู้ว่าการแก้ปัญหาความขัดแย้งเป็นส่วนหนึ่งที่จะทำให้คุณเดือดร้อนมากที่สุด ฉันจะใช้เวลาคิดทบทวนวิธีการแก้ไขความขัดแย้งแต่ละประเภท โดยเฉพาะอย่างยิ่ง:

  • ความขัดแย้งบางอย่างจะต้องมีการแก้ไขผู้ใช้?
  • ระบบลูกค้าจะเป็นที่ที่ถูกต้องในการแก้ไขข้อขัดแย้งหรือไม่?
  • เป็นไปได้ไหมที่จะมีข้อขัดแย้งในระบบ B หลังจากขั้นตอนที่ 4 เมื่อระบบลูกค้าส่งการเปลี่ยนแปลง?

0

แต่ละระบบรักษาการเปลี่ยนแปลงของฐานข้อมูล เรากำลังวางแผนที่จะนำไปใช้กับ MongoDB

คุณสามารถใช้eventstore การอัปเดตข้อมูลจะมีการสร้างกิจกรรมใหม่ในร้านค้า

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

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

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

เพียงใช้เหตุการณ์กับวัตถุโดเมนของคุณ

ขั้นสุดท้ายระบบรับจะส่งการเปลี่ยนแปลง (และผลิตภัณฑ์อื่น ๆ ของการแก้ไขข้อขัดแย้ง)

ใช้วิธีการเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.