Skip to main content

การเรียนรู้ MongoDB Sharding

บทนำ​

MongoDB Sharding เป็นเทคนิคการแบ่งข้อมูล (Data Partitioning) สำหรับกระจายข้อมูลในหลายเซิร์ฟเวอร์ เพื่อรองรับการจัดเก็บและประมวลผลข้อมูลขนาดใหญ่ รวมถึงเพิ่มประสิทธิภาพในการทำงานของระบบฐานข้อมูลในแง่ของความเร็วและความสามารถในการขยายระบบ (Scalability)


คำศัพท์พื้นฐานเกี่ยวกับ Sharding​

1. Shard​

  • เป็นส่วนหนึ่งของข้อมูลในฐานข้อมูลที่ถูกจัดเก็บในเซิร์ฟเวอร์หนึ่งๆ
  • แต่ละ Shard เป็น MongoDB Instance ที่ทำงานเป็น Replica Set เพื่อความมั่นคงของข้อมูล

2. Shard Key​

  • คีย์ที่ใช้ในการกำหนดวิธีการกระจายข้อมูลไปยังแต่ละ Shard
  • เลือก Shard Key อย่างระมัดระวัง เนื่องจากส่งผลต่อประสิทธิภาพของระบบ

3. Config Server​

  • เซิร์ฟเวอร์ที่จัดเก็บ Metadata เกี่ยวกับการกระจายข้อมูลของ Shard
  • มีบทบาทสำคัญในการจัดการและตรวจสอบการกระจายข้อมูล

4. Query Router (Mongos)​

  • ตัวกลางที่รับคำสั่ง Query จากผู้ใช้และกระจายไปยัง Shard ที่เกี่ยวข้อง
  • ทำหน้าที่รวบรวมผลลัพธ์จากหลาย Shard และส่งกลับไปยังผู้ใช้

การตั้งค่า MongoDB Sharding​

1. การเริ่มต้น Config Server​

Config Server ควรทำงานในรูปแบบ Replica Set

mongod --configsvr --replSet "configReplSet" --port 27019 --dbpath /data/configdb

2. การเริ่มต้น Shard Server​

แต่ละ Shard ควรตั้งค่าให้ทำงานในรูปแบบ Replica Set

mongod --shardsvr --replSet "shardReplSet1" --port 27020 --dbpath /data/shard1
mongod --shardsvr --replSet "shardReplSet2" --port 27021 --dbpath /data/shard2

3. การเริ่มต้น Query Router (Mongos)​

Query Router จะเชื่อมต่อกับ Config Server และ Shard Server

mongos --configdb configReplSet/localhost:27019 --port 27017

4. การเพิ่ม Shard ลงใน Cluster​

ใช้คำสั่ง sh.addShard() เพื่อเพิ่ม Shard ลงใน Cluster

sh.addShard("shardReplSet1/localhost:27020");
sh.addShard("shardReplSet2/localhost:27021");

การเลือก Shard Key​

คุณสมบัติของ Shard Key ที่ดี:​

  1. กระจายข้อมูลอย่างสม่ำเสมอ
    • ช่วยหลีกเลี่ยงการโหลดไม่สมดุล (Hotspot)
  2. รองรับการ Query ที่มีประสิทธิภาพ
    • ช่วยลดการ Query ข้าม Shard

ตัวอย่างการตั้งค่า Shard Key:​

sh.enableSharding("myDatabase"); // เปิดใช้งาน Sharding บนฐานข้อมูล
sh.shardCollection("myDatabase.myCollection", { userId: 1 }); // กำหนด Shard Key

การจัดการ Sharding​

การตรวจสอบสถานะของ Cluster​

ใช้คำสั่ง sh.status() เพื่อตรวจสอบสถานะของ Sharding Cluster

sh.status();

การลบ Shard ออกจาก Cluster​

ใช้คำสั่ง sh.removeShard()

sh.removeShard("shardReplSet2");

ข้อดีและข้อเสียของ Sharding​

ข้อดี:​

  1. รองรับข้อมูลขนาดใหญ่ (Big Data)
  2. เพิ่มประสิทธิภาพการทำงานของระบบ
  3. รองรับการขยายระบบแบบแนวนอน (Horizontal Scalability)

ข้อเสีย:​

  1. ความซับซ้อนในการตั้งค่าและจัดการ
  2. การเลือก Shard Key ไม่เหมาะสมอาจทำให้เกิดปัญหาโหลดไม่สมดุล

การใช้งาน Sharding ในสถานการณ์จริง​

  • ใช้ในระบบที่มีปริมาณข้อมูลขนาดใหญ่ เช่น ระบบ E-Commerce, Social Media, IoT
  • เหมาะสำหรับแอปพลิเคชันที่ต้องการรองรับการขยายตัวในอนาคต

สรุป​

MongoDB Sharding เป็นฟีเจอร์ที่สำคัญสำหรับการจัดการข้อมูลขนาดใหญ่ โดยการตั้งค่า Sharding และการเลือก Shard Key อย่างเหมาะสมจะช่วยเพิ่มประสิทธิภาพและความสามารถในการขยายระบบได้อย่างมีประสิทธิภาพ