พิสิษฐ์ มรรคไพสิฐ
5514552616
เกี่ยวกับ MongoDB
• พัฒนาโดยบริษัท 10gen
• เป็น Document-oriented Database
• มี feature มากมายเหมือน Relational
Database
•...
JSON Document
• ประกอบด้วยหลาย Database
• แต่ละ Database ประกอบด้วยหลาย Collections
(เทียบได้กับ Table)
• ข้อมูลจะถูกเรียก...
BSON Encoding
• ผู้ใช้มอง document อยู่ในรูปแบบของ JSON
• ข้อมูลจริงจะเก็บในรูป BSON (Binary JSON)
• BSON - http://bsonspe...
เปรียบเทียบกับ Relational DB
Server
Database
Table
Row
Column
• มี Join
• Atomicity ระดับ
Transaction
Server
Database
Coll...
เริ่มต้นใช้งาน
• DBMS ของ MongoDB
– mongod รันเป็น daemon process
• Mongo Shell
– mongo ส่งคำาสั่งไปยัง mongod โดยใช้ภาษา
...
ตัวอย่างคำาสั่ง
> db.people.insert( {name:’Wachira Poothong’,
email:’wp@zzz.com’, sex:’male’} )
> db.people.insert( {name:...
ตัวอย่างคำาสั่ง
> db.people.find()
{ "_id" : ObjectId("51206cee15407f12ea3db21b"), "name"
: "Wachira Poothong", "email" : ...
ตัวอย่างคำาสั่ง
> db.people.find( {age:{$gt:15}} )
{ "_id" : ObjectId("51206d2a15407f12ea3db21c"), "name"
: "Pisit Makpais...
ตัวอย่างคำาสั่ง
> db.people.update( {name:’Wachira Poothong’}, {age:25} )
> db.people.findOne( )
{ "_id" : ObjectId("51206...
CRUD
Operator SQL MongoDB
Create INSERT INSERT
Read SELECT FIND
Update UPDATE UPDATE
Delete DELETE REMOVE
11
การออกแบบ Schema
• เนื่องจากไม่มี Join เหมือน RDBMS
• Pre-join หรือ Embedded
• Application-Driven Schema - ออกแบบโดยดู
จาก...
ตัวอย่างเว็บเพจหน้าแสดงข้อมูล
DVD• RDBMS เก็บข้อมูลเป็น table ดังนี้
– DVD (dvd_id, name, volume, price, distributor_id)
–...
ทำายังไงเมื่อไม่มี Join
• Join เอง ในระดับ Application
• Pre-join หรือ Embedded โดยพิจารณาจาก
– ความถี่ในการใช้งานร่วมกัน
...
Replication
• เก็บข้อมูลซ้ำ้ากันในหลายที่
• เพิ่ม availability
• Back up ข้อมูล
• Read ข้อมูลได้เร็วขึ้น
15
http://blog.co...
Replica Sets
• เป็น cluster ของ mongod (daemon)
• ข้อมูลจะถูกเขียนลงไปที่ตัว primary (มีเพียงตัว
เดียว)
• ตัวอื่นจะเรียกว่...
Sharding
• แบ่งกลุ่มของ document ไป
ยังเครื่องต่างๆ
• แบ่ง Collection ออกเป็น
chunks
• ใช้ shard key เป็นหลักใน
การแบ่ง
• ...
เมื่อไหร่จึงทำา Sharding
• เมื่อข้อมูลมากจน Storage ของเครื่องเดียวเก็บ
ไม่พอ
• เพิ่มประสิทธิภาพด้วยการเพิ่มข้อมูลที่ทำางา...
Map-Reduce
• { _id: ObjectId("50a8240b927d5d8b5891743c"),
cust_id: "abc123",
ord_date: new Date("Oct 04, 2012"),
status: '...
Map-Reduce
• มี 2 Operator หลัก คือ Map และ Reduce
• Map - จับคู่ระหว่าง Key-Value
var mapFunction = function() {
emit(thi...
Map-Reduce
• orders เป็นชื่อ collection
• เรียกด้วยฟังก์ชัน mapReduce ( )
• นำาผลลัพธ์ไปเก็บที่ collection ชื่อ
map_reduce...
เอกสารอ้างอิง
• http://horicky.blogspot.com/2012/04/mongodb-
architecture.html
• http://www.slideshare.net/mdirolf/inside-...
Upcoming SlideShare
Loading in...5
×

Basic MongoDB

1,736

Published on

Friendly introduction to MongoDB in Thai

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,736
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Basic MongoDB

  1. 1. พิสิษฐ์ มรรคไพสิฐ 5514552616
  2. 2. เกี่ยวกับ MongoDB • พัฒนาโดยบริษัท 10gen • เป็น Document-oriented Database • มี feature มากมายเหมือน Relational Database • Scalable (Replication, Sharding) • สนับสนุน Map-Reduce 2
  3. 3. JSON Document • ประกอบด้วยหลาย Database • แต่ละ Database ประกอบด้วยหลาย Collections (เทียบได้กับ Table) • ข้อมูลจะถูกเรียกว่า Document (เทียบได้กับ Row) • JSON document (key, value) เช่น{ “name” : “som-tam”, “price” : 30, “ingredients” : [“papaya”, “tomato”, “chili”] } 3
  4. 4. BSON Encoding • ผู้ใช้มอง document อยู่ในรูปแบบของ JSON • ข้อมูลจริงจะเก็บในรูป BSON (Binary JSON) • BSON - http://bsonspec.org {_id: ObjectId(XXXXXXXXXXXX), hello: “world”} x27x00x00x00x07_idx00XXXXXXXXXXXX x02hellox00x06x00x00x00worldx00x00 4
  5. 5. เปรียบเทียบกับ Relational DB Server Database Table Row Column • มี Join • Atomicity ระดับ Transaction Server Database Collection Document (JSON) Field • ไม่มี Join • Atomicity ระดับ Relational DB MongoDB 5
  6. 6. เริ่มต้นใช้งาน • DBMS ของ MongoDB – mongod รันเป็น daemon process • Mongo Shell – mongo ส่งคำาสั่งไปยัง mongod โดยใช้ภาษา JavaScript • MongoDB API (http://api.mongodb.org/) – pymongo สำาหรับภาษา Python 6
  7. 7. ตัวอย่างคำาสั่ง > db.people.insert( {name:’Wachira Poothong’, email:’wp@zzz.com’, sex:’male’} ) > db.people.insert( {name:’Pisit Makpaisit’, age:25, interesting:[‘Parallel Computing’, ‘Programming’]} ) Schemal ess! 7
  8. 8. ตัวอย่างคำาสั่ง > db.people.find() { "_id" : ObjectId("51206cee15407f12ea3db21b"), "name" : "Wachira Poothong", "email" : "wp@zzz.com", "sex" : "male" } { "_id" : ObjectId("51206d2a15407f12ea3db21c"), "name" : "Pisit Makpaisit", "age" : 25, "interesting" : [ "Parallel Computing", "Programming" ] } db.people.insert( {name:’Wachira Poothong’, email:’wp@zzz.com’, sex:’male’} ) > db.people.find( {name:’Pisit Makpaisit’} ) { "_id" : ObjectId("51206d2a15407f12ea3db21c"), "name" : "Pisit Makpaisit", "age" : 25, "interesting" : [ "Parallel Computing", "Programming" ] } 8
  9. 9. ตัวอย่างคำาสั่ง > db.people.find( {age:{$gt:15}} ) { "_id" : ObjectId("51206d2a15407f12ea3db21c"), "name" : "Pisit Makpaisit", "age" : 25, "interesting" : [ "Parallel Computing", "Programming" ] } > db.people.find( {email:{$exist:true}} ) { "_id" : ObjectId("51206cee15407f12ea3db21b"), "name" : "Wachira Poothong", "email" : "wp@zzz.com", "sex" : "male" } 9
  10. 10. ตัวอย่างคำาสั่ง > db.people.update( {name:’Wachira Poothong’}, {age:25} ) > db.people.findOne( ) { "_id" : ObjectId("51206cee15407f12ea3db21b"), "name" : "Wachira Poothong", “age" : 25, "email" : "wp@zzz.com", "sex" : "male" } > db.people.remove( {name:’Wachira Poothong’} ) > db.people.remove() 10
  11. 11. CRUD Operator SQL MongoDB Create INSERT INSERT Read SELECT FIND Update UPDATE UPDATE Delete DELETE REMOVE 11
  12. 12. การออกแบบ Schema • เนื่องจากไม่มี Join เหมือน RDBMS • Pre-join หรือ Embedded • Application-Driven Schema - ออกแบบโดยดู จากการใช้งานข้อมูลของโปรแกรม 12
  13. 13. ตัวอย่างเว็บเพจหน้าแสดงข้อมูล DVD• RDBMS เก็บข้อมูลเป็น table ดังนี้ – DVD (dvd_id, name, volume, price, distributor_id) – Distributor (distributor_id, name, address) – Comment (comment_id, dvd_id, author, body, date) • MongoDB เก็บเป็น document เดียวกัน – { name: ‘Digimon Xros Wars’, volume: 6, price: 169, distributor: ‘TIGA’, comments: [ {author: ‘เกรียน’, body: ‘ที่ 1’, date: ‘2012-12-21 13:34:42’}, {author: ‘น้องแป้ง’, body: ‘สนุกจุงเบย’, date: ‘2012- 12-22 10:12:07’}] 13
  14. 14. ทำายังไงเมื่อไม่มี Join • Join เอง ในระดับ Application • Pre-join หรือ Embedded โดยพิจารณาจาก – ความถี่ในการใช้งานร่วมกัน – ขนาดของ document • Embedded ทำาให้ atomicity ระดับ document เพียงพอ 14
  15. 15. Replication • เก็บข้อมูลซ้ำ้ากันในหลายที่ • เพิ่ม availability • Back up ข้อมูล • Read ข้อมูลได้เร็วขึ้น 15 http://blog.codecentric.de/en/2012/12/mongodb-the-sixth-sense/
  16. 16. Replica Sets • เป็น cluster ของ mongod (daemon) • ข้อมูลจะถูกเขียนลงไปที่ตัว primary (มีเพียงตัว เดียว) • ตัวอื่นจะเรียกว่า secondary และคัดลอกข้อมูล มาจาก primary • Automated failover – ถ้า primary ตาย จะ เลือกตัวใหม่มาเป็น primary อัตโนมัติ 16
  17. 17. Sharding • แบ่งกลุ่มของ document ไป ยังเครื่องต่างๆ • แบ่ง Collection ออกเป็น chunks • ใช้ shard key เป็นหลักใน การแบ่ง • เมื่อมี shard หนึ่งมี chunks มากเมื่อเทียบกับ shard อื่น จะทำาการ redistribute 17 http://blog.codecentric.de/en/2012/12/mongodb-the-sixth-sense/
  18. 18. เมื่อไหร่จึงทำา Sharding • เมื่อข้อมูลมากจน Storage ของเครื่องเดียวเก็บ ไม่พอ • เพิ่มประสิทธิภาพด้วยการเพิ่มข้อมูลที่ทำางานบน RAM • มีการเขียนข้อมูลจำานวนมาก (ต้องการให้เขียน ได้เร็ว) 18
  19. 19. Map-Reduce • { _id: ObjectId("50a8240b927d5d8b5891743c"), cust_id: "abc123", ord_date: new Date("Oct 04, 2012"), status: 'A', price: 250, items: [ { sku: "mmm", qty: 5, price: 2.5 }, { sku: "nnn", qty: 5, price: 2.5 } ] } • อยากรู้ยอดรวมการสั่งสินค้าของลูกค้าแต่ละคน 19
  20. 20. Map-Reduce • มี 2 Operator หลัก คือ Map และ Reduce • Map - จับคู่ระหว่าง Key-Value var mapFunction = function() { emit(this.cust_id, this.price); }; • Reduce - รวบรวมค่า Value ของแต่ละ Key จนเหลืออันเดียว var reduceFunction = function(keyCustId, valuesPrices) { return Array.sum(valuesPrices); 20
  21. 21. Map-Reduce • orders เป็นชื่อ collection • เรียกด้วยฟังก์ชัน mapReduce ( ) • นำาผลลัพธ์ไปเก็บที่ collection ชื่อ map_reduce_example db.orders.mapReduce( mapFunction, reduceFunction, { out: "map_reduce_example" } ) 21
  22. 22. เอกสารอ้างอิง • http://horicky.blogspot.com/2012/04/mongodb- architecture.html • http://www.slideshare.net/mdirolf/inside- mongodb-the-internals-of-an-opensource- database • http://docs.mongodb.org/manual/replication/ • http://docs.mongodb.org/manual/sharding/ • http://docs.mongodb.org/manual/applications/ma p-reduce/ 22
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×