MongoDB เป็น open-source document database ประเภทหนึ่ง โดยเป็น database แบบ NoSQL Database จะไม่มีการใช้คำสั่ง SQL ไม่เน้นในการสร้างความสัมพันธ์ของข้อมูลแต่จะเป็นรูปแบบโครงสร้างที่เจ้าของ NoSQL สร้างขึ้นมาเองและจัดเก็บข้อมูลเป็นแบบ JSON (JavaScript Object Notation) ซึ่งจะเก็บค่าเป็น key และ value โดยจุดเด่นอยู่ที่ความเร็วในการทำงานเป็นหลัก คิวรี่ข้อมูลได้เร็วขึ้น การทำงานในส่วนของ database จะลดลง แต่จะไปเน้นการทำงานในส่วนของโปรแกรมที่พัฒนาขึ้นมาแทน โดย database ประเภทนี้ จะเหมาะกับข้อมูลขนาดใหญ่ ที่ไม่ซับซ้อน การทำงานที่ไม่หนักมาก สามารถทำงานกับระบบที่เป็นการทำงานแบบเรียลไทม์ (Real Time) ได้ดี
รูปแบบการจัดเก็บ
- Collections การเก็บข้อมูล document ใน MongoDB จะถูกเก็บไว้ใน Collections เปรียบเทียบได้กับ Table ใน Relational Database ทั่วๆไป แต่ต่างกันที่ Collections ไม่จำเป็นที่จะต้องมี Schema เหมือนกันก็สามารถบันทึกข้อมูลได้
- Schemaless คือ การไม่ต้องกำหนดโครงสร้างใดๆให้มันเหมือน SQL ปกติทั่วไป เช่น Collection User มีเก็บแค่ name ต่อมาเราสามารถเพิ่มการเก็บ position เข้ามาได้เลย
ข้อดีของ MongoDB
- MongoDB เป็น database แบบ Document-Oriented โดยลักษณะการเก็บข้อมูลจะใช้รูปแบบ format เป็น Json Style โดย Row แต่ละ Row ไม่จำเป็นต้องมีโครงสร้างข้อมูลเหมือนกัน เช่น
{</span></p> <p style="padding-left: 30px"><span style="background-color: #ffff00">data : "test"</span></p> <p style="padding-left: 30px"><span style="background-color: #ffff00">}
- MongoDB ใช้ระบบการจัดการ memory แบบเดียวกับ cached memory ใน linux ซึ่งจะปล่อยให้ OS เป็นคนจัดการ Memory
- ใช้ภาษา javascript เป็นคำสั่งในการจัดการข้อมูล
- MongoDB เป็น Full Index กล่าวคือรองรับข้อมูลมหาศาลมากๆ สามารถค้นหาจากส่วนไหนของข้อมูลเลยก็ได้
- MongoDB รองรับการ เพิ่ม หรือ หด field แบบรวดเร็ว ไม่ต้องใช้คำสั่ง Alter Table
- read-write ข้อมูลรวดเร็ว
- write ข้อมูล แบบ asynchronous (คล้าย INSERT DELAYED ของ MyISAM ใน MySQL) คือไม่ต้องรอ Insert เสร็จจริงก็ทำงานต่อได้
- MongoDB มี Capped Collection ซึ่งจะทยอยลบข้อมูลเก่าที่เก็บไว้นานเกินไปแล้วเอาข้อมูลใหม่มาใส่แทนได้ จะ clear ข้อมูลที่เก็บมานานเกินไปไว้ให้อัตโนมัติ ข้อมูลไม่โตกว่าที่เรากำหนด
- ค้นหาข้อมูลได้รวดเร็ว
- สามารถใช้เครื่อง server ที่ไม่ต้องคุณภาพสูงมากแต่แบ่งกันทำงานหลายๆเครื่อง ซึ่งประหยัดงบได้มากกว่าใช้เครื่องคุณภาพสูงเพียงเครื่องเดียว
- สามารถเขียนเป็นชุดคำสั่งได้ คล้ายๆกับการเขียน PL/SQL
ข้อเสีย ของ MongoDB
- ถ้า project เก่ามีการ JOIN กันซับซ้อนก็จะเปลี่ยนมาใช้ MongoDB ได้ยาก
- กินพื้นที่การเก็บข้อมูลมากกว่า MySQL พอสมควร เพราะไม่มี Schema ดังนั้น Schema จริงๆจะอยู่ในทุก row ของฐานข้อมูล ทำให้ข้อมูลใหญ่กว่า MySQL
- หากใช้งานจน disk เต็ม จะ clear พื้นที่ disk ให้ใช้งานต่อยาก เพราะการสั่ง delete row ไม่ทำให้ฐานข้อมูลเล็กลง ต้องสั่ง compact เองซึ่งต้องมีที่ว่างที่ disk อีกลูกมากพอๆ กับพื้นที่ข้อมูลที่ใช้อยู่ปัจจุบันเป็น buffer ในการลดขนาด
- หากต้องการใช้งานเป็นฐานข้อมูลหลักแทน MySQL ควรมีเครื่องอย่างน้อย 3 เครื่องที่เป็น physical แยกกันทำ replication กัน เพื่อเพิ่ม durability ของข้อมูล เนื่องจากข้อมูลส่วนใหญ่ของ MongoDB จะเก็บใน Memory เป็นระยะเวลาหนึ่ง หากเครื่องดับไปเครื่อง ข้อมูลที่ยังค้างใน Memory แต่ยังไม่ write ลง disk จะสูญหายทันที
คำสั่ง และ Mongo Shell เบื้องต้น
กำหนดให้ collection = test การ Insert ข้อมูลใน Mongo Shell สามารถ save collection ได้ง่ายๆด้วย db.collectionName.save()
db.test.save({a: 1, b: 2, c: 3}) –save ข้อมูลลง collectionName “test”
หรือ
db.test.save([
{ name: ‘Maliwan’ },
{ name: ‘BentoBarbeque’ }
]); –save ข้อมูลลง collectionName “test”
การ Query
การค้นหาข้อมูล ใน Mongo Shell จะใช้คำสั่ง db.collectionName.find()
db.test.find() — ค้นหาข้อมูลทั้งหมดจาก collectionName “test”
การค้นหาโดยใส่เงื่อนไข
db.test.find({name: ‘Maliwan’}) — ค้นหา collection test ที่มี name = Maliwan
การ Update
การ Update ข้อมูล เราจะใช้ $set operator
db.test.update(
{‘name’: ‘Maliwan’},
{
$set: {‘company’: ‘psu’}
})
–ทำการ query หา collection test ที่มี name = Maliwan จากนั้นก็ทำการ update โดยเพิ่ม company ให้มีค่า ‘psu’
การ Remove
การลบข้อมูลใน MongoDB จะใช้ remove()
db.test.remove({name: ‘Maliwan’}); –ลบข้อมูล collection test ที่ name = Maliwan ทั้งหมด
หากต้องการกำหนดว่าให้ลบแค่ 1 record ด้วย flag justOne
db.test.remove({name: ‘Maliwan’}, {justOne: true}) –ลบข้อมูล collection test ที่ name = Maliwan เพียง 1 record ถึงแม้จะเจอมากกว่า 1 record
สามารถอ่านข้อมูลและศึกษาเพิ่มเติมได้
https://www.mongodb.com/who-uses-mongodb
ส่วนการติดตั้ง database สามารถเข้าไปเพิ่มเติมได้จาก