22
พพพพพพพ พพพพ พพพพพ 5514552616

Basic MongoDB

Embed Size (px)

DESCRIPTION

Friendly introduction to MongoDB in Thai

Citation preview

Page 1: Basic MongoDB

พิ�สิ�ษฐ์� มรรคไพิสิ�ฐ์ 5514552616

Page 2: Basic MongoDB

เกี่��ยวกี่�บ MongoDB

• พิ�ฒนาโดยบร�ษ�ท 10gen• เป็�น Document-oriented Database• ม� feature มากี่มายเหม�อน Relational

Database• Scalable (Replication, Sharding)• สิน�บสิน�น Map-Reduce

2

Page 3: Basic MongoDB

JSON Document

• ป็ระกี่อบด!วยหลาย Database• แต่%ละ Database ป็ระกี่อบด!วยหลาย Collections (เท�ยบ

ได!กี่�บ Table)• ข้!อม'ลจะถู'กี่เร�ยกี่ว%า Document (เท�ยบได!กี่�บ Row)• JSON document (key, value) เช่%น

{ “name” : “som-tam”, “price” : 30, “ingredients” : [“papaya”, “tomato”, “chili”]}

3

Page 4: Basic MongoDB

BSON Encoding

• ผู้'!ใช่!มอง document อย'%ในร'ป็แบบข้อง JSON• ข้!อม'ลจร�งจะเกี่.บในร'ป็ BSON (Binary JSON)• BSON - http://bsonspec.org

{_id: ObjectId(XXXXXXXXXXXX), hello: “world”}

\x27\x00\x00\x00\x07_id\x00XXXXXXXXXXXX\x02hello\x00\x06\x00\x00\x00world\x00\x00

4

Page 5: Basic MongoDB

เป็ร�ยบเท�ยบกี่�บ Relational DB

Server Database Table Row Column• ม� Join• Atomicity ระด�บ

Transaction

Server Database Collection Document

(JSON) Field• ไม%ม� Join• Atomicity ระด�บ

Document

Relational DB MongoDB

5

Page 6: Basic MongoDB

เร��มต่!นใช่!งาน• DBMS ข้อง MongoDB

– mongod ร�นเป็�น daemon process

• Mongo Shell– mongo สิ%งค/าสิ��งไป็ย�ง mongod โดยใช่!ภาษา

JavaScript

• MongoDB API (http://api.mongodb.org/) – pymongo สิ/าหร�บภาษา Python

6

Page 7: Basic MongoDB

ต่�วอย%างค/าสิ��ง> db.people.insert( {name:’Wachira Poothong’,

email:’[email protected]’, sex:’male’} )

> db.people.insert( {name:’Pisit Makpaisit’, age:25, interesting:[‘Parallel Computing’, ‘Programming’]} )

Schemaless!

7

Page 8: Basic MongoDB

ต่�วอย%างค/าสิ��ง> db.people.find(){ "_id" : ObjectId("51206cee15407f12ea3db21b"),

"name" : "Wachira Poothong", "email" : "[email protected]", "sex" : "male" }

{ "_id" : ObjectId("51206d2a15407f12ea3db21c"), "name" : "Pisit Makpaisit", "age" : 25, "interesting" : [ "Parallel Computing", "Programming" ] } db.people.insert( {name:’Wachira Poothong’, email:’[email protected]’, sex:’male’} )

> db.people.find( {name:’Pisit Makpaisit’} ){ "_id" : ObjectId("51206d2a15407f12ea3db21c"),

"name" : "Pisit Makpaisit", "age" : 25, "interesting" : [ "Parallel Computing", "Programming" ] }

8

Page 9: Basic MongoDB

ต่�วอย%างค/าสิ��ง> 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" : "[email protected]", "sex" : "male" }

9

Page 10: Basic MongoDB

ต่�วอย%างค/าสิ��ง> db.people.update( {name:’Wachira Poothong’}, {age:25} )> db.people.findOne( ){ "_id" : ObjectId("51206cee15407f12ea3db21b"),

"name" : "Wachira Poothong", “age" : 25, "email" : "[email protected]", "sex" : "male" }

> db.people.remove( {name:’Wachira Poothong’} )> db.people.remove()

10

Page 11: Basic MongoDB

CRUD

Operator SQL MongoDBCreate INSERT INSERTRead SELECT FIND

Update UPDATE UPDATEDelete DELETE REMOVE

11

Page 12: Basic MongoDB

กี่ารออกี่แบบ Schema

• เน��องจากี่ไม%ม� Join เหม�อน RDBMS• Pre-join หร�อ Embedded• Application-Driven Schema - ออกี่แบบ

โดยด'จากี่กี่ารใช่!งานข้!อม'ลข้องโป็รแกี่รม

12

Page 13: Basic MongoDB

ต่�วอย%างเว.บเพิจหน!าแสิดงข้!อม'ล DVD• RDBMS เกี่.บข้!อม'ลเป็�น table ด�งน�1

– 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: ‘น!องแป็2ง’, body: ‘สิน�กี่จ�งเบย’, date: ‘2012-12-22 10:12:07’}] }

