MongoDB

MongoDB – เป็นฐานข้อมูล NoSQL แบบหนึ่ง ไม่มี relation เก็บข้อมูลในรูปแบบ JSON ซึ่งเรียกว่า Document โดยจะเก็บค่า key และ value และการเก็บข้อมูล document จะถูกเก็บไว้ใน Collection จะเปรียบเทียบง่ายๆก็คือ Document คือ Row ของ MySQL ส่วน Collection ก็คือ Table นั่นเอง

  • ลักษณะการเก็บข้อมูลแบบ Document (คล้ายๆ Array หลายมิติ)
  • รองรับการทำ Full Index ซึ่งสามารถทำให้หาข้อมูลได้เร็ว
  • รองรับการขยายขนาด
  • ทำระบบสำรองได้ง่าย
  • แก้ไขข้อมูลได้เร็ว
  • เขียนชุดการสั่งทำงานได้
  • เก็บข้อมูลแบบ GridFS

เปรียบเทียบ MongoDB และ MySQL คร่าวๆ ดังนี้

MySQL MongoDB
Table Collection
Row Document
Column Field
Joins Embedded documents, linking

ข้อดีของ MongoDB

  1. MongoDB เป็น database แบบ Document-Oriented โดยลักษณะการเก็บข้อมูลจะใช้รูปแบบ format เป็น Json Style โดย Row แต่ละ Row ไม่จำเป็นต้องมีโครงสร้างข้อมูลเหมือนกัน เช่น
  2. MongoDB ใช้ระบบการจัดการ memory แบบเดียวกับ cached memory ใน linux ซึ่งจะปล่อยให้ OS เป็นคนจัดการ Memory
  3. ใช้ภาษา javascript เป็นคำสั่งในการจัดการข้อมูล
  4. MongoDB เป็น Full Index กล่าวคือรองรับข้อมูลมหาศาลมากๆ สามารถค้นหาจากส่วนไหนของข้อมูลเลยก็ได้
  5. MongoDB รองรับการ เพิ่ม หรือ หด field แบบรวดเร็ว ไม่ต้องใช้คำสั่ง Alter Table
  6. read-write ข้อมูลรวดเร็ว
  7. write ข้อมูล แบบ asynchronous (คล้าย INSERT DELAYED ของ MyISAM ใน MySQL) คือไม่ต้องรอ Insert เสร็จจริงก็ทำงานต่อได้
  8. MongoDB มี Capped Collection ซึ่งจะทยอยลบข้อมูลเก่าที่เก็บไว้นานเกินไปแล้วเอาข้อมูลใหม่มาใส่แทนได้ จะ clear ข้อมูลที่เก็บมานานเกินไปไว้ให้อัตโนมัติ ข้อมูลไม่โตกว่าที่เรากำหนด
  9. ค้นหาข้อมูลได้รวดเร็ว
  10. สามารถใช้เครื่อง server ที่ไม่ต้องคุณภาพสูงมากแต่แบ่งกันทำงานหลายๆเครื่อง ซึ่งประหยัดงบได้มากกว่าใช้เครื่องคุณภาพสูงเพียงเครื่องเดียว
  11. สามารถเขียนเป็นชุดคำสั่งได้ คล้ายๆกับการเขียน PL/SQL

ข้อเสีย ของ MongoDB

  1. ถ้า project เก่ามีการ JOIN กันซับซ้อนก็จะเปลี่ยนมาใช้ MongoDB ได้ยาก
  2. กินพื้นที่การเก็บข้อมูลมากกว่า MySQL พอสมควร เพราะไม่มี Schema ดังนั้น Schema จริงๆจะอยู่ในทุก row ของฐานข้อมูล ทำให้ข้อมูลใหญ่กว่า MySQL
  3. หากใช้งานจน disk เต็ม จะ clear พื้นที่ disk ให้ใช้งานต่อยาก เพราะการสั่ง delete row ไม่ทำให้ฐานข้อมูลเล็กลง ต้องสั่ง compact เองซึ่งต้องมีที่ว่างที่ disk อีกลูกมากพอๆ กับพื้นที่ข้อมูลที่ใช้อยู่ปัจจุบันเป็น buffer ในการลดขนาด
  4. หากต้องการใช้งานเป็นฐานข้อมูลหลักแทน MySQL ควรมีเครื่องอย่างน้อย 3 เครื่องที่เป็น physical แยกกันทำ replication กัน เพื่อเพิ่ม durability ของข้อมูล เนื่องจากข้อมูลส่วนใหญ่ของ MongoDB จะเก็บใน Memory เป็นระยะเวลาหนึ่ง หากเครื่องดับไปเครื่อง ข้อมูลที่ยังค้างใน Memory แต่ยังไม่ write ลง disk จะสูญหายทันที

รายละเอียดเพิ่มเติม คลิกตรงนี้ได้เลย