SWT Tech-Share  MongoDB  KORKEAT WANNAPAT
Agenda➔ NoSQL➔ Know MongoDB➔ BSON➔ Document-oriented➔ MongoDB Anatomy➔ Installation➔ Limitations➔ MongoDB Admin➔ Basic CRU...
NoSQL➔ “Not only SQL”➔ Schema less➔ Denormalize➔ Not join➔ Scaling                  3
Know MongoDB➔NoSQL โดยใช้แนวคิด document store➔มี driver สำำหรับภำษำต่ำงๆ เช่น Java, PHP,Python, Ruby, C/C++, C# .NET, Per...
BSON/1➔Format แลกเปลี่ยนข้อมูลของที่ใช้ใน Mongo➔ย่อมำจำก Binary-JSON➔ไม่ใช่ JSON แต่คล้ำยกันเป็ น JSON-like➔มี type พิเศษเ...
BSON/2➔ Primitive type➔ Special type  ➔    RegEx (PCRE) → {x : /^a/i}  ➔    Date → {x : new Date()}  ➔    Function → {x : ...
Document-Oriented➔ BSON➔ใช้รูปแบบ Key และ Value เหมือน Map,HashMap, Associative array➔โครงสร้ำง BSON อย่ำงง่ำย    {       ...
ตัวอย่าง 1 Documentสมมุตข้อมูลของคนๆ หนึ่ งจะได้ BSON เป็ น➔    ิ{    “name” : “Javier”,    “middlename” : “Hernandez”,   ...
MongoDB Anatomy/1                    9
MongoD Anatomy/2เทียบเคียง relational DB➔       MongoDB                      Relational DBDatabase                    Data...
MongoDB Anatomy/3ฐำนข้อมูลเริ่มต้นของ Mongodb➔    ➔   admin สำำหรับจัดกำร db , user ที่ถกเพิ่ม                            ...
Installation➔ All OSes http://mongodb.org/downloads➔ Support 32, 64bits OS                                         12
Limitations➔“mongodb” ไม่รองรับ CPU แบบ big-endian(Mac PPC)➔32bits OS ใช้พ้ นที่ db ได้แค่ 2GB :(                 ื       ...
MongoDB Admin➔ Mongo Shell  ➔    “mongo” command  ➔    Configuration  ➔query,สร้ำง,ลบ,แก้ไข,ตั้งค่ำ db➔ Mongo Daemon  ➔   ...
Mongo Shell/1kor@pluto:~$mongoMongoDB shell version: 2.0.0connecting to: test>คำาสังเมพส์สส์     ่       ์> help ← คำำสั่ง...
Mongo Shell/2เพิม user สำาหรับ admin   ่>use admin>db.addUser(user,passwd)Login ในฐานะ admin>db.auth(user,passwd)         ...
Mongo Daemon➔ kor@pluto:~$mongod➔ Options  ➔    --dbpath  ➔    --bind_ip  ➔    --port➔ยังไม่หนำำใจ? → mongod --help โลด➔Ct...
Basic CRUD➔ CRUD – Create, Read, Update, Delete➔และ Insert                                       18
Create/1➔Mongo shell ไม่มีคำำสั่งสร้ำง db มีแต่คำำสั่งสร้ำง collection➔แล้วสร้ำงยังไง?                                    ...
Create/2>use dbname ← ใช้คำำสั่ง use ได้เลย>db.createCollection(colname)>{“ok” : 1}                                      20
Read (Query)/1>db.find()>db.findOne()                 21
Read (Query)/2ตัวอย่างคำาสัง query เทียบกับ MySQL              ่SELECT * FROM table>db.col.find()SELECT a,b FROM table ORD...
Read (Query)/3SELECT * FROM a = NULL>db.col.find({a : {$eq : null, $exists : true}})SELECT a,b FROM table WHERE a > 10AND ...
Read (Query)/4SELECT * FROM a LIKE %key>db.col.find({a : /key$/})SELECT * FROM table a like %key%>db.col.find({a : /key/i ...
Read (Query)/5Document ที่มี embeded-document{a : 1, e : {e1 :1}}>db.col.find({e.e1 : 1})                                 ...
Update/1UPDATE table SET a=active WHERE b=1>db.col.update({b : 1},{$set : {a : active}})                                  ...
Update/2UPDATE table SET a=active WHERE b=1>db.col.update({b : 1},{$set : {a : active}})                                  ...
DeleteDELETE FROM table>db.col.remove()DELETE FROM table WHERE a = inactive>db.col.delete({a : inactive})คำาเตือน! MongoDB...
Insert/1➔ db.collection.insert({a : 1, b : T, c : null, d :true, e : {e1 : 1}})➔MongoDB เป็ น horizontal scale เพิ่ม field...
Insert/2Bulk-insert ข้อมูลจำำนวน 1,000,000 docs➔เขียน Javascript ใน Mongo shell ได้➔                                      ...
Insert/3>for(var i=1;i <= 1000000;i++){...db.col.insert({id : i , text : “I am number ”   + i , author : “user” + I})…}1,0...
Indexing/1เพิ่ม performance ในกำร query➔query เร็วส์ส์ส์➔                                32
Indexing/2db.testdata.find({id:99999}).explain(){  "cursor" : "BasicCursor",  "nscanned" : 1000000,  "nscannedObjects" : 1...
Indexing/3db.testdata.find({id:99999}).explain(){  "cursor" : "BasicCursor",  "nscanned" : 1000000,  "nscannedObjects" : 1...
Indexing/4สร้ำง index>db.col.ensureIndex({a : 1})ดูรำยละเอียด index>db.system.indexes.find()ลบ index>db.dropIndex(a_1)    ...
Indexing/5➔ระวัง! สร้ำง index หลำย column เกินไปอำจทำำให้ insert ช้ำลง :(                                        36
Sharding, Replication    ยังใช้ไม่เปน               ็         ตัดจบ                        37
….     Q&A           38
Upcoming SlideShare
Loading in …5
×

Introduction to MongoDB

2,654 views

Published on

  • Be the first to comment

Introduction to MongoDB

  1. 1. SWT Tech-Share MongoDB KORKEAT WANNAPAT
  2. 2. Agenda➔ NoSQL➔ Know MongoDB➔ BSON➔ Document-oriented➔ MongoDB Anatomy➔ Installation➔ Limitations➔ MongoDB Admin➔ Basic CRUD➔ Indexing 2
  3. 3. NoSQL➔ “Not only SQL”➔ Schema less➔ Denormalize➔ Not join➔ Scaling 3
  4. 4. Know MongoDB➔NoSQL โดยใช้แนวคิด document store➔มี driver สำำหรับภำษำต่ำงๆ เช่น Java, PHP,Python, Ruby, C/C++, C# .NET, Perl etc.➔ Javascript interface (Mongo shell)➔ Cross-platform Linux, Mac, Windows➔ Open source with Apache license➔ More info on http://mongodb.org 4
  5. 5. BSON/1➔Format แลกเปลี่ยนข้อมูลของที่ใช้ใน Mongo➔ย่อมำจำก Binary-JSON➔ไม่ใช่ JSON แต่คล้ำยกันเป็ น JSON-like➔มี type พิเศษเช่น Date และ BinData ได้➔ Data type ➔ Primitive type – int, float, string ... ➔ Special type – RegEx, Function, DateRef: http://bsonspec.org/#/specification 5
  6. 6. BSON/2➔ Primitive type➔ Special type ➔ RegEx (PCRE) → {x : /^a/i} ➔ Date → {x : new Date()} ➔ Function → {x : function a(){...}} ➔ Embeded document → {x : {y: 1}} ➔ …etc. 6
  7. 7. Document-Oriented➔ BSON➔ใช้รูปแบบ Key และ Value เหมือน Map,HashMap, Associative array➔โครงสร้ำง BSON อย่ำงง่ำย { field1 : val1, field2 : val2, field3 : [v1,v2,v3] } 7
  8. 8. ตัวอย่าง 1 Documentสมมุตข้อมูลของคนๆ หนึ่ งจะได้ BSON เป็ น➔ ิ{ “name” : “Javier”, “middlename” : “Hernandez”, “surname” : “Balcazar”, “alias” : [“Chicharito”, “ถั่วน้อย”]} 8
  9. 9. MongoDB Anatomy/1 9
  10. 10. MongoD Anatomy/2เทียบเคียง relational DB➔ MongoDB Relational DBDatabase DatabaseCollection TableDocument RowKey FieldInt, String, NULL, Object Int, String, NULL, Objectetc etc 10
  11. 11. MongoDB Anatomy/3ฐำนข้อมูลเริ่มต้นของ Mongodb➔ ➔ admin สำำหรับจัดกำร db , user ที่ถกเพิ่ม ู ใน db นี้ มีสทธิจัดกำร db ได้ ิ ➔ local ข้อมูลใน db จะไม่ถูก replicate (ถ้ำ ใช้คณสมบัตน้ี ) ใช้สำำหรับ single server ุ ิ เท่ำนั้น 11
  12. 12. Installation➔ All OSes http://mongodb.org/downloads➔ Support 32, 64bits OS 12
  13. 13. Limitations➔“mongodb” ไม่รองรับ CPU แบบ big-endian(Mac PPC)➔32bits OS ใช้พ้ นที่ db ได้แค่ 2GB :( ื 13
  14. 14. MongoDB Admin➔ Mongo Shell ➔ “mongo” command ➔ Configuration ➔query,สร้ำง,ลบ,แก้ไข,ตั้งค่ำ db➔ Mongo Daemon ➔ “mongod” command ➔ Listen on port 27017 (default) ➔รันเพื่อให้ mongodb ทำำงำน 14
  15. 15. Mongo Shell/1kor@pluto:~$mongoMongoDB shell version: 2.0.0connecting to: test>คำาสังเมพส์สส์ ่ ์> help ← คำำสั่งทั่วไป> db.help() ← คำำสั่งเกี่ยวกับกำรจัดกำรฐำนข้อมูล (หลังจำกเลือกฐำนข้อมูลแล้ว) 15
  16. 16. Mongo Shell/2เพิม user สำาหรับ admin ่>use admin>db.addUser(user,passwd)Login ในฐานะ admin>db.auth(user,passwd) 16
  17. 17. Mongo Daemon➔ kor@pluto:~$mongod➔ Options ➔ --dbpath ➔ --bind_ip ➔ --port➔ยังไม่หนำำใจ? → mongod --help โลด➔Ctrl+C เพื่อหยุดกำรทำำงำน mongod➔หรือmongo shell สั่ง db.shutdownServer()(สถำนะ admin เท่ำนั้น!) 17
  18. 18. Basic CRUD➔ CRUD – Create, Read, Update, Delete➔และ Insert 18
  19. 19. Create/1➔Mongo shell ไม่มีคำำสั่งสร้ำง db มีแต่คำำสั่งสร้ำง collection➔แล้วสร้ำงยังไง? 19
  20. 20. Create/2>use dbname ← ใช้คำำสั่ง use ได้เลย>db.createCollection(colname)>{“ok” : 1} 20
  21. 21. Read (Query)/1>db.find()>db.findOne() 21
  22. 22. Read (Query)/2ตัวอย่างคำาสัง query เทียบกับ MySQL ่SELECT * FROM table>db.col.find()SELECT a,b FROM table ORDER BY c DESC>db.col.find({},{a:1,b:1}).sort({c:-1})SELECT * FROM users WHERE a=1 or b=2>db.col.find({$or : [{a:1}, {b:2}]}) 22
  23. 23. Read (Query)/3SELECT * FROM a = NULL>db.col.find({a : {$eq : null, $exists : true}})SELECT a,b FROM table WHERE a > 10AND b <=20>db.col.find({a:{$gt : 10}, b : {$lte : 20}})SELECT COUNT(*) FROM table>db.col.find().count() 23
  24. 24. Read (Query)/4SELECT * FROM a LIKE %key>db.col.find({a : /key$/})SELECT * FROM table a like %key%>db.col.find({a : /key/i })SELECT COUNT(a) FROM table>db.col.find({a : {$exists : true}}).count() 24
  25. 25. Read (Query)/5Document ที่มี embeded-document{a : 1, e : {e1 :1}}>db.col.find({e.e1 : 1}) 25
  26. 26. Update/1UPDATE table SET a=active WHERE b=1>db.col.update({b : 1},{$set : {a : active}}) 26
  27. 27. Update/2UPDATE table SET a=active WHERE b=1>db.col.update({b : 1},{$set : {a : active}}) 27
  28. 28. DeleteDELETE FROM table>db.col.remove()DELETE FROM table WHERE a = inactive>db.col.delete({a : inactive})คำาเตือน! MongoDB ลบแล้ว ลบเลยไม่มีRollback 28
  29. 29. Insert/1➔ db.collection.insert({a : 1, b : T, c : null, d :true, e : {e1 : 1}})➔MongoDB เป็ น horizontal scale เพิ่ม fields(column) เข้ำไปได้เรื่อยๆ 29
  30. 30. Insert/2Bulk-insert ข้อมูลจำำนวน 1,000,000 docs➔เขียน Javascript ใน Mongo shell ได้➔ 30
  31. 31. Insert/3>for(var i=1;i <= 1000000;i++){...db.col.insert({id : i , text : “I am number ” + i , author : “user” + I})…}1,000,000 docs ใช้เวลำ ~1 นำที*ทดสอบบน CPU core i5, RAM 4GB, Ubuntu 64bits 31
  32. 32. Indexing/1เพิ่ม performance ในกำร query➔query เร็วส์ส์ส์➔ 32
  33. 33. Indexing/2db.testdata.find({id:99999}).explain(){ "cursor" : "BasicCursor", "nscanned" : 1000000, "nscannedObjects" : 1000000, "n" : 1, "millis" : 1109, ….} 33
  34. 34. Indexing/3db.testdata.find({id:99999}).explain(){ "cursor" : "BasicCursor", "nscanned" : 1000000, "nscannedObjects" : 1000000, "n" : 1, "millis" : 96, ….} 34
  35. 35. Indexing/4สร้ำง index>db.col.ensureIndex({a : 1})ดูรำยละเอียด index>db.system.indexes.find()ลบ index>db.dropIndex(a_1) 35
  36. 36. Indexing/5➔ระวัง! สร้ำง index หลำย column เกินไปอำจทำำให้ insert ช้ำลง :( 36
  37. 37. Sharding, Replication ยังใช้ไม่เปน ็ ตัดจบ 37
  38. 38. …. Q&A 38

×