วันพุธที่ 9 มกราคม พ.ศ. 2556

การเปรียบเทียบระหว่าง Relation Database กับ MongoDB

Relation Database
MongoDB
Database
Mongo Instance
Table
Collection
Row
Document
Column ,Field
Field
Index
Index
Cursor
Cursor
Schema
-

ตัวอย่างเปรียบเทียบระหว่าง SQL Statement กับ Mongo Statement

ตัวอย่างเปรียบเทียบระหว่าง SQL Statement กับ Mongo Statement ได้ดังตารางข้างล่างนี้

SQL STATEMENT 
MONGO QUERY LANGUAGE STATEMENT 
CREATE TABLE USERS (a Number, b Number)
db.createCollection("mycoll")
INSERT INTO USERS VALUES(1,1)
db.users.insert({a:1,b:1})
SELECT a,b FROM users
db.users.find({}, {a:1,b:1})
SELECT * FROM users
db.users.find()
SELECT * FROM users WHERE age=33
db.users.find({age:33})
SELECT a,b FROM users WHERE age=33
db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 ORDER BY name
db.users.find({age:33}).sort({name:1})
SELECT * FROM users WHERE age>33
db.users.find({'age':{$gt:33}})})
SELECT * FROM users WHERE age<33
db.users.find({'age':{$lt:33}})})
SELECT * FROM users WHERE name LIKE "%Joe%"
db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE "Joe%"
db.users.find({name:/^Joe/})
SELECT * FROM users WHERE age>33 AND age<=40
db.users.find({'age':{$gt:33,$lte:40}})})
SELECT * FROM users ORDER BY name DESC
db.users.find().sort({name:-1})
SELECT * FROM users WHERE a=1 and b='q'
db.users.find({a:1,b:'q'})
SELECT * FROM users LIMIT 10 SKIP 20
db.users.find().limit(10).skip(20)
SELECT * FROM users WHERE a=1 or
b=2
db.users.find( { $or : [ { a : 1 } ,
  { b : 2 } ] } )
SELECT * FROM users LIMIT 1
db.users.findOne()
SELECT DISTINCT last_name FROM users
db.users.distinct('last_name')
SELECT COUNT(*y)
FROM users
db.users.count()
SELECT COUNT(*y)
FROM users where AGE > 30
db.users.find({age:
{'$gt': 30}}).count()
SELECT COUNT(AGE)
from users
db.users.find(
{age: {'$exists': true}}).count()
CREATE INDEX myindexname ON users(name)
db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC)
db.users.ensureIndex({name:1,ts:-1})
EXPLAIN SELECT * FROM users WHERE z=3
db.users.find({z:3}).explain()
UPDATE users SET a=1
WHERE b='q'
db.users.update({b:'q'},
{$set:{a:1}}, false, true)
UPDATE users SET a=a+2
WHERE b='q'
db.users.update({b:'q'},
{$inc:{a:2}}, false, true)
DELETE FROM users WHERE z="abc"
db.users.remove({z:'abc'});

Install และใช้งาน MongoDB เบื้องต้น









  1.  Download โปรแกรม Mongo DB จากที่นี่ http://www.mongodb.org/downloads
  2. เมื่อ Download เสร็จแล้วให้ทำการ Unzip ไว้ที่ Drive C 3.
  3. ทำการ Rename Folder mongodb-win32-* ให้เป็น mongodb 4.
  4. สร้าง Folder ขึ้นมาใน Folder mongodb มา 1 Folder ชื่อ db 5.
  5. ภายใต้ Folder DB ให้สร้างอีก 1 Folder ใช้ชื่อว่า data 6.
  6. ทำการ Set Path Database ของ MongoDB โดยใช้คำสั่ง
    c:\mongodb\bin\mongod.exe –dbpath [path Database] จะได้ดังรูป
  7.  หากขึ้นตามรูปนี้ถือว่าได้ทำการ Start MongoDB ขึ้นมาแล้ว โดย Data จะอยู่ที่ c:\mongodb\DB\Data หากเข้าไปดูที่ Folder ดังกล่าวจะที 1 File และ 1 Folder คือ File mongod.lock และ Folder journal ดังรูป
  8. ในการติดต่อกับ mongodb นั้นให้เราเปิดหน้า Command ขึ้นมาอีก 1 หน้า แล้วเข้าไปที่ c:\mongodb\bin ¬แล้วใช้คำสั่ง mongo.exe หากสำเร็จจะขึ้นมาดังรูป
     
    หากมาดูที่หน้าที่เป็น Server จะเห็นว่าจะมี 1 Connection กำลัง Connect อยู่
  9. ลองใช้คำสั่งเพื่อ save ข้อมูลลงใน Database ของ mongo โดยใช้คำสั่ง db.collection.save({key:ข้อมูล})
    เช่น db.test.save({a:1}) ดังรูป 10.
  10. ในการค้นหาข้อมูลก็จะใช้ .find() ในการค้นหาข้อมูล

    เราก็จะเห็นข้อมูลที่เรา save ไว้ทีแรก 11. ทีนี้ลองเก็บข้อมูลหลายๆ Record และลองเรียกออกมาดู ดังรูป

    จากรูปจะเห็นว่าข้อมูลที่เราจะบันทึกลงไป (ตามที่ลูกศรชี้) จะเป็นตัวเลข หรือตัวอักษรก็ได้

Mongo DB คือ ?

              MongoDB เป็น Database ที่พัฒนาโดยบ. 10 Gen และเป็น Open Source ที่ให้ใช้งานได้ฟรี ตัวของ MongoDB ที่แต่ต่างจาก Database ปัจจุบัน คือ MongoDB ไม่ใช่ Relational Database แต่จะเป็นแบบ NoSQL Database แบบ Document Store คือ การเก็บข้อมูลเชิงเอกสาร ซึ่งจะไม่ได้เก็บข้อมูลเป็น Table และ Row แต่การจัดเก็บเป็น Collection และในแต่ละ Collection นั้นจะมี Attribute แตกต่างกัน รวมทั้งมี Data Type ที่แตกต่างกันก็ได้ จึงทำให้เหมาะกับงานที่มีข้อมูลจำนวนมาก และรองรับการทำ Full Index ทำให้สามารถที่จะค้นหาข้อมูลได้อย่างรวดเร็วในขณะที่ข้อมูลมีปริมาณมากๆได้ อีกทั้งในการขยายขนาดของระบบนั้นสามารถทำค่อนข้างง่ายกว่า เพราะการทำงานแบบ Scale นั้นจะมีตัวกลางที่เป็น Controller เพื่อทำหน้าที่ในการจัดการ Data ดังรูป



               ทำให้การขยายก็เพียงเพิ่มส่วนของ Share Data ขึ้นมา และทำการ Config ให้ตัวที่เป็น Controller ได้รับรู้นั่นเอง

fanslave3

get-fans-468x60-2