Professional Documents
Culture Documents
Đề tài:
Họ và tên:
MSSV:
LỚP: ITS322_202_D02
Giảng viên hướng dẫn: ThS Trịnh Hoàng Nam
Bảng 1 Các tính năng của MongoDB. Nguồn: MongoDB Documentation ................... 9
Bảng 2 Lịch sử phát hành MongoDB. Nguồn : MongoDB Documentation ................ 14
Bảng 3 Các lựa chọn tạo backup trong MongoDB....................................................... 23
Bảng 4 các tùy chọn backup ......................................................................................... 23
Bảng 5 Các tùy chọn cấu hình cho Collection Nguồn: MongoDB Documentation .... 24
Bảng 6 Các thao tác CRUD trong MongoDB .............................................................. 27
Bảng 7. Các toán tử so sánh trong MongoDB. Nguồn:viblo.asia ................................ 28
Bảng 8 Các thao tác trên view ...................................................................................... 29
Bảng 9 Danh sách các tùy chọn để tạo chỉ mục ........................................................... 30
Bảng 10 Nhóm Database User Roles ........................................................................... 35
Bảng 11 Nhóm Database Adminnistration Roles ......................................................... 35
Bảng 12 Nhóm All Database Roles .............................................................................. 36
DANH SÁCH TỪ VIẾT TẮT
CSDL Cơ sở dữ liệu
RDBMS Relational Database Management
System
NoSQL Not Only SQL
CRUD Viết tắt của 4 từ: Create, Read, Update,
Delete
GUI Graphical User Interface
SQL Structured Query Language
NoSQL Not Only SQL
CHƯƠNG 1: TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB
I. Một số khái niệm cơ bản
1. Cơ sở dữ liệu (Database)
Cơ sở dữ liệu ( Database) là một thuật ngữ được sử dụng thường xuyên trong lĩnh vực
công nghệ thông tin. Theo các chuyên gia, CSDL được định nghĩa là “ một tập hợp các
dữ liệu có tổ chức, thường được lưu trữ và truy cập điện tử từ hệ thống máy tính.”. Hay
có thể hiểu CSDL là một tập hợp các dữ liệu có liên quan với nhau về mặt luận lý đã
được tổ chức và sắp xếp. Hiện nay CSDL được phân làm 2 loại bao gồm :
- SQL: Dữ liệu được mô hình hóa dưới dạng các hàng và cột trong bảng, sử dụng
ngôn ngữ T-SQL để truy vấn dữ liệu.
- NoSQL: bao gồm các loại dữ liệu phi quan hệ được mô hình hóa dưới dạng các
loại phương tiện khác . CSDL này được gọi là NoSQL vì nó sử dụng các ngôn
ngữ truy vấn khác SQL.
1
3. Cơ sở dữ liệu quan hệ (Database Relationship)
Năm 1970, thuật ngữ “cơ sở dữ liệu quan hệ” đã được giới thiệu bởi EF Codd tại IBM
trong tài liệu nghiên cứu của mình “ A relational
Model of Data for Large Shared Data Banks”.
Trong tài liệu này, ông đã định nghĩa thuật ngữ
“Cơ sở dữ liệu quan hệ” như sau:
“Cơ sở dữ liệu quan hệ tổ chức dữ liệu theo các
bảng và có quan hệ với nhau để giảm thiểu sự dư
thừa dữ liệu đồng thời vẫn đảm bảo sự hiệu quả
trong lưu trữ và truy xuất dữ liệu ”
Ngày nay , cơ sở dữ liệu quan hệ được sử dụng Hình 3 Cơ sở dữ liệu quan hệ
phổ biến trong hầu hết các phần mềm quản lý dữ
liệu .
2
c) Một số thuật ngữ trong NoSQL
- Ràng buộc (Relational)
- Không ràng buộc ( Non – Relational)
- Khả năng mở rộng ( High Scalability)
- Khả năng mở rộng theo chiều dọc ( Vertical scalable)
- Khả năng mở rộng theo chiều ngang ( Horizontal scalable)
- Phân tán dữ liệu ( Distributed data)
- Triển khai linh hoạt ( Deployment Flexibility)
- Tính sẵn sàng (High Availability)
- Nhất quán cuối ( Eventual consistency)
- Lưu trữ tốt (Durability)
d) So sánh CSDL NoSQL và CSDL SQL
Hiện nay, có 2 loại hình cơ sở dữ liệu phổ biến nhất là SQL và NoSQL. Tuy cả hai
đều được sử dụng phổ biến nhưng chúng vẫn có những điểm khác nhau như sau:
Tính năng SQL NoSQL
Loại hình Mỗi database được xây Mỗi database được xây
dựng dựa trên các bảng có dựng dựa trên các tài liệu
quan hệ với nhau, mỗi (document).
hàng ứng với một record,
mỗi cột ứng với một field
Ngôn ngữ dữ liệu Sử dụng Structured Không có ngôn ngữ
Query Language Query.
Hiệu suất Kém hơn NoSQL vì mỗi Tốt hơn SQL vì nó bỏ qua
khi truy vấn nó phải tính các ràng buộc của dữ liệu.
toán, kiểm tra và xử lý các
mối quan hệ giữa các
bảng để đảm bảo tính nhất
quán của dữ liệu
Khả năng mở rộng SQL có thể mở rộng theo NoSQL có thể dễ dàng
chiều dọc và chiều ngang mở rộng theo chiều dọc
nhưng quá trình mở rộng và chiều ngang do các dữ
theo chiều ngang sẽ rất liệu đưa vào không phải
phức tạp nếu đã tồn tại dữ phụ thuộc vào cấu trúc
liệu trong database. Khi bảng cho trước. Dữ liệu
muốn bổ sung thêm một có thể thêm vào bất kỳ lúc
cột dữ liệu thì phải khai nào.
báo trước.
Tốc độ đọc/ghi Kém hơn NoSQL vì nó Tốc độ nhanh vì NoSQL
phải đảm bảo tính ràng bỏ qua các ràng buộc về
buộc dữ liệu giữa các dữ liệu của các bảng.
bảng. Nếu dữ liệu được
lưu trữ trên nhiều server
thì phải bảo đảm tính
nhất quán về dữ liệu trên
các Server với nhau
3
Phần cứng Đòi hỏi phần cứng cao Không đòi hỏi quá cao về
phần cứng
Thay đổi số node trong hệ Do yêu cầu về tính nhất Do NoSQL có tính nhất
thống quán dữ liệu nên khi ta quán cuối nên sẽ không
thêm hoặc xóa một node cần phải Shutdown hệ
bất kì thì cần phải thống như SQL
shutdown hệ thống trong
một khoảng thời gian
Truy vấn và báo cáo Có thể dễ dàng sử dụng NoSQL chưa hỗ trợ việc
ngôn ngữ Query để truy lấy báo cáo dữ liệu trực
vấn dữ liệu trực tiếp từ tiếp, việc lấy báo cáo thực
database hoặc sử dụng hiện chủ yếu thông qua
các công cụ hỗ trợ khác giao diện ứng dụng
Ứng dụng Được sử dụng cho các hệ Được sử dụng để xây
thống cần mối quan hệ dựng các hệ thống lưu trữ
chặt chẽ và tính đồng nhất số lượng dữ liệu lớn,
về dữ liệu, số lượng dữ không quá quan trọng về
liệu không quá nhiều. vấn đề đồng nhất dữ liệu
Như : tài chính , ngân trong một thời gian nhất
hàng,... định. Như: các mạng xã
hội, trang thương mại
điện tử...
Qua bảng trên ta có thể thấy NoSQL có những ưu điểm vượt trội hơn SQL về khả năng
xử lý và lưu trữ dữ liệu. Nhưng NoSQL không thể thay thế được SQL mà chúng sẽ hỗ
trợ, bổ sung cho SQL để xây dựng một hệ thống tốt hơn. Hiện nay, trên thế giới đã có
sự xuất hiện của một loại cơ sở dữ liệu mới, là sự kết hợp giữa NoSQL và SQL , tên là
NewSQL.
Hình 4 Sự khác nhau giữa NoSQL và SQL trong ứng dụng và cấu trúc lưu trữ. Nguồn : news.bnn.vn
4
e) Phân loại các CSDL NoSQL
Ngày nay, với sự phổ biến của NoSQL, thì cơ sở dữ liệu này cũng được phát triển và
phân thành nhiều loại khác nhau, các loại Cơ sở dữ liệu này khác nhau về cách lưu trữ
dữ liệu. Chúng được chia thành 5 nhóm như sau:
- Key-value: Đây là cơ sở dữ liệu được phát triển dựa trên ý tưởng sử dụng bảng
băm (hash – table), nó có một khóa duy nhất và một con trỏ chỉ đến một mục dữ
liệu cụ thể. Cơ sở dữ liệu này có khả năng phân mảnh cao và cho phép mở rộng
quy mô theo chiều ngang ở các quy mô lớn. Các mô hình loại này đơn giản và
dễ thực hiện nhưng nó không hiệu quả khi chỉ truy vấn hoặc update đến một phần
dữ liệu trong value. Cơ sở dữ liệu NoSQL loại Key-values thường được sử dụng
cho trò chơi, công nghệ quảng cáo và đặc biệt thích hợp cho IoT
Key
Value
Hình 5 Mô hình lưu trữ của CSDL NoSQL nhóm Key-Value. Nguồn: dotnet.edu.vn
- Cơ sở dữ liệu tài liệu ( Document Database) :Loại này được xây dựng dựa trên
ý tưởng từ Lotus Noted và tương tự như loại Key- value. Mô hình này bao gồm
tập hợp nhiều document. Bên trong mỗi document là tập hợp các key- value và
các cặp key-value này được lồng ghép với nhau. Dữ liệu trong những document
này thường được biểu diễn dưới dạng một đối tượng văn bản hoặc JSON. Với
loại cơ sở dữ liệu NoSQL này thì việc truy vấn sẽ được thực hiện hiệu quả hơn.
Tính chất linh hoạt và phân cấp của văn bản cho phép chúng phát triển phù hợp
với yêu cầu của ứng dụng. Hiện nay, Amazon DocumentDB và MongoDB là các
cơ sở dữ liệu tài liệu phổ biến cung cấp các API mạnh mẽ và trực quan để phát
triển linh hoạt và lặp lại.
5
Hình 7 Document Database ở định dạng JSON và XML. Nguồn: dotnet.edu.vn
Hình 6 Một record được lưu trữ trong cơ sở dữ liệu "Collumn Family".
- Cơ sở dữ liệu đồ thị (Graph Database): giống như tên gọi , cơ sở dữ liệu này sử
dụng cấu trúc của đồ thị để lưu trữ dữ liệu . Nó không giống với cơ sở dữ liệu
quan hệ lưu dữ liệu dưới dạng bảng hay các loại cơ sở dữ liệu NoSQL ở trên.
Mỗi bản ghi (record) trong cơ sở dữ liệu này được gọi là một Node, các node
được kết nối với nhau bằng các quan hệ giống như trong Hệ cơ sở dữ liệu quan
hệ (RMDBS) và có thể có các thuộc tính. Các mối quan hệ giữa các node này
không được tính vào thời gian truy vấn nên việc truy vấn sẽ nhanh hơn so với
trong RMDBS. Hiện này có rất nhiều cơ sở dữ liệu đồ thị có sẵn như Neo4J,
Infinite Graph, OrientDB,...
6
Hình 8 Mô hình Cơ sở dữ liệu đồ thị. Nguồn: dotnet.edu.vn
7
đầu của mình là tạo ra một nền tảng đám mây để chuyển hẳn sang tập trung vào việc
phát triển và duy trì MongoDB.
Tháng 2 năm 2009, 10gen đã cho ra mắt phần mềm MongoDB dưới dạng một dự án mã
nguồn mở. Để thương mại hóa sản phẩm chủ lực của mình, các nhà sáng lập đã quyết
định đổi tên của công ty thành MongoDB Inc. vào năm 2013 . Điều này đã làm cho
công ty MongoDB trở nên liên kết chặt chẽ hơn với sản phẩm cốt lõi của công ty. Cùng
với sự phát triển của dữ liệu lớn và điện toán đám mây trong các doanh nghiệp,
MongoDB ngày càng trở nên phổ biến và được ưa chuộng vì những lợi ích nó lại. Năm
2017, MongoDB trở thành một công ty giao dịch công khai, được niêm yết trên
NASDAQ với tên gọi MDB với giá IPO là 24 đô la một cổ phiếu.
3. Tìm hiểu về hệ quản trị cơ sở dữ liệu MongoDB.
a) Giới thiệu về MongoDB
MongoDB là một phần mềm quản trị cơ sở dữ liệu mã nguồn mở được thiết kế theo
kiểu hướng tài liệu. Bên cạnh đó, MongoDB còn là một cơ sở dữ liệu không quan hệ
,với việc sử dụng cơ chế NoSQL các dữ liệu trong hệ thống được cấu trúc một cách
linh hoạt không cần phải tuân theo một dạng cấu trúc nhất định nào. Nhờ có khả năng
đó nên MongoDB có thể được dùng để lưu trữ các dữ liệu có cấu trúc phức tạp ,đa dạng
và không cố định (hay còn gọi là Big Data).
MongoDB sử dụng các tài liệu (documents) linh hoạt thay vì các bảng và hàng để xử
lý và lưu trữ các dạng dữ liệu khác nhau như thông thường. Đơn vị dữ liệu cơ bản
trong cơ sở dữ liệu này là một tập hợp các cặp key-value. Nó cho phép các document
có các field và các cấu trúc khác nhau. Cơ sở dữ liệu này sử dụng định dạng lưu trữ tài
liệu được gọi là BSON là kiểu nhị phân của các tài liệu kiểu JSON. Là một cơ sở dữ
liệu NoSQL,MongoDB không yêu cầu hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), vì
vậy nó cung cấp một mô hình lưu trữ dữ liệu đàn hồi (elastic) cho phép người dùng
lưu trữ và truy vấn các kiểu dữ liệu đa biến một cách dễ dàng. Điều này không chỉ
Hình 2 MongoDB là CSDL NoSQL hướng tài liệu ( nhóm Document database). Nguồn:
https://viblo.asia/p/tim-hieu-mongo-db-4dbZN8Rq5YM
8
giúp đơn giản hóa việc quản lý cơ sở dữ liệu cho các nhà phát triển mà còn tạo ra một
môi trường có khả năng mở rộng cao cho các ứng dụng và dịch vụ đa nền tảng.
9
Với các tính năng như trên, MongoDB đã mang lại rất nhiều lợi ích cho người dùng mà
các cơ sở dữ liệu SQL chưa có. Một số ưu điểm của MongoDB có thể kể đến như:
- Tính linh hoạt lưu trữ dữ liệu: Do là một cơ sở dữ liệu NoSQL hướng Document,
các dữ liệu được lưu trữ dưới dạng JSON, nên các dữ liệu đưa vào sẽ không bị
bó buộc về số field, kiểu dữ liệu,... như vậy, ta có thể thêm bất cứ dữ liệu nào.
- Hiệu năng cao: trong MongoDB không có sự ràng buộc dữ liệu như trong một
cơ sở dữ liệu quan hệ, do đó khi muốn thêm, xóa hoặc update , hệ thống sẽ không
mất nhiều thời gian để kiểm tra thỏa mãn các điều kiện ràng buộc. Theo một số
nghiên cứu cho thấy: “Tốc độ truy vấn của MongoDB nhanh hơn hẳn so với các
hệ quản trị cơ sở dữ liệu quan hệ. Tốc độ insert của MongoDB có thể nhanh gấp
100 lần so với MySQL”
- Khả năng mở rộng theo chiều ngang: Trong MongoDB cs một khái niệm là
Cluster . Đây là các cụm node chứa dữ liệu của hệ thống, khi muốn mở rộng hệ
thống , ta chỉ cần thêm một node mới vào trong một Cluster.
- Trường “_id” trong MongoDB luôn được tự động đánh chỉ mục. Điều này đã
góp phần làm cho hệ thống đạt được hiệu suất truy vấn cao.
- Là một Rich Query Language, MongoDB có sẵn các phương thức để thực hiện
các thao tác CRUD.
Bên cạnh các ưu điểm như trên, MongoDB vẫn còn tồn tại một số hạn chế trong khi cài
đặt và sử dụng:
- Vì MongoDB không có các ràng buộc về dữ liệu nên khi thao tác rất dễ bị sai dữ
liệu. Do đó khi sử dụng hệ quản trị cơ sở dữ liệu này, ta cần cẩn trọng trong thao
tác để tránh ảnh hưởng đến cơ sở dữ liệu sẵn có.
- Một điều đáng lo ngại khác chính là MongoDB sử dụng khá nhiều bộ nhớ. Do
dữ liệu trong MongoDB được lưu dưới dạng key-value trong khi trong mỗi
collection thường chỉ khác nhau về value nên sẽ gây ra tình trạng lặp lại key dẫn
đến sự dư thừa dữ liệu
- Dữ liệu trong MongoDB cũng bị giới hạn kích thước bản ghi: mỗi document có
kích thước không quá 16Mb .
d) Nên sử dụng MongoDB khi nào?
Mặc dù có MongoDB mang lại khá nhiều lợi ích và dễ dàng sử dụng trong việc lập trình
nhưng tùy theo từng tình huống, từng hệ thống mà ta nên cân nhắc có sử dụng phần
mềm này hay không. Một số trường hợp được khuyến khích sử dụng MongoDB như:
- Khi xây dựng một hệ thống realtime yêu cầu phản hồi nhanh như mạng xã hội,
trang thương mại điện tử... Vì MongoDB có thể ghi với tốc độ rất nhanh và bảo
mật an toàn
- Các hệ thống Bigdata có yêu cầu truy vấn nhanh
- Khi máy chủ không có hệ quản trị cơ sở dữ liệu thì phần mềm này khá phù hợp
và nên được sử dụng
- Khi muốn tìm kiếm nhanh một thông tin trong một cơ sở dữ liệu lớn.
e) Sự phát triển của MongoDB
Hiện nay, MongoDB được sử dụng khá nhiều trong các ứng dụng như Google,
Facebook, Ebay, Adobe,.. Năm 2020, Phần mềm này được đánh giá là Cơ sở dữ liệu
10
NoSQL phổ biến và được yêu thích nhất. Trong một số diễn đàn về công nghệ, nhiều
người đánh giá rất cao các dịch vụ của MongoDB, phần mềm này có một giao diện nhất
quán giúp đơn giản hóa quá trình làm việc với dữ liệu và phát triển sản phẩm của họ.
Kể từ năm 2013, khi mà sự phát triển của dữ liệu phi cấu trúc ra đời, MongoDB đã phát
triển mạnh mẽ và vượt qua cả IBM DB2, Microsoft Access và SQLite để chiếm vị trí
thứ 5 về mức độ phổ biến và là cơ sở dữ liệu đa mô hình hướng tài liệu ( document-
oriented, multi-model database) duy nhất nằm trong top 25 của bảng xếp hạng này. Biểu
đồ dưới đây đã cho thấy sự gia tăng và phát triển không ngừng của MongoDB trong
suốt giai đoạn đó:
Hình 3 . Sự phát triển của MongoDB giai đoạn 2013-2021. Nguồn : https://db-engines.com/en/ranking_trend
11
- Field: là một cặp gồm key và value trong một document. Mỗi Field là một
định danh duy nhất cho một điểm giá trị.
Collection Field
- JSON: ( JavaScript Object Notation), đây chính là một chuẩn mở rộng cho
phép mô tả dữ liệu dưới dạng văn bản dễ đọc và được lưu trữ ở dạng các cặp
key-value.
- BSON: đây là một định dạng lưu trữ nhị phân của JSON, được sử dụng để lưu
trữ tài liệu và thực hiện các cuộc gọi thủ tục từ xa trong MongoDB
- Index: Index là những cấu trúc dữ liệu đặc biệt, để chứa lượng nhỏ của các tập
dữ liệu để quét một cách dễ dàng. Index hỗ trợ độ phân tích các hiệu quả các
truy vấn, khi không có chỉ mục thì MongoDB sẽ phải quét tất cả các document
của collection để đưa ra document phù hợp với truy vấn. Nhưng khi quét như
thế sẽ không có hiệu quả và yêu cầu MongoDB xử lý khối lượng lớn dữ liệu.
12
Hình 13 So sánh về cấu trúc tổ chức lưu trữ trong SQL và MongoDB
13
2.6 Ngày 08/04/ Cải tiến tổng hợp
2014 Tích hợp tìm kiếm văn bản
Cải tiến công cụ truy vấn
Giao thức thao tác ghi mới
Cải tiến bảo mật
3.0 Ngày 03/03/ Hỗ trợ công cụ lưu trữ WiredTiger
2015 Công cụ lưu trữ có thể cắm được API
Xác thực SCRAM-SHA-1
Cải thiện chức năng giải thích
MongoDB Ops Manager
3.2 Ngày 08/12/ Công cụ lưu trữ WiredTiger theo mặc định
2015 Cải tiến bầu cử nhân rộng
Cấu hình máy chủ dưới dạng tập hợp bản sao
ReadConcern
Xác nhận tài liệu
Chuyển từ V8 sang SpiderMonkey
3,4 Ngày 29/11/ Mối quan tâm đọc tuyến tính Lượt xem Đối chiếu
2016
3.6 Tháng 11/ 2017
4.0 Tháng 6/ 2018 Giao dịch
4.2 Tháng 8/ 2019
4.4 Tháng 7/ 2020
4.4.5 Tháng 4/ 2021
4.4.6 Tháng 5/ 2021
Bảng 2 Lịch sử phát hành MongoDB. Nguồn : MongoDB Documentation
Hiện nay, MongoDB cung cấp 2 phiên bản cài đặt, Community Server và Enterprise
Server. Trong đó Community là phiên bản miễn phí, còn Enterprise là phiên bản thương
mại, thường dành cho các doanh nghiệp và cần phải trả tiền để sử dụng nó. Trong bài
luận này, em sẽ sử dụng phiên bản Community Server version 4.4.6 cho hệ điều hành
Windows để cài đặt và cấu hình.
14
Hình 14 Giao diện trang chủ của MongoDB
Tiếp theo, ta khởi chạy file mongodb-windows-x86_64-4.4.6-signed vừa tải về.
Chọn ‘I accept the terms in the License Agreement’ và chọn Next để bắt đầu cấu hình
phần mềm cho việc cài đặt:
15
Ở bước này, ta có 2 lựa chọn để cài đặt:
- Complete: với lựa chọn này, tất cả các chức năng sẽ được tự động cài đặt và sẽ
chiếm nhiều dung lượng ổ cứng
- Custom: với lựa chọn này ta có thể tùy chọn các chức năng muốn cài và dung
lượng ổ cứng cài đặt sẽ giảm đi .
Đối với người mới sử dụng thì MongoDB đề xuất chọn Complete để cài đặt tất cả các
phần mềm hỗ trợ
Sau khi đã chọn kiểu cài đặt, ta tiếp tục cấu hình service như sau:
16
Sau khi thiết lập nơi lưu trữ, ta tiếp tục chọn Next để phần mềm tự động cài đặt như các
ảnh bên dưới
17
Quá trình cài đặt sẽ diễn ra trong một vài phút.
Sau khi cài đặt xong , chọn Finish để kết thúc quá trình cài đặt và cấu hình
18
V. Các thành phần của MongoDB
19
CHƯƠNG 2: QUẢN TRỊ VẬN HÀNH VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MONGODB
I. Tạo và cấu hình cơ sở dữ liệu
1. Tạo cơ sở dữ liệu
Cú pháp:
>use <tên database>
>
Lệnh use được sử dụng để trỏ đến một database cụ thể mà bạn muốn kết nối tới. Nếu
database được gọi chưa tồn tại thì lệnh use sẽ tự động tạo một database mới trong hệ
thống để trỏ tới.
Để xem các database có trong hệ thống, ta dùng câu lệnh:
>Show database
Hoặc
>Show dbs
Nếu một database chưa có collections nào thì khi gọi lệnh SHOW, database đó sẽ không
được hiển thị.
Ví dụ, đầu tiên ta có các database trong hệ thống như sau:
Sau đó ta tiến hành thêm một database tên mydata và được kết quả như hình dưới:
20
Có thể thấy, lúc này database mydata vừa tạo không được hiển thị do database này
không chứa collection nào. Ta tiến hành thêm hai collection là book và user vào
database mydata và được kết quả như sau:
5. Xóa database
Khi muốn xóa một database, đầu tiên ta phải dùng lệnh use để chọn database cần
xóa, sau đó sử dụng lệnh drop để xóa như sau:
>USE <tên database>
>Db.dropDatabase()
Giả sử ta muốn xóa database mydata vừa tạo ở bước trên, ta thực hiện như sau:
Như vậy, database mydata đã được xóa và trong hệ thống chỉ còn 3 database lúc đầu.
21
kiểu mẫu dữ liệu JSON bằng việc thêm các thông tin cần thiết khác như loại dữ liệu,
thứ tự field cũng như hỗ trợ encoding và decoding với các ngôn ngữ khác nhau. Do đó,
khi backup và restore thường sử dụng file “BSON”.
Để sao lưu dữ liệu, ta sử dụng lệnh mongodump để tạo ra các file backup. Lệnh này sẽ
kết xuất tất cả dữ liệu của Server vào trong dump directory. Mongo có nhiều tùy chọn
sẵn có cho bạn lựa chọn để giới hạn lượng dữ liệu hoặc tạo file backup của Remote
Server.
Cú pháp:
>mongodump
Lệnh này sẽ kết nối với Server đang chạy tại 127.0.0.1 và cổng 27017 và backup toàn
bộ dữ liệu của Server tới thư mục /bin/dump. Kết quả của lệnh này như sau:
Một số tùy chọn sẵn có được sử dụng với lệnh mongodump được thể hiện ở bảng saui:
22
MongoDB còn cho phép người dùng một số tính năng như:
- Đặt lịch backup
- Kết hợp output thư mục theo ngày tháng
- Nén thư mục chứa Cơ sở dữ liệu MongoDB vừa được backup ra
Khi chạy lệnh này, hệ thống sẽ tự động phục hồi tất cả các dữ liệu đã được sao lưu trước
đó từ thư mục sao lưu.
Kết quả của lệnh này như sau:
23
Để tạo một collection mới trong database, ta sẽ sử dụng câu lệnh:
Trong
> đó, options là các tùy chọn kèm theo như kích thước, khả năng index,... được thể
hiện ở bảng sau:
Bảng 5 Các tùy chọn cấu hình cho Collection Nguồn: MongoDB Documentation
Tham số Kiểu dữ Mô tả
liệu
capped boolean Không bắt buộc. Để tạo Collection có giới hạn
nếu giá trị là true (đúng). Nếu xác định là true, bạn
cũng phải thiết lập giá trị lớn nhất của kích thước
trong trường size.
size number Không bắt buộc. Xác định kích cỡ của collection
tính theo byte để giới hạn cho Collection. Khi
Collection đạt đến kích thước lớn nhất thì
MongoDB sẽ xóa những document (tài liệu) cũ để
tạo khoảng trống cho document mới.
max number Không bắt buộc. Xác định số lượng lớn nhất của
document được phép trong giới hạn Collection.
Để giới hạn Collection thì nên sử dụng thuộc tính
này để xác định giới hạn. Nếu một Collection đạt
đến kích thước giới hạn số lượng document tối đa,
MongoDB sẽ xoá các document cũ để đảm bảo
giới hạn tối đa đã được xác định
autoIndexId boolean Không bắt buộc. Xác định là false để vô hiệu hóa
việc tự động đánh index (chỉ mục) cho trường _id.
Bắt đầu từ MongoDB 4.0 trở về sau, bạn không
thể thiết lập được tuỳ chọn autoIndexId là false
khi tạo Collection trong database
usePowerOf2Sizes boolean Không bắt buộc. Chỉ có sẵn trong bộ lưu trữ
MMAPv1
noPadding boolean Không bắt buộc. Chỉ có sẵn trong bộ lưu trữ
MMAPv1
Giá trị mặc định là false
storageEngine document Không bắt buộc. Chỉ có sẵn trong bộ lưu trữ
WiredTiger
validator document Không bắt buộc. Cho phép xác định các quy tắc
hoặc biểu thức xác nhận hợp lệ cho Collection
validationLevel string Không bắt buộc. Xác định cách MongoDB áp
dụng quy tắc hợp lệ cho các document đã tồn tại
trong lúc cập nhật
validationAction string Không bắt buộc. Xác định xem sẽ thông báo lỗi
hay đưa ra cảnh báo khi các document không hợp
lệ được thêm vào
24
indexOptionDefaults document Không bắt buộc. Cho phép người dùng xác định
cấu hình mặc định cho index (chỉ mục) trong lúc
tạo Collection
viewOn string Không bắt buộc. Tên của Collection hoặc khung
nhìn (view) nguồn trong lúc tạo khung nhìn. Tên
không phải là namespace (không gian tên) đầy đủ
của Collection hay khung nhìn, tức là không bao
gồm tên CSDL như trong cùng một CSDL trong
lúc khung nhìn được tạo
pipeline array Không bắt buộc. Là một mảng tập hợp các đoạn
đường ống. Câu lệnh db.createView() tạo khung
nhìn bằng cách áp dụng các đoạn đã được chỉ định
cho Collection hoặc khung nhìn trong thuộc tính
viewOn
collation document Không bắt buộc. Xác định đối chiếu mặc định cho
Collection
writeConcer document Không bắt buộc. Một document diễn tả mối liên
hệ bằng văn bản cho các thao tác. Thường bỏ qua
thuộc tính này, sử dụng chế độ ghi mặc định
Tương tự như xem các databases trong hệ thống ,để xem các collections có trong
database, ta sử dụng câu lệnh:
>Show collections
Ví> dụ, trong database shopping đã tạo ở trên , ta tạo một collection tên “car” như sau:
Ta cũng có thể tạo collection theo một cách khác. Đó chính là insert một tài liệu
(document) và collection vào database. Khi đó, collection được insert dữ liệu vào chưa
tồn tại, hệ thống sẽ tự động tạo collection mới để insert vào.
25
Ví dụ ta thêm một document với các dữ liệu như sau vào collection sneaker trong khi
chưa có collection này trong hệ thống:
Để xóa collection không cần dùng tới nữa , ta sử dụng lệnh drop(). Cú pháp:
>db.<tên collection>.drop()
>
26
Hình 16 Các kiểu dữ liệu trong MongoDB
27
điều kiện để xóa những document thỏa
điều kiện.
>db.<tên Delete một document thỏa điều kiện
collection>.deleteOne() truyền vào của một collection.
4. Một số toán tử so sánh
Bảng 7. Các toán tử so sánh trong MongoDB. Nguồn:viblo.asia
Name Description
$eq So sánh bằng với value được chỉ định.
$gt So sánh lớn hơn value được chỉ định.
$gte So sánh lớn hơn or bằng value được chỉ định.
$in So khớp bất kỳ value trong một mảng.
$lt So sánh nhỏ hơn value được chỉ định.
$lte So sánh nhỏ hơn value được chỉ định.
$ne So khớp tất cả giá trị ko bằng với value được chỉ định.
$nin So khớp tất cả giá trị ko bằng với value được chỉ định trong một mảng.
db.createView(
"<viewName>",
"<source>",
[<pipeline>],
{
"collation" : { <collation> }
}
)
28
4. Các hạn chế trên khung nhìn
- Chỉ cho phép đọc: khung nhìn chỉ cho phép đọc, các thao tác chỉnh sửa trên
khung nhìn đều sẽ gặp lỗi.
- Không thể thay đổi tên của khung nhìn
- Chỉ có thể chỉ định một Collation (đối chiếu) tại thời điểm khởi tạo. Nếu không
được chỉ định, hệ thống sẽ tự động chỉ định Collation là đối chiếu nhị phân đơn
giản. Nghĩa là khung nhìn không được kế thừa Collation mặc định của
Collection.
- Khi sử dụng phương thức find(), khung nhìn không hỗ trợ các phép toán và phép
chiếu như: $, $elemMatch, $slice, $meta.
5. Các thao tác được hỗ trợ trên khung nhìn:
Bên cạnh các hạn chế nêu trên, MongoDB hỗ trợ các thao tác sau trong khung nhìn,
được thể hiện ở bảng sau [1]:
Bảng 8 Các thao tác trên view
29
Phương thức ensureIndex() cho phép truyền nhiều trường khác nhau, các trường phân
biệt nhau bởi dấu “,”. Phương thức này cũng cung cấp danh sách các tùy chọn được
liệt kê trong bảng dưới đây
Bảng 9 Danh sách các tùy chọn để tạo chỉ mục2
Tham số Kiểu Miêu tả
background Boolean Xây dựng chỉ mục trong
Background để mà nó
không gây trở ngại các
hoạt động cơ sở dữ liệu
khác. Xác định true để xây
dựng trong Background.
Giá trị mặc định là false
unique Boolean Tạo một unique index để
mà Collection đó sẽ không
chấp nhận việc chèn các
Document có key kết nối
với một giá trị đang tồn tại
trong chỉ mục. Xác định là
true để tạo unique index.
Giá trị mặc định là false
name Chuỗi Tên của chỉ mục. Nếu
không được xác định,
MongoDB tạo một tên chỉ
mục bằng cách nối chuỗi
các tên của các trường đã
được lập chỉ mục và sắp
xếp thứ tự
dropDups Boolean Tạo một dropDups index
trên một trường mà có thể
có các bản sao. MongoDB
chỉ lập chỉ mục cho lần
xuất hiện đầu tiên của key
và xóa tất cả Document từ
Collection mà chứa lần
xuất hiện tiếp theo của key
đó. Xác định true để tạo
dropDups index. Giá trị
mặc định là false
sparse Boolean Nếu true, chỉ mục chỉ tham
chiếu tới các Document
với trường đã xác định.
Các chỉ mục này sử dụng ít
không gian hơn, nhưng
30
vận hành theo cách khác
nhau trong một số tình
huống (cụ thể với sắp xếp).
Giá trị mặc định là false
expireAfterSeconds Số nguyên Xác định một giá trị (bằng
giây), dưới dạng một TTL
để điều khiển thời gian bao
lâu MongoDB duy trì các
Document trong
Collection này
v Phiên bản index Số phiên bản của chỉ mục.
Phiên bản mặc định phụ
thuộc vào phiên bản của
MongoDB đang chạy khi
tạo chỉ mục
weights document Là một số trong dãy từ 1
tới 99999 và biểu thị ý
nghĩa của trường quan hệ
tới các trường được lập chỉ
mục khác về mặt score
default_language Chuỗi Với một text index, đây là
ngôn ngữ xác định các quy
tắc của chỉ mục. Giá trị
mặc định là english
language_override Chuỗi Với một text index, xác
định tên của trường được
chứa trong Document,
ngôn ngữ để nạp chồng
ngôn ngữ mặc định. Giá trị
mặc định là language
MongoDB cung cấp một collection đặc biệt trong mọi cơ sở dữ liệu tên là system.js –
đây là nơi chứa các hàm Javascript tùy chỉnh của người dùng. Để thêm hàm mới vào
collection này ta thực hiện như sau:
31
Cú pháp :
>db.system.js.save()
Áp dụng:
Ở đây, ta chuyển tên hàm vào field _id và chuyển thân hàm vào field value để dễ dàng
gọi hàm sau này.
Lúc này, hàm đã được lưu trữ trong collection system.js . Giả sử ta có một collection
chứa các document như sau:
Bây giờ, ta sẽ dùng hàm sum vừa tạo ở bước trên để kiểm tra xem các document thỏa
mãn x+y = 8. Ta sẽ dùng bộ $where để kiểm tra điều kiện này như sau:
32
Ta cũng có thể xem lại danh sách các hàm đã được lưu trữ. Vì các hàm này đều được
lưu trữ trong một system.js như một collection bình thường nên ta sử dụng phương thức
find() để tìm tất cả các hàm được lưu trữ:
V. Ràng buộc
Do MongoDB là một cơ sở dữ liệu NoSQL nên trong hệ quản trị này không có các
ràng buộc như khóa ngoại trong các cơ sở dữ liệu SQL. Tuy nhiên trong MongoDB
cung cấp giá trị “_id” được tự động tạo cho mỗi document. Giá trị này là duy nhất
và được xem như là primary key.
Tuy nhiên, nếu ta muốn tạo ra các ràng buộc trên nhiều Field, ta có thể thực hiện
điều này bằng cách tạo ra một collection có chức năng hoạt động như một Collection
proxy. Collection này sẽ gồm các dữ liệu tham chiếu đến document gốc hay
ObjectId của document này và unique key do ta tạo ra.
Ví dụ ta có một collection “user” như sau:
Trong collection này ta có thể thấy, bên cạnh _id ObjectId thì địa chỉ email cũng là
một thuộc tính duy nhất. Như thế ta có thể dùng giá trị này để làm khóa duy nhất.
Khi đó, Collection proxy sẽ có những dữ liệu sau
33
Trong MongoDB, ta sẽ dùng chỉ mục duy nhất (Unique Index) để hiện thực hóa điều
này:
Một số lưu ý khi sử dụng unique key:
- Ứng dụng sử dụng cơ sở dữ liệu này phải có bắt lỗi khi chèn document và
collection proxy và phải có tính nhất quán giữa các collection liên quan.
- Nếu collection proxy yêu cầu phân đoạn thì ta phải thực hiện phân đoạn trên
34
Các role thuộc nhóm này được thiết lập riêng cho một database được chỉ định và chỉ
cho phép người dùng thao tác trên dữ liệu chứ không cho phép tác động đến các user
khác trong hệ thống. Các role này thường được phân quyền cho các client. Nhóm này
bao gồm hai quyền như sau:
Bảng 10 Nhóm Database User Roles
35
dropCollection and
createCollection chỉ trên
system.profile
userAdmin Quyền này cho phép các changeCustomData
thao tác tạo và thay đổi changePassword
quyền cho một user khác createRole
trong một database được createUser
chỉ định. Theo mặc định, dropRole
nó cũng bao gồm thêm cả dropUser
các quyền readWrite của grantRole
nhóm Database user role. revokeRole
viewRole
viewUser
dbOwner Quyền này là sự kết hợp
của cả 3 quyền kể trên:
dbAdmin, userAdmin và
readWrite.
Roles Mô tả
readAnyDatabase Quyền này chỉ cho phép user đọc dữ liệu giống như
quyền read, tuy nhiên, thay vì chỉ được đọc trong một
database thì user có thể đọc cả các database khác
trong hệ thống.
readWriteAnyDatabase Quyền này bao gồm các quyền của readAnyDatabase
cùng với quyền chỉnh sửa các dữ liệu trong các
database mà user có thể đọc. Tương tự như quyền
readWrite .
userAdminAnyDatabase Đây là quyền mở rộng hơn của quyền userAdmin ở
nhóm trên. Với quyền này, user có thể quản trị các
user của toàn bộ các database trong hệ thống
dbAdminAnyDatabase Giống như role dbAdmin, với quyền này user có thể
quản trị dữ liệu của toàn bộ các database trong hệ
thống
d) Nhóm Supperuser Roles
Nhóm role này chỉ có duy nhất một role đó là Root. Đây là quyền cao nhất trong hệ
quản trị cơ sở dữ liệu MongoDB. Với quyền này người dùng có thể thực hiện mọi thao
tác trên hệ thống như cung cấp quyền truy cập ,quản trị cơ sở dữ liệu ,truy cập đến mọi
36
nguồn lực trong cơ sở dữ liệu... Do đó quyền này chỉ được phân cho người quản trị có
quyền cao nhất trong hệ thống.
Ngoài các nhóm role phân quyền theo cấp database và cấp hệ thống như trên, MongoDB
còn có các nhóm role như: Backup and Restoration Roles, Cluster Administration
Roles,...
2. Tạo quyền và vai trò tùy chỉnh (Role)
Bên cạnh các role được tích hợp sẵn trong hệ thống, MongoDB cũng cho phép người
dùng tự tạo ra các role tùy chỉnh và thiết lập các đặc quyền riêng phù hợp với mong
muốn của họ. Một yêu cầu được đặt ra khi ta tạo một role mới đó là ta phải tạo role
trong một database cụ thể. Vì trong MongoDB, hệ quản trị này sử dụng sự kết hợp giữa
tên database và role để đảm bảo rằng mỗi role là duy nhất. Ngoại trừ các role được tạo
trong database admin thì một role chỉ có thể bao gồm các đặc quyền áp dụng cho
database của nó và chỉ có thể kế thừa từ các role khác trong database của nó. Nếu một
role được tạo trong database admin, thì nó có thể bao gồm các đặc quyền áp dụng cho
database này, bao gồm các quyền admin, quản lý cluster và có thể kế thừa từ các role
khác trong tất cả các database trong hệ thống.
Để dễ dàng quản lý các role tùy chỉnh này, MongoDB lưu trữ thông tin của chúng trong
một collection đặc biệt tên là system.roles thuộc database admin. Collection này không
cho phép truy cập trực tiếp vài mà phải sử dụng các lệnh quản lý role để xem và chỉnh
sửa.
Khi muốn tạo một role mới, ta sử dụng phương thức db.createRole(). Giả sử, ở đây ta
muốn tạo một role mới có tên là saler được mô tả như sau:
- saler cho phép đọc và chỉnh sửa dữ liệu trong database “mydata”
- saler cho phép đọc collection “Foods” trong database “shopping”
Ta thực hiện tạo role mới như sau:
Đầu tiên ta sẽ khai báo một biến mới tên role để lưu trữ tên (role) và các thao tác
(privileges), quyền (roles) của saler. Sau đó sử dụng cú pháp sau để tạo role:
37
>db.createRole(role);
Mặc định trong mongoDB, chúng ta có thể sử dụng MongoDB Server mà không
cần phải đăng nhập vào hệ thống. Tuy nhiên , trong một số trường hợp thì việc
sử dụng user để thao tác trên MongoDB Server sẽ cho kết quả tốt hơn và đảm
bảo tính bảo mật của cơ sở dữ liệu. Ở MongoDB thì tài khoản đăng nhập cũng
chính là user trong hệ thống, do đó ta sẽ gom chung việc khởi tạo tài khoản và
khởi tạo user làm một.
Trong MongoDB, ta tạo user mới bằng phương thức createUser(). Cú pháp:
Để tạo một user cấp hệ thống, ta thực hiện tạo một user trên database admin, user
này sẽ có thể truy cập và chỉnh sửa các database khác nếu quyền của user này
cho phép.
Ví dụ, đầu tiên ta sẽ tạo một user cấp hệ thống với username = “ad”, password
=”1234”. User này sẽ được gán quyền là root, tức quyền cao nhất trong hệ thống:
38
Trong MongoDB, để đăng nhập bằng user và password, ta sẽ có 2 cách để đăng
nhập:
- Cách 1: chỉ rõ username và password
Ta sử dụng cú pháp :
Ví dụ, ta sẽ đăng nhập bằng tài khoản user vừa tạo ở trên:
Như vậy ta đã đăng nhập thành công vào hệ thống. Sau khi đăng nhập vào hệ thống
bằng user có quyền root, ta có thể tạo ra các user khác ở cả cấp hệ thống và cấp cơ sở
dữ liệu. Giả sử ở đây, ta sẽ tạo một user có username là “person1” có password là “123”
với quyền đọc /ghi trên database shopping. Ta thực hiện như sau:
39
III. Quyền truy xuất dữ liệu
Như đã nói ở 2 phần trên, quyền truy xuất dữ liệu trong MongoDB cũng được chia
làm 2 loại là :
- Quyền truy xuất cấp hệ thống: bao gồm các quyền thuộc nhóm All Database
Roles và nhóm Supperuser Roles. Các quyền này cho phép user truy cập đến
nhiều database có trong hệ thống với các thao tác được quy định.
- Quyền truy xuất cấp cơ sở dữ liệu: Quyền này bao gồm nhóm quyền nhóm
Database User Role và nhóm Database Administration Roles. Các quyền này sẽ
cho phép user được gán quyền chỉ có thể thao tác truy xuất đến một database cụ
thể được chỉ định.
Ví dụ, với 2 user vừa tạo ở phần trên, ta có user ad được gán quyền câp hệ thống
và user person1 được gán quyền cấp cơ sở dữ liệu. Với user ad, do được gán
quyền root là quyền cao nhất trong cơ sở dữ liệu, user này có thể tạo tài khoản user
mới như ở trên. Bên cạnh đó user này còn có quyền truy xuất đến các database
khác ngoài database admin:
- Insert dữ liệu vào database number như sau:
40
Tiếp theo, với user person1 vừa tạo, ta sẽ sử dụng tài khoản này để đăng nhập vào hệ
thống và thực hiện một số thao tác truy xuất dữ liệu:
- Xem các dữ liệu có trong collection Books của database shopping:
Ở đây, khi truy xuất đến database mydata, hệ thống sẽ báo lỗi vì user person1 chỉ có
quyền đọc/ghi trên database shopping chứ không được cấp quyền vào database
mydata.
41
TỔNG KẾT
MongoDB là một cơ sở dữ liệu không quan hệ hướng tài liệu mã nguồn mở. Với cấu
trúc linh hoạt , Hệ quản trị cơ sở dữ liệu này đem lại sự thuận tiện trong việc truy xuất
các dữ liệu với tốc độ rất nhanh. Được thiết kế với giao diện thân thiện, dễ sử dụng,
cấu trúc các câu lệnh rõ ràng , dễ hiểu gần với ngôn ngữ đời thường. Tuy chỉ mới
xuất hiện không lâu nhưng MongoDB thực sử đã trở thành một hệ quản trị cơ sở dữ
liệu NoSQL phổ biến nhất và được nhiều người ưa thích. Trong thời đại công nghệ số
hiện nay, mỗi ngày con người phải xử lý một khối lượng thông tin khổng lồ.
MongoDB đã phát huy rất tốt các tính năng của mình và là một trợ thủ đắc lực cho
các doanh nghiệp trong việc xử lý thông tin. Tuy còn một số hạn chế nhưng trong
tương lai, tiềm năng của hệ cơ sở dữ liệu này sẽ rất lớn, nhất là khi các mạng xã hội và
thương mại điện tử ngày càng phát triển.
1
TÀI LIỆU THAM KHẢO
[1] MongoDBInc., "MongoDB Documentation," [Online]. Available:
https://docs.mongodb.com/.
[3] ZendVN, “ZendVN học lập trình Online,” [Trực tuyến]. Available:
https://www.zendvn.com/.
[4] T. Q. K. Trần Trung Hiếu, “Đồ án tốt nghiệp, đề tài: Tìm hiểu về MongoDB,”
Trường đại học Công Nghiệp Thực Phẩm thành phố HCM, Thành phố Hồ Chí
Minh, 2015.