Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MongoDB จัดการการย้ายข้อมูลระหว่างชาร์ดอย่างไร


MongoDB จัดการการย้ายข้อมูลระหว่างชาร์ดอย่างไร


MongoDB จัดการการย้ายข้อมูลระหว่างชาร์ดผ่านกระบวนการบาลานเซอร์ บาลานเซอร์มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่าข้อมูลมีการกระจายเท่าๆ กันทั่วทั้งชาร์ดในคลัสเตอร์ที่ชาร์ด ขั้นตอนที่เกี่ยวข้องกับการย้ายข้อมูลระหว่างชาร์ดมีดังนี้

1. การปรับสมดุล

- การปรับสมดุลอัตโนมัติ: MongoDB จะปรับสมดุลข้อมูลโดยอัตโนมัติโดยการย้ายชิ้นส่วนจากส่วนหนึ่งไปยังอีกส่วนหนึ่ง สิ่งนี้ทำให้แน่ใจได้ว่าข้อมูลมีการกระจายอย่างเท่าเทียมกันทั่วทั้งชาร์ด

2. การย้ายกลุ่ม

- การโยกย้ายด้วยตนเอง: MongoDB สามารถทำการย้ายกลุ่มด้วยตนเองสำหรับคอลเลกชันเฉพาะได้ สิ่งนี้มีประโยชน์สำหรับการกระจายข้อมูลระหว่างการแทรกจำนวนมาก

3. การโยกย้ายช่วง

- การย้ายช่วงอัตโนมัติ: MongoDB จะย้ายข้อมูลครั้งละหนึ่งช่วง ตัวปรับสมดุลไม่รอให้ขั้นตอนการลบของการย้ายปัจจุบันเสร็จสิ้นก่อนที่จะเริ่มการย้ายช่วงถัดไป

4. การแบ่งใหม่

- เทคนิค Reshard-to-Shard: MongoDB ใช้การแบ่งส่วนใหม่เพื่อกระจายข้อมูลข้ามชาร์ดในคลัสเตอร์อย่างรวดเร็ว สิ่งนี้เกี่ยวข้องกับการแบ่งกลุ่มย่อยเป็นรหัสกลุ่มชั่วคราวโดยเจตนาซึ่งแตกต่างจากรหัสกลุ่มย่อยที่ต้องการ จากนั้นจึงแบ่งกลุ่มใหม่เป็นรหัสกลุ่มย่อยที่ต้องการ

5. ขั้นตอนการย้ายข้อมูลแบบก้อน

- ชิ้นส่วนแหล่งที่มา: ชิ้นส่วนแหล่งที่มาเริ่มการเคลื่อนไหวเมื่อได้รับคำสั่งภายใน ในระหว่างกระบวนการย้าย การดำเนินการไปยังกลุ่มจะถูกส่งไปยังชาร์ดต้นทาง

- ส่วนปลายทาง: ส่วนปลายทางจะสร้างดัชนีใดๆ ที่ต้นทางต้องการซึ่งไม่มีอยู่บนปลายทาง ชิ้นส่วนปลายทางเริ่มขอเอกสารในกลุ่มและเริ่มรับสำเนาของข้อมูล

- การซิงโครไนซ์: หลังจากได้รับเอกสารสุดท้ายในกลุ่ม ชาร์ดปลายทางจะเริ่มกระบวนการซิงโครไนซ์เพื่อให้แน่ใจว่ามีการเปลี่ยนแปลงในเอกสารที่ย้ายที่เกิดขึ้นระหว่างการย้าย

- การอัปเดตข้อมูลเมตา: ชาร์ดต้นทางเชื่อมต่อกับฐานข้อมูลการกำหนดค่าและอัปเดตข้อมูลเมตาของคลัสเตอร์ด้วยตำแหน่งใหม่สำหรับกลุ่ม

- ลบเฟส: หลังจากที่ชาร์ดต้นทางอัปเดตข้อมูลเมตาเสร็จแล้ว และเมื่อไม่มีเคอร์เซอร์เปิดอยู่บนก้อนนั้น ชาร์ดต้นทางจะลบสำเนาของเอกสาร[3][5]

6. ชิ้นจัมโบ้

- Jumbo Chunks: หาก Chunk มีขนาดเกินขนาดสูงสุด หรือจำนวนเอกสารใน Chunk เกินขนาดสูงสุดที่อนุญาต MongoDB จะไม่ย้าย Chunk MongoDB จะพยายามแยกส่วนแทน หากการแยกไม่สำเร็จ MongoDB จะติดป้ายกำกับก้อนนั้นว่าเป็นจัมโบ้เพื่อหลีกเลี่ยงการพยายามย้ายก้อนซ้ำ ๆ [3]

7. การตรวจสอบและบำรุงรักษา

- การตรวจสอบ: MongoDB มีเครื่องมือสำหรับตรวจสอบกระบวนการบาลานเซอร์ และให้แน่ใจว่าข้อมูลมีการกระจายอย่างเท่าเทียมกันทั่วทั้งชาร์ด

- การบำรุงรักษา: MongoDB จัดเตรียมคำสั่งเพื่อจัดการบาลานเซอร์และรับรองว่าการย้ายข้อมูลมีประสิทธิภาพและปรับขนาดได้

บทสรุป

MongoDB จัดการการย้ายข้อมูลระหว่างชาร์ดผ่านกระบวนการบาลานเซอร์ ซึ่งช่วยให้มั่นใจว่าข้อมูลมีการกระจายเท่าๆ กันระหว่างชาร์ดในคลัสเตอร์ชาร์ด บาลานเซอร์จะย้ายข้อมูลครั้งละหนึ่งช่วง และ MongoDB ก็มีเครื่องมือสำหรับตรวจสอบและจัดการกระบวนการบาลานเซอร์

การอ้างอิง:
[1] https://stackoverflow.com/questions/48438644/migration-data-between-shards-with-mongodb
[2] https://hackernoon.com/optimize-data-migration-in-mongodb-resharding-techniques-for-speed-and-scalability
[3] https://www.mongodb.com/docs/v3.0/core/sharding-chunk-migration/
[4] https://www.mongodb.com/community/forums/t/shard-migration-leads-to-service-disruption/247228
[5] https://www.mongodb.com/docs/v6.2/core/sharding-balancer-administration/
-