13

Page 14: Basic MongoDB

ท/าย�งไงเม��อไม%ม� Join

• Join เอง ในระด�บ Application• Pre-join หร�อ Embedded โดยพิ�จารณาจากี่

– ความถู��ในกี่ารใช่!งานร%วมกี่�น– ข้นาดข้อง document

• Embedded ท/าให! atomicity ระด�บ document เพิ�ยงพิอ

14

Page 15: Basic MongoDB

Replication

• เกี่.บข้!อม'ลซ้ำ/1ากี่�นในหลายท��• เพิ��ม availability• Back up ข้!อม'ล• Read ข้!อม'ลได!เร.วข้51น

15http://blog.codecentric.de/en/2012/12/mongodb-the-sixth-sense/

Page 16: Basic MongoDB

Replica Sets

• เป็�น cluster ข้อง mongod (daemon)• ข้!อม'ลจะถู'กี่เข้�ยนลงไป็ท��ต่�ว primary (ม�เพิ�ยงต่�ว

เด�ยว)• ต่�วอ��นจะเร�ยกี่ว%า secondary และค�ดลอกี่ข้!อม'ล

มาจากี่ primary• Automated failover – ถู!า primary ต่าย

จะเล�อกี่ต่�วใหม%มาเป็�น primary อ�ต่โนม�ต่�16

Page 17: Basic MongoDB

Sharding

• แบ%งกี่ล�%มข้อง document ไป็ย�งเคร��องต่%างๆ

• แบ%ง Collection ออกี่เป็�น chunks

• ใช่! shard key เป็�นหล�กี่ในกี่ารแบ%ง• เม��อม� shard หน5�งม� chunks มากี่

เม��อเท�ยบกี่�บ shard อ��น จะท/ากี่าร redistribute (Shard Balancing)

17http://blog.codecentric.de/en/2012/12/mongodb-the-sixth-sense/

Page 18: Basic MongoDB

เม��อไหร%จ5งท/า Sharding

• เม��อข้!อม'ลมากี่จน Storage ข้องเคร��องเด�ยวเกี่.บไม%พิอ

• เพิ��มป็ระสิ�ทธิ�ภาพิด!วยกี่ารเพิ��มข้!อม'ลท��ท/างานบน RAM

• ม�กี่ารเข้�ยนข้!อม'ลจ/านวนมากี่ (ต่!องกี่ารให!เข้�ยนได!เร.ว)

18

Page 19: Basic MongoDB

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

Page 20: Basic MongoDB

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

Page 21: Basic MongoDB

Map-Reduce

• orders เป็�นช่��อ collection• เร�ยกี่ด!วยฟั9งกี่�ช่�น mapReduce ( )• น/าผู้ลล�พิธิ�ไป็เกี่.บท�� collection ช่��อ

map_reduce_example db.orders.mapReduce(

mapFunction, reduceFunction, { out: "map_reduce_example" } )

21

Page 22: Basic MongoDB

เอกี่สิารอ!างอ�ง• 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/

map-reduce/

22