Tìm hiểu MongoDB

MongoDB là CSDL mã nguồn mở NoSQL, được viết bằng C++.

Là 1 CSDL đa nền tảng, hoạt động trên các khái niệm Collection và Document, cung cấp hiệu suất cao, khả năng mở rộng dễ dàng.

Các thuật ngữ trong MongoDB

  • _id: là trường bắt buộc có trong mỗi document. _id đại diện cho 1 giá trị duy nhất của document đó. _id có thể hiểu là khóa chính trong document.
  • Collection: là nhóm của nhiều document. Collection có thể hiểu là 1 bảng tương ứng trong MySQL. Collection nằm trong 1 CSDL duy nhất. Các Collection không phải định nghĩa cột, hàng hay kiểu dữ liệu.
  • Cursor: là con trỏ đến tập kết quả của 1 truy vấn.
  • Database: nơi chứa các Collection, giống database trong MySQL. Mỗi database có 1 tập tin riêng lưu trữ trên bộ nhớ vật lý. Một máy chủ MongoDB có thể chứa nhiều database.
  • Document: 1 bản ghi thuộc 1 collection. Các document bao gồm tên và giá trị.
  • Field: 1 cặp name – value trong document. 1 document có thể có 0 hoặc nhiều field.
  • Json (viết tắt của javascript object notation). Là 1 kiểu định dạng dữ liệu mà hầu hết các ứng dụng đều đọc và xử lý được. Json sử dụng cặp giá trị key – value. Ví dụ:
JSON
{
  "name": "Smartweb",
  "title": "Thiết kế website"
}
  • Index: là những cấu trúc đặc biệt, dùng để chứa 1 phần nhỏ của các tập dữ liệu 1 cách dễ dàng để quét. Index lưu trữ giá trị của 1 field cụ thể hoặc thiết lập các field, sắp xếp giá trị các field này. Index giúp MongoDB phân tích truy vấn 1 cách hiệu quả thay vì phải quét tất cả các document của collection.

Lưu ý index không phải là _id.

So sánh MySQL và MongoDB:

DatabaseDatabase
TableCollection
RowDocument
ColumnField

Ví dụ Embedded Documents:

JSON
{
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "David", last: "Beckham"},
contact: { phone: { type: "cell", number: "0933-339-394" } },
}

Để gọi field last trong nam, ta dùng name.last. Để chỉ field number ta dùng contact.phone.number.

_id là do hệ thống tự tạo ra để làm khóa chính.

Các kiểu dữ liệu trong MongoDB:

TypeNumberAliasDescription
Double1“double”Số thực
String2“string”Kiểu phổ biến nhất, phải là UTF-8 hợp lệ
Object3“object”Sử dụng cho các Document được nhúng vào
Array4“array”Mảng
Binary data5“binData”Dữ liệu nhị phân
Undefined6“undefined”
ObjectId7“objectId”Lưu trữ Id của Document
Boolean8“bool”true/false
Date9“date”Date time trong định dạng UNIX time
Null10“null”Lưu trữ 1 giá trị null
Regular Expression11“regex”Lưu trữ biểu thức chính quy
DBPointer12“dbPointer”
Javascript13“javascript”Lưu trữ javascript code
Symbol14“symbol”Chuỗi
Javascript (with scope)15“javascriptWithScope”
32-bit integer16“int”Số nguyên
Timestamp17“timestamp”Ghi dấu thời điểm thêm mới/cập nhật
64-bit integer18“long”Số nguyên
Decimal 12819“decimal”
Min key-1“minKey”So sánh một giá trị với các phần tử BSON thấp nhất và cao nhất
Max key127“maxKey”So sánh một giá trị với các phần tử BSON thấp nhất và cao nhất

Một số câu lệnh trong MongoDB

Câu lệnhSQLMongoDB
Create tableCREATE TABLE people (id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id))db.people.insertOne({User_id: “abc123”, Age: 55, Status: “A”})
Drop tableDROP TABLE peopledb.people.drop()
Insert records into tablesINSERT INTO people(user_id, age, status) VALUES (“bcd001”, 45, “A”)db.people.insertOne( { user_id: “bcd001”, age: 45, status: “A” })
SelectSELECT *FROM peopledb.people.find()
SELECT id, user_id, status FROM peopledb.people.find( { }, { user_id: 1, status: 1 } )
SELECT * FROM people WHERE status = “A” AND age = 50db.people.find( {status: “A”, age: 50 } )
SELECT * FROM people WHERE user_id like “%bc%”db.people.find( {user_id: /bc/} )
db.people.find( { user_id: {$regex: /bc/ } } )
SELECT COUNT(user_id) FROM peopledb.people.count( { user_id: { $exists: true } } )
db.people.find( { user_id: { $exists: true } } ).count()
Update recordsUPDATE people SET status = “C” WHERE age > 25db.people.updateMany( { age: { $gt: 25 } }, { $set: { status: “C” } } )
UPDATE people SET age = age + 3 WHERE status = “A”db.people.updateMany( { status: “A” } , { $inc: { age: 3 } } )
Delete RecordsDELETE FROM people WHERE status = “D”db.people.deleteMany( { status: “D” } )
DELETE FROM peopledb.people.deleteMany({})

MongoDB hoạt động như thế nào?

  • MongoDB hoạt động dưới 1 tiến trình ngầm service, luôn mở 1 cổng (mặc định 27017) để lắng nghe truy vấn.
  • Mỗi bản ghi của MongoDB được tự động gắn thêm 1 field _id, thuộc kiểu dữ liệu ObjectId, tự động đánh index.
  • Khi có truy vấn, bản ghi được cache lên RAM để phục vụ lượt truy cập sau.
  • Khi có yêu cầu thêm/sửa/xóa, sau 60s MongoDB mới thực hiện ghi dữ liệu từ RAM xuống ổ cứng.

Ưu điểm của MongoDB:

  • Ít schema hơn: vì trong 1 collection có thể chứa nhiều document khác nhau. Mỗi document lại có thể có số field, nội dung, kích thước khác nhau.
  • Cấu trúc đối tượng rõ ràng.
  • Khả năng mở rộng cực lớn.
  • Truy cập dữ liệu nhanh.

Một số công cụ quản trị MongoDB:

  • RoboMongo
  • UMongo
  • MongoExplorer
  • RockMongo

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *