2. Phase 01
NoSQL là gì,
tại sao lại sử
dụng NoSQL
Phase 02
MongoDB là
gì? Tính chất
của nó
Phase 03
Cấu trúc lưu
trữ dữ liệu của
MongoDB
Phase 04
Những thao
tác cơ bản với
MongoDB
Những nội dung chính...
3. Khi làm việc với database, chúng ta đã quá quen với SQLServer, MySQL, PostgreSQL, Oracle ...
Điểm chung của những database này là sử dụng ngôn ngữ SQL để truy vấn dữ liệu. Nhưng có 1
dạng database khác với những đặc tính khác biệt được gọi chung dưới cái tên là NoSQL
1. NoSQL là gì ?
Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụng làm tên
gọi chung cho các lightweight open source relational database (cơ sở dữ
liệu quan hệ nguồn mở nhỏ) nhưng không sử dụng cho truy vấn. Vào năm
2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ NoSQL
trong một hội thảo về cơ sở dữ liệu nguồn mở phân tán. Thuật ngữ
NoSQL đánh dấu bước phát triển của thế hệ database mới: distributed
(phân tán) + non-relational (không ràng buộc). Đây là 2 đặc tính quan
trọng nhất của NoSQL
I. Giới thiệu về NoSQL
4. 2. Tại sao cần có NoSQL ?
• Sở dĩ người ta phát triển NoSQL xuất phát từ yêu cầu cần những
database có khả năng lưu trữ dữ liệu với lượng cực lớn, truy vấn dữ
liệu với tốc độ cao mà không đòi hỏi quá nhiều về năng lực phần cứng
cũng như tài nguyên hệ thống và tăng khả năng chịu lỗi.
• Đây là những vấn đề mà các relational database không thể giải quyết
được.
• Lượng dữ liệu mà các hệ thống cần phải xử lý giờ đây ngày 1 lớn. Ví dụ
như Google, Facebook phải lưu trữ và xử lý một lượng dữ liệu cực lớn
mỗi ngày .
5. Key - value
MongoDB, CouchDB
Document database
Redis, Riak
Column
Family
HBase, Cassandra
Graph
Database
Neo4j
3. Một số loại NoSQL thông dụng
Dữ liệu được thêm
vào lưu trữ dưới
dạng cấu trúc JSON,
trong đó dữ liệu có
thể là bất kỳ kiểu
nào, từ số nguyên
đến chuỗi hay đến
các văn bản tự do
Các giá trị dạng tự
do, từ số nguyên
hoặc chuỗi đơn giản
đến các tài liệu
JSON phức tạp,
được truy cập trong
cơ sở dữ liệu bằng
các khóa.
Dữ liệu được lưu trữ
trong các cột thay vì
các hàng như hệ
thống SQL. Bất kỳ số
lượng cột nào (nhiều
loại dữ liệu khác
nhau) có thể được
nhóm hoặc tổng hợp
khi cần cho truy vấn
Dữ liệu được biểu
diễn dưới dạng mạng
hoặc đồ thị của các
thực thể và các mối
quan hệ của thực thể
đó, với mỗi node
trong biểu đồ là một
khối dữ liệu ở dạng
tự do
6. MongoDB là một database hướng tài liệu (document), một
dạng NoSQL database. Vì thế, MongoDB sẽ tránh cấu trúc
table-based của relational database để thích ứng với các tài
liệu như JSON bằng một schema rất linh hoạt gọi là BSON
(Binary JSON). Một document bao gồm các cặp field và value.
MongoDB documents tương tự với JSON object. Các giá trị
của các trường có thể bao gồm document khác, một mảng,
hoặc mảng của các document.
II. MongoDB là gì ?
BSON là mã hóa nhị phân của các tài liệu giống như JSON mà MongoDB sử dụng
khi lưu trữ tài liệu trong các bộ sưu tập. Nó bổ sung hỗ trợ cho các loại dữ liệu không
được hỗ trợ trong JSON như BinData và Date.
8. 1. Không ràng buộc – Non relational:
Đối với hệ cơ sở dữ liệu NoSQL, không sử dụng ràng buộc như SQL, dữ liệu
sẽ ở dạng JSON, BSON. Khác với RDBMS, dữ liệu trong đây không có sự
ràng buộc và không có yêu cầu tuân theo khuôn khổ nhất định, nên có thể
chèn vào thoải mái bất cứ thông tin gì .
Các tính chất của MongoDB (NoSQL)
9. 2. Khả năng mở rộng:
Khả năng mở rộng – High Scalability: Đối với NoSQL sẽ không có giới hạn
mở rộng, sử dụng hệ csdl phân tán, khi cần mở rộng chỉ cần thêm các
node chia tải và chia dữ liệu
• Khả năng mở rộng chiều dọc – Vertical scalable, SQL thường dùng,
tăng bộ nhớ máy chủ,... giúp hoạt động tốt hơn (Scale Up)
• Khả năng mở rộng chiều ngang – Honrizontal scalable: NoSQL thường
dùng, không cần nâng cấp server, chỉ cần thêm server(node) vào, đối
với csdl phân tán sẽ mở rộng theo chiều ngang không phải theo chiều
dọc (Scale Out)
11. 3. Distributed Data ( Phân tán dữ liệu ):
Đối với các tập đoàn đa quốc
gia, các data center nằm rải rác
trên các nước trên thế giới, giúp
truy cập nhanh nhất và lưu trữ
tại 1 data center tổng nắm toàn
bộ data, mỗi công ty có một thiết
kế dữ liệu phân tán khác nhau
tùy thuộc vào sự sắp đặt của
người điều hành.
12. 4. Tính sẵn sàng cao - High Availability:
Khi thêm 1 server(node) hay tắt 1 server đều không ảnh hưởng tới những server
còn lại, , MongoDB sử dụng mô hình replica set nhằm đảm bảo việc sao lưu và
khôi phục dữ liệu
13. Replica set
Gồm 1 primary node và nhiều node phụ, chỉ có primary node mới được write, khi
heartbeat quá thời gian cho phép (thường là 10s) thì một secondary sẽ được bầu
làm primary node sau một khoảng thời gian ngắn
14. 5. Lưu trữ tốt – Durability:
Đối với các hệ csdl SQL sẽ lưu ở ổ đĩa cứng, không nằm ở RAM, đối với NoSQL
sẽ nằm ở bộ nhớ máy tính và ổ đĩa cứng, khi truy xuất sẽ lấy dữ liệu ở bộ nhớ
giúp tăng tốc độ xử lí
15. Khi một server có vấn đề sẽ không
gây ảnh hưởng gì tới các server
còn lại, server ảo tính toán Load
Balance chia tải các request của
client tới server, áp dụng mô hình
về cây và node để giải bài toán chia
tải. Bằng cách sử dụng
Sharding, MongoDB chia tỷ lệ theo
chiều ngang để người dùng chọn
một Shard key,...
MongoDB Sharding
6. Cân bằng tải
16. Nhất quán cuối – Eventual
consistency: Sự nhất quán hay sự
đồng bộ giữa các server(node) sẽ
chậm hơn vì khi đưa 1 dữ liệu mới
vào, nó sẽ lưu tạm thời trên Ram
và trên server vừa truy cập, sau đó
nó sẽ đồng bộ tới các server khác.
Vì vậy nên NoSQL không phù hợp
với các yêu cầu đồng bộ cao như
ngân hàng, chứng khoán,...
7. Nhất quán cuối – Eventual consistency:
18. Sử dụng MongoDB mang lại rất nhiều lợi ích đến người dùng:
• Đầu tiên có thể nhắc đến là tính linh hoạt lưu trữ dữ liệu theo các kích cỡ
khác nhau, dữ liệu dưới dạng hướng tài liệu JSON nên có thể chèn vào thoải
mái bất cứ thông tin gì bạn muốn.
• Khác với RDBMS, dữ liệu trong đây không có sự ràng buộc và không có yêu
cầu tuân theo khuôn khổ nhất định, điều này tiết kiệm thời gian cho việc
kiểm tra sự thỏa mãn về cấu trúc nếu muốn chèn, xóa, cập nhật hay thay đổi
các dữ liệu trong bảng.
• MongoDB dễ dàng mở rộng hệ thống bằng cách thêm node vào cluster –
cụm các node chứa dữ liệu giao tiếp với nhau.
• Ưu điểm thứ tư là tốc độ truy vấn nhanh hơn nhiều so với hệ quản trị cơ sở
dữ liệu quan hệ RDBMS do dữ liệu truy vấn được cached lên bộ nhớ RAM để
lượt truy vấn sau diễn ra nhanh hơn mà không cần đọc từ ổ cứng.
1. Ưu điểm
19. Ngoài các ưu điểm vượt trội, vẫn còn một số hạn chế khi cài đặt và sử dụng cần
chú ý như sau:
• MongoDB không có các tính chất ràng buộc như trong RDBMS –> dễ bị làm
sai, nhầm lẫn dữ liệu
• Không hỗ trợ join giống như RDBMS nên khi viết function join trong code ta
phải làm bằng tay khiến cho tốc độ truy vấn bị giảm.
• Sử dụng nhiều bộ nhớ: do dữ liệu lưu dưới dạng key-value, các collection chỉ
khác về value do đó key sẽ bị lặp lại. Không hỗ trợ join nên sẽ bị dữ thừa dữ
liệu (trong RDBMS thì ta chỉ cần lưu 1 bản ghi rồi các bản ghi khác tham
chiếu tới còn trong MongoDB thì không)
• Bị giới hạn kích thước bản ghi: mỗi document không được có kích thước >
16Mb
2. Nhược điểm
20. Khi nào nên
dùng MongoDB
MongoDB dùng cho các hệ thống:
● Hệ thống realtime (thời gian
thực) yêu cầu phản hồi nhanh
● Các hệ thống bigdata với yêu
cầu truy vấn nhanh.
● Các hệ thống có tần suất
write/insert lớn
● Sử dụng làm search engine
21. IV.Các thành phần
chính của MongoDB
Document
Collection
Database
Gồm nhiều collection
Gồm nhiều document
Gồm nhiều field, document, ...
22. Database: là một container của các
collection giống như là một cơ sở dữ
liệu chứa các bảng trong RDBMS. Mỗi
database có một bộ các file trên hệ
thống file. Server của MongoDB có thể
lưu trữ được nhiều database.
Database
23. Collection
Là một tập các
Documents. Một
collection tương
đương với một bảng
được tạo bởi một hệ
quản trị cơ sở dữ
liệu quan hệ SQL
Document
Là một bản ghi trong
1 collection của
MongoDB tương ứng
được gọi là 1
document.
Document bao gồm
các Field hoặc có thể
chứa các document
khác
Field
Là một cặp key-
value. 1 Document
có thể không có
trường nào hoặc có
thể có nhiều trường.
Các trường này
tương tự như các
cột trong RDBMS
Các thành phần chính của MongoDB
26. • Create hay Insert thêm một document mới vào một
collection. Nếu collection hiện không tồn tại, insert sẽ tạo
collection.
• db.collection.insertOne(): chèn một tài liệu mới vào một
collection. Nếu document không có trường _id , MongoDB sẽ
tự động thêm trường _id với value kiểu ObjectId.Ví dụ:
db.inventory.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"],
size: { h: 28, w: 35.5, uom: "cm" } })
1. Create Operations
27. db.collection.insertMany(): insert nhiều document vào một collection,
truyền vào phương thức là mảng các document.Ví dụ:
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size:
{ h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9,
w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size:
{ h: 19, w: 22.85, uom: "cm" } }
])
Ví dụ trên chèn 3 document mới vào collection inventory. Nếu document không chỉ định
trường _id, MongoDB thêm trường _id với một giá trị kiểu ObjectId vào mỗi document.
1. Create Operations
28. 2. Read Operations
Read operation truy xuất documents
từ một collection. Để lấy ra tất cả các
document trong collection, truyền
vào một document trống vào phương
thức find. Ví dụ:
db.inventory.find( {} )
Query and Projection Operators — MongoDB Manual
Câu lệnh dưới đây lấy ra các document có
status bằng "D" từ collection inventory
db.inventory.find({ status: "D"})
Truy vấn AND, OR:
Một truy vấn kết hợp có thể chỉ định các
điều kiện thỏa mãn cho nhiều trường của
document. Ví dụ dưới đây lấy ra tất cả các
documents trong collection inventory với
trường status bằng "a" và trường qty ít hơn
30 ($lt)
db.inventory.find( { status: "A",
qty: { $lt: 30 } } )
$lt: bé hơn , $lte: bé hơn hoặc bằng
$ge: lớn hơn, $gte: lớn hơn hoặc bằng
$gte
$gte
29. Update một document với db.collection.updateOne()
Ví dụ sau sẽ update document đầu tiên mà có trường item bằng "paper":
db.inventory.updateOne(
{ item: "paper" },
{$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }})
Update nhiều Document với db.collection.updateMany(),
Để thay nội dung của một document (ngoại trừ trường _id), truyền vào toàn
bộ document mới là một tham số thứ hai của hàm db.collection.replaceOne()
Link: Update Operators
3. Update Operations
30. - Delete operation xóa bỏ document từ một collection.
- Để xóa tất cả các tài liệu từ một collection, truyền một document filter {} tới
phương thức db.collection.deleteMany()
- Xóa tất cả các document thỏa mãn điều kiện. Ví dụ:
db.inventory.deleteMany({ status : "A" })
- Xóa chỉ một document thỏa mãn điều kiện, sử dụng db.collection.deleteOne().
Ví dụ: db.inventory.deleteOne({ status: "D" })
- Có thể sử dụng query operators để chỉ định các điều kiện lọc
4. Delete Operation
31. CREDITS: This presentation template was created by Slidesgo,
including icons by Flaticon, and infographics & images by Freepik
Link tham khảo:
Database Commands
Thanks
Anny question ?