What is MongoDB?

       MongoDB เป็น open-source document database ประเภทหนึ่ง โดยเป็น database แบบ NoSQL Database จะไม่มีการใช้คำสั่ง SQL ไม่เน้นในการสร้างความสัมพันธ์ของข้อมูลแต่จะเป็นรูปแบบโครงสร้างที่เจ้าของ NoSQL สร้างขึ้นมาเองและจัดเก็บข้อมูลเป็นแบบ JSON (JavaScript Object Notation) ซึ่งจะเก็บค่าเป็น key และ value โดยจุดเด่นอยู่ที่ความเร็วในการทำงานเป็นหลัก คิวรี่ข้อมูลได้เร็วขึ้น การทำงานในส่วนของ database จะลดลง แต่จะไปเน้นการทำงานในส่วนของโปรแกรมที่พัฒนาขึ้นมาแทน  โดย database ประเภทนี้ จะเหมาะกับข้อมูลขนาดใหญ่ ที่ไม่ซับซ้อน การทำงานที่ไม่หนักมาก สามารถทำงานกับระบบที่เป็นการทำงานแบบเรียลไทม์ (Real Time) ได้ดี

รูปแบบการจัดเก็บ

  1. Collections การเก็บข้อมูล document ใน MongoDB จะถูกเก็บไว้ใน Collections เปรียบเทียบได้กับ Table ใน Relational Database ทั่วๆไป แต่ต่างกันที่ Collections ไม่จำเป็นที่จะต้องมี Schema เหมือนกันก็สามารถบันทึกข้อมูลได้
  2. Schemaless คือ การไม่ต้องกำหนดโครงสร้างใดๆให้มันเหมือน SQL ปกติทั่วไป เช่น Collection User มีเก็บแค่ name ต่อมาเราสามารถเพิ่มการเก็บ position เข้ามาได้เลย

ข้อดีของ MongoDB

  1. 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">}

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

 

คำสั่ง และ 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 สามารถเข้าไปเพิ่มเติมได้จาก

http://docs.mongodb.org/manual/installation/