Skip to main content

การเรียนรู้การออกแบบ Schema ใน MongoDB (MongoDB Schema Design)

บทนำ

MongoDB เป็นฐานข้อมูลแบบ NoSQL ที่มีโครงสร้างข้อมูลแบบเอกสาร (Document-Oriented Database) การออกแบบ Schema ใน MongoDB แตกต่างจากฐานข้อมูลเชิงสัมพันธ์ (RDBMS) ที่ใช้ตารางและคอลัมน์ การออกแบบ Schema ที่ดีใน MongoDB จะช่วยเพิ่มประสิทธิภาพและความสามารถในการปรับขนาดของแอปพลิเคชันได้


หลักการพื้นฐานในการออกแบบ Schema

1. พิจารณาการใช้งาน (Use Case)

  • ออกแบบ Schema ตามลักษณะการเรียกใช้งานข้อมูล ไม่ใช่ตามโครงสร้างข้อมูลเดิม
  • คำนึงถึงความถี่และลักษณะของการอ่าน (Read) และเขียน (Write) ข้อมูล

2. การฝังข้อมูล (Embedding)

  • ใช้การฝังข้อมูล (Embedded Documents) สำหรับข้อมูลที่เกี่ยวข้องกันและเรียกใช้พร้อมกันบ่อยครั้ง

ตัวอย่าง:

{
_id: 1,
name: "John Doe",
orders: [
{ orderId: 101, product: "Laptop", quantity: 1 },
{ orderId: 102, product: "Mouse", quantity: 2 }
]
}

3. การอ้างอิงข้อมูล (Referencing)

  • ใช้การอ้างอิง (Referenced Documents) สำหรับข้อมูลที่ซับซ้อนหรือมีการใช้งานร่วมกันในหลายที่

ตัวอย่าง:

// ผู้ใช้
{
_id: 1,
name: "John Doe"
}

// คำสั่งซื้อ
{
_id: 101,
userId: 1,
product: "Laptop",
quantity: 1
}

4. หลีกเลี่ยงการ Normalization มากเกินไป

  • การ Normalization แบบ RDBMS อาจไม่เหมาะสมกับ MongoDB ควรพิจารณาการ Denormalization เพื่อเพิ่มประสิทธิภาพ

ตัวอย่างการออกแบบ Schema

1. Schema แบบ Embedded

เหมาะสำหรับ:

  • ข้อมูลที่มีความสัมพันธ์แบบ "1 ต่อหลาย"
  • ข้อมูลที่ถูกดึงมาใช้งานพร้อมกันบ่อยครั้ง

ตัวอย่าง:

{
_id: 1,
name: "John Doe",
address: {
street: "123 Main St",
city: "Bangkok",
postalCode: "10110"
}
}

2. Schema แบบ Referenced

เหมาะสำหรับ:

  • ข้อมูลที่มีความสัมพันธ์แบบ "หลายต่อหลาย"
  • ข้อมูลที่มีการเปลี่ยนแปลงบ่อย

ตัวอย่าง:

// ผู้ใช้
{
_id: 1,
name: "John Doe"
}

// บทบาท
{
_id: 101,
roleName: "Admin"
}

// ความสัมพันธ์
{
userId: 1,
roleId: 101
}

การออกแบบ Schema สำหรับปริมาณข้อมูลสูง

1. Sharding

  • ใช้ Sharding เพื่อกระจายข้อมูลไปยังหลาย Node
  • เลือก Shard Key ที่เหมาะสม โดยพิจารณาจากรูปแบบการ Query และการกระจายข้อมูล

2. การจัดการ Index

  • ใช้ Index เพื่อเพิ่มความเร็วในการค้นหา เช่น Single Field Index, Compound Index, Text Index
  • หลีกเลี่ยงการสร้าง Index ที่มากเกินไป เนื่องจากจะเพิ่มเวลาในการเขียนข้อมูล

3. การจัดเก็บข้อมูลแบบ Time-Series

  • สำหรับข้อมูลที่มีลักษณะเวลา เช่น Log หรือข้อมูลเซนเซอร์ ควรใช้ Schema ที่แยกข้อมูลตามช่วงเวลาเพื่อเพิ่มประสิทธิภาพ

เครื่องมือช่วยในการออกแบบ Schema

1. MongoDB Compass

  • เครื่องมือ GUI สำหรับออกแบบและตรวจสอบโครงสร้าง Schema

2. MongoDB Atlas

  • บริการฐานข้อมูลบนคลาวด์ที่มีฟีเจอร์การวิเคราะห์ Schema

ข้อควรระวัง

  1. หลีกเลี่ยงการสร้างเอกสารที่มีขนาดใหญ่เกินไป:
    • ขนาดเอกสารใน MongoDB ไม่ควรเกิน 16MB
  2. คำนึงถึงข้อจำกัดของ MongoDB:
    • เช่น จำนวน Index ต่อคอลเลคชัน หรือจำนวนฟิลด์ในเอกสาร
  3. ทดสอบ Schema:
    • ทดสอบการใช้งาน Schema กับ Workload จริงเพื่อประเมินประสิทธิภาพ

สรุป

การออกแบบ Schema ใน MongoDB ควรคำนึงถึงการใช้งานจริงเป็นหลัก พร้อมทั้งพิจารณาเทคนิคการฝัง (Embedding) และการอ้างอิง (Referencing) ที่เหมาะสม การออกแบบที่ดีจะช่วยเพิ่มประสิทธิภาพและความสามารถในการปรับขนาดของระบบได้