You are on page 1of 52

NGÂN HÀNG NHÀ NƯỚC VIỆT NAM BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP.HỒ CHÍ MINH


KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
--------------

TIỂU LUẬN KẾT THÚC HỌC PHẦN

Đề tài:

TÌM HIỂU VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ


LIỆU MONGODB

Môn: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Họ và tên:
MSSV:
LỚP: ITS322_202_D02
Giảng viên hướng dẫn: ThS Trịnh Hoàng Nam

Thành phố Hồ Chí Minh, ngày 12 tháng 07 năm 2021


NHẬN XÉT CỦA GIẢNG VIÊN
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
LỜI MỞ ĐẦU
Từ nửa cuối của thế kỷ 20 cho đến nay, thuật ngữ “bùng nổ thông tin” trở nên rất
quen thuộc và dường như trở thành tên của một thời kỳ. Với sự phát triển của khoa
học công nghệ, đặc biệt là các trang mạng xã hội, mỗi giây con người đón nhận hàng
triệu thông tin khác nhau đến nỗi mà người ta phải đề cập đến hiện tượng “bội thực
thông tin”. Với khối lượng dữ liệu ngày một lớn như thế, các hệ thống quản trị cơ sở
dữ liệu quan hệ như trước đây sẽ mất rất nhiều thời gian chỉ để hiển thị một trang web
hay chỉ trả lời một yêu cầu API. Nhất là khi các ứng dụng xử lý thông tin ngày một
phức tạp. Lúc này, cơ sở dữ liệu SQL đã gây ra rất nhiều hạn chế, cụ thể là các lược
đồ /schema thiếu linh hoạt khiến chúng trở nên không còn phù hợp.
Để đáp ứng với nhu cầu xử lý một lượng lớn thông tin, những công nghệ mới dần xuất
hiện như công nghệ lưu trữ đám mây, sử dụng các phương pháp đẩy nhanh tốc độ , rút
ngắn chu trình,... Và cùng với đó, cơ sở dữ liệu NoSQL ra đời với sự linh hoạt trong
truy vấn, lưu trữ , thao tác một lượng lớn thông tin, tốc độ vận hành ở công suất cao,
trở thanh một lựa chọn tuyệt vời cho các nhà phát triển phần mềm.
Ngày nay, NoSQL đã được ứng dụng ngày càng phổ biến. Để có thể hỗ trợ người
dùng dễ dàng sử dụng loại cơ sở dữ liệu này, hàng loạt hệ quản trị cơ sở dữ liệu đã ra
đời và nổi bật nhất trong số đó chính là hệ quản trị cơ sở dữ liệu MongoDB. Theo các
khảo sát cho thấy hiện nay có khoảng 33000 công ty sử dụng MongoDB trên toàn thế
giới, được sử dụng nhiều nhất ở các nước phát triển về công nghệ như Mỹ(48%), Anh
(7%) và Ấn Độ (7%). Với những tính năng nổi bật của mình, MongoDB rất có tiềm
năng để phát triển mạnh mẽ trong tương lai, khi mà dữ liệu được sinh ra ngày càng
nhiều. Do đó, trong bài tiểu luận này, em sẽ tìm hiểu về hệ quản trị cơ sở dữ liệu
MongoDB với 4 phần chính như sau:
- Chương 1: Tổng quan về hệ quản trị cơ sở dữ liệu MongoDB
- Chương 2: Quản trị vận hành với hệ quản trị cơ sở dữ liệu MongoDB
- Chương 3: Quản trị thành phần với hệ quản trị cơ sở dữ liệu MongoDB
- Chương 4: Quản trị người dùng với hệ quản trị cơ sở dữ liệu MongoDB
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB ...... 1
I. Một số khái niệm cơ bản ...................................................................................... 1
1. Cơ sở dữ liệu (Database) ................................................................................... 1
2. Hệ quản trị cơ sở dữ liệu (Database Management System) .............................. 1
3. Cơ sở dữ liệu quan hệ (Database Relationship) ................................................ 2
II. Giới thiệu .............................................................................................................. 2
1. Tìm hiểu về NoSQL .......................................................................................... 2
2. Tìm hiểu về công ty MongoDB Inc. ................................................................. 7
3. Tìm hiểu về hệ quản trị cơ sở dữ liệu MongoDB. ............................................ 8
4. Một số khái niệm trong MongoDB ................................................................. 11
III. Lựa chọn phiên bản cài đặt ............................................................................. 13
IV. Cài đặt và cấu hình .......................................................................................... 14
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.................................................................................................................. 20
I. Tạo và cấu hình cơ sở dữ liệu............................................................................. 20
1. Tạo cơ sở dữ liệu ............................................................................................. 20
5. Xóa database ................................................................................................... 21
II. Sao lưu dữ liệu.................................................................................................... 21
III. Phục hồi dữ liệu .............................................................................................. 23
CHƯƠNG 3: QUẢN TRỊ THÀNH PHẦN VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MONGODB.................................................................................................................. 23
I. Bộ sưu tập (Collection) ...................................................................................... 23
2. Tạo Collection ................................................................................................. 23
2. Một số kiểu dữ liệu trong MongoDB .............................................................. 26
3. Các thao tác CRUD ......................................................................................... 27
4. Một số toán tử so sánh .................................................................................... 28
II. Khung nhìn ......................................................................................................... 28
1. Tạo khung nhìn ............................................................................................... 28
4. Các hạn chế trên khung nhìn ........................................................................... 29
5. Các thao tác được hỗ trợ trên khung nhìn: ...................................................... 29
III. Chỉ mục ........................................................................................................... 29
IV. Hàm và thủ tục (Stored Procedure -SP) .......................................................... 31
V. Ràng buộc ........................................................................................................... 33
VI. Bẫy lỗi (Trigger) ............................................................................................. 34
CHƯƠNG 4: QUẢN TRỊ NGƯỜI DÙNG VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MONGODB.................................................................................................................. 34
I. Quyền và vai trò (role) trong MongoDB ............................................................ 34
1. Các quyền và vai trò tích hợp có sẵn trong hệ thống ...................................... 34
2. Tạo quyền và vai trò tùy chỉnh (Role) ............................................................ 37
II. Quyền đăng nhập hệ thống ................................................................................. 38
III. Quyền truy xuất dữ liệu .................................................................................. 40
DANH MỤC HÌNH ẢNH

Hình 1 Cơ sở dữ liệu SQL và NoSQL ............................................................................ 1


Hình 2 Cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu .......................................................... 1
Hình 3 Cơ sở dữ liệu quan hệ ......................................................................................... 2
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
Hình 5 Mô hình lưu trữ của CSDL NoSQL nhóm Key-Value. Nguồn: dotnet.edu.vn .. 5
Hình 6 Một record được lưu trữ trong cơ sở dữ liệu "Collumn Family". ...................... 6
Hình 7 Document Database ở định dạng JSON và XML. Nguồn: dotnet.edu.vn .......... 6
Hình 8 Mô hình Cơ sở dữ liệu đồ thị. Nguồn: dotnet.edu.vn ......................................... 7
Hình 9 Trụ sở chính của MongoDB Inc. . Nguồn: usacontactdetails.com ..................... 7
Hình 10 Logo của hệ quản trị CSDL MongoDB ............................................................ 8
Hình 11 Minh họa một số thuật ngữ trong MongoDB ................................................. 12
Hình 12 Ví dụ về cấu trúc Document trong MongoDB. .............................................. 12
Hình 13 So sánh về cấu trúc tổ chức lưu trữ trong SQL và MongoDB ....................... 13
Hình 14 Giao diện trang chủ của MongoDB ................................................................ 15
Hình 15 kiến trúc của MongoDB [2] ............................................................................ 19
Hình 16 Các kiểu dữ liệu trong MongoDB .................................................................. 27
DANH MỤC BẢNG BIỂU

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.

Hình 1 Cơ sở dữ liệu SQL và NoSQL

2. Hệ quản trị cơ sở dữ liệu (Database Management System)


Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS) là phần mềm tương
tác với người dùng cuối, các ứng dụng và chính CSDL để thu thập và phân tích các
CSDL này. Hệ quản trị CSDL và CSDL luôn có mối quan hệ chặt chẽ với nhau.

Hình 2 Cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu

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 .

II. Giới thiệu


1. Tìm hiểu về NoSQL
a) Khái niệm NoSQL
Cơ sở dữ liệu NoSQL (viết tắt của “Not SQL” hoặc “Not Only SQL”) là một cơ sở dữ
liệu không quan hệ (Non-Relational). NoSQL là tên gọi chung cho các cơ sở dữ liệu
không sử dụng các bảng như MySQL hay SQL Server. Nó không sử dụng mô hình cơ
sở dữ liệu quan hệ (RDBMSs) để lưu trữ và truy cập dữ liệu mà sử dụng mô hình lưu
trữ key- value . Thay vì lưu trữ dữ liệu trong các bảng như một cơ sở dữ liệu truyền
thống, một CSDL NoSQL lưu trữ từng hạng mục riêng với một khóa duy nhất.Ngoài ra
, NoSQL còn là một hệ thống sử dụng dữ liệu phân tán. Tức là dữ liệu của hệ thống này
không chỉ bao gồm những gì mà chúng ta nhập vào mà còn có thể là dữ liệu từ các file
hoặc video,... và chúng được lưu trữ ở nhiều server khác nhau. Điều này cung cấp một
cách tiếp cận nhiều linh hoạt hơn để lưu trữ dữ liệu hơn là một cơ sở dữ liệu quan hệ .
Với việc lưu trữ dữ liệu phân tán, NoSQL hỗ trợ rất tốt trong việc xử lý một khối lượng
lớn dữ liệu lên đến hàng petabytes mà không cần phải có tài nguyên phần cứng cao. Nó
chia dữ liệu của mình ra để lưu trữ trên nhiều Server khác nhau tạo điều kiện cho việc
mở rộng theo chiều ngang một cách thuận lợi với chi phí không quá cao. Bên cạnh đó,
việc lưu trữ trên nhiều Server cũng làm cho NoSQL có độ chịu tải và độ chịu lỗi cao.
Nhiều hệ thống cơ sở dữ liệu NoSQL cũng sử dụng mã nguồn mở.
b) Lịch sử phát triển của NoSQL
Thuật ngữ NoSQL được giới thiệu lần đầu tiên bởi Carlo Stozzi vào năm 1998, lúc này
nó còn được gọi là Lightweight open source relational database . Tuy nhiên, các khái
niệm về cơ sở dữ liệu này vẫn chưa được hoàn thiện và vẫn còn mang hướng cơ sở dữ
liệu quan hệ. Đến đầu năm 2009, trong sự kiện thảo luận về “ các cơ sở dữ liệu phân
tán , không quan hệ nguồn mở”, Johan Oskarsson của Last.fm đã giới thiệu lại thuật
ngữ NoSQL. Đây là một cột mốc đánh dấu sự phát triển của hệ cơ sở dữ liệu mới -
NoSQL. Từ đó, NoSQL trở nên phát triển và phổ biến và đặc biệt thông dụng với các
mạng xã hội như: Facebook, Twitter,...

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

- Cơ sở dữ liệu “Column Family”: Cơ sở dữ liệu này được tạo ra để lưu và xử lý


lượng lớn dữ liệu trên nhiều server. Nó lưu trữ dữ liệu trong nhiều cột, nhiều
dòng và mỗi dòng sẽ có key riêng. Column Family bao gồm một nhóm các dữ
liệu có liên quan và được truy cập cùng nhau. Một số cơ sở dữ liệu dạng này phổ
biến hiện này là: Cassandra, Amazon DynamoDB,...

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

2. Tìm hiểu về công ty MongoDB Inc.


MongoDB Inc. là một trong những công ty
công nghệ hàng đầu của Mỹ chuyên phát
triển và cung cấp sự hỗ trợ cho các doanh
nghiệp trong việc quản trị nguồn tài nguyên
quý giá nhất – đó chính là thông tin. Công
ty được thành lập vào Ngày 1 tháng 11 năm
2007 bởi Dwight Merriman, Eliot Horowitz
và Kevin Ryan với tên gọi đầu tiên là
Hình 9 Trụ sở chính của MongoDB Inc. . Nguồn: 10Gen, đặt trụ sở chính tại thành phố New
usacontactdetails.com York, Mỹ.
Dwight Merriman, Eliot Horowitz và Kevin Ryan đều là cựu thành viên của
DoubleClick – hiện thuộc quyền sở hữu của Google. Khi còn làm việc tại DoubleClick,
họ đã nhận thấy những vấn đề lớn khi sử dụng những hệ cơ sở dữ liệu hiện có như
Oracle để xử lý một lượng lớn dữ liệu. Ở những hệ thống cũ, khi chúng ta muốn mở
rộng quy mô thì sẽ gắn liền với việc phải mua thêm những máy chủ mới và đây là một
thách thức lớn đối với các doanh nghiệp vì chi phí phải bỏ ra rất lớn. Với những trăn
trở về vấn đề phát triển và khả năng mở rộng khi xây dựng các ứng dụng trong thiết kế
web để hỗ trợ xử lý một lượng lớn dữ liệu, Dwight Merriman, Eliot Horowitz và Kevin
Ryan đã lấy cảm hứng và quyết định thành lập 10Gen.
10Gen lúc đầu được thành lập với mục đích tạo ra một nền tảng đám mây hoàn toàn
dựa trên các thành phần mã nguồn mở. Tuy nhiên, họ đã không thể tìm thấy nền tảng
cơ sở dữ liệu nào hiện có có thể đáp ứng đc mong muốn của mình. Do đó công ty này
đã bắt đầu phát triển một hệ thống cơ sở dữ liệu mới dựa trên DOB (Document-Oriented
Database) và đặt tên cho cho hệ thống này là MongoDB. Trong quá trình đó, họ cũng
đã nhận ra tiềm năng rất lớn của MongoDB, 10Gen đã từ bỏ hoàn toàn mục đích ban

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

Hình 10 Logo của hệ quản trị CSDL 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.

b) Các tính năng của MongoDB


Bảng 1 Các tính năng của MongoDB. Nguồn: MongoDB Documentation
Truy vấn Đây là một trong các chức năng tối ưu của phần mềm này . Nó có tác
Ad Hoc: dụng giúp các trường truy vấn phạm vi, kết hợp cùng việc tìm kiếm
biểu thức nhằm trả về kết quả tài liệu cụ thể với kích thước nhất định.
Ngoài ra, các trường trong MongoDB sẽ được sử dụng để lập các chỉ
mục chính và các chỉ mục phụ.
Khả năng MongoDB cung cấp chức năng Replica set. Nó cho phép tạo ra nhiều
Nhân rộng: bản sao của dữ liệu. Trong đó mỗi bản sao có thể giữ vai trò chủ đạo
và phụ.Trong lúc nhân rộng, tất cả các dữ liệu ghi và đọc thực hiện
trên bản sao chủ đạo.Bản sao phụ sử dụng bản sao tích hợp để kéo dài
bản sao dữ liệu của bản chính.Trong trường hợp có một bản sao chủ
đạo thất bại, Replica set chọn ra một bản sao thứ cấp để làm bản sao
chủ đạo tiếp theo. Replica thứ cấp có khả năng tùy chọn các hoạt động
nhưng dữ liệu cuối cùng phải nhất quán và tuân theo mặc định.
Cân bằng Bằng việc dùng Sharding, MongoDB chia phần trăm theo chiều ngang,
tải: xác định các dữ liệu được phân phối trong collection để người dùng
chọn một Shard key. nhìn chung, dữ liệu được chia thành các phạm vi
và được phân phối đồng đều dựa trên các Shard key. Nó chạy trên
nhiều máy chủ, cân bằng tải hoặc sao chép dữ liệu để giữ hệ thống
luôn hoạt động liên tục trong tình huống phát sinh lỗi về phần cứng.
Lưu giữ Với MongoDB, tính năng lưu trữ file được sử dụng như một hệ thống
file: tệp (GridFS) giúp cân bằng tải và đồng thời sao chép dữ liệu trên nhiều
máy tính để lưu giữ file. Trong số đó, GridFS chia một file ra thành
các phần hoặc các đoạn và lưu giữ thành những tài liệu riêng biệt.
Người dùng có thể truy cập GridFS bằng tiện ích Mongofiles hoặc
plugin cho Nginx và Lighttpd.
Tập hợp : MongoDB cung cấp ba cách để thực hiện tập hợp bao gồm
Aggregation Pipeline, Mapreduce và Single-purpose Aggregation.
Trong đó, theo tài liệu của MongoDB , Aggregation Pipeline được
đánh giá là có hiệu suất tốt nhất.
Giới hạn Các collection được MongoDB hỗ trợ thường có kích thước cố định.
kích thước Vì thế, người ta gọi chúng là collection giới hạn. Với kích cỡ cố định,
collection : kết hợp cùng việc theo sau thứ tự chèn giúp tăng hiệu suất của các hoạt
động liên quan đến dữ liệu. Và khi dữ liệu vượt giới hạn thì những tài
liệu cũ hơn sẽ tự động bị xóa mà bạn không cần thực hiện thao tác
thêm bất kỳ dòng lệnh nào.
Giao dịch: Bắt đầu từ phiên bản 4.0 ra mắt vào tháng 6 năm 2018, MongoDB
được bổ sung thêm tính năng hỗ trợ giao dịch ACID đa tài liệu.
c) Ưu và nhược điểm của MongoDB

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

4. Một số khái niệm trong MongoDB


- ID : Đây là Field bắt buộc ( tương đương với Primary Key) phải có trong mỗi
Document. Trường này là khóa chính trong một document - đại diện cho giá
trị duy nhất trong mỗi document của MongoDB. Khi bạn thêm mới một
document thì MongoDB tự động tạo ra một ID đại diện cho document đó.
- Collection: Đây là một kho lưu trữ các document có tổ chức trong MongoDB,
thường có các Field chung giữa các Document. Có thể có nhiều Collection trên
mỗi cơ sở dữ liệu và có nhiều Document trong một Collection.
- Cursor: Con trỏ chỉ đến tập kết quả của một yêu cầu truy vấn.
- Database: Đây chính là chỗ chứa các Collection, chúng chứa các bảng giống
như các cơ sở dữ liệu RDBMS. Trên bộ nhớ vật lý một Database sẽ có một tập
tin riêng được lưu trữ. Mỗi máy chủ MongoDB có thể chứa được nhiều
Database.
- Document: Một bản ghi được gọi là một document khi bản ghi đó thuộc một
collection. Document gồm có không hoặc nhiều trường.

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

Hình 11 Minh họa một số thuật ngữ trong MongoDB

- 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.

Hình 12 Ví dụ về cấu trúc Document trong MongoDB.

12
Hình 13 So sánh về cấu trúc tổ chức lưu trữ trong SQL và MongoDB

III. Lựa chọn phiên bản cài đặt


Từ khi được công bố đến hiện tại, MongoDB Inc. đã cho phát hành tổng cộng 18
versions của MongoDB. Bảng dưới đây sẽ liệt kê danh sách các versions đã được phát
hành ( tính đến ngày 01/07/2021) :
Lịch sử phát hành MongoDB1
Phiên Ngày phát hành Ghi chú tính năng
bản
1.0 Tháng 2/2009
1.2 Tháng 12/2009 Nhiều chỉ mục hơn cho mỗi bộ sưu tập
Tạo chỉ mục nhanh hơn
Sắp xếp/ rút gọn
Các hàm JavaScript được lưu trữ
Thời gian fsync có thể định cấu hình
Một số tính năng nhỏ và các bản sửa lỗi
1.4 Tháng 3/ 2010
1.6 Tháng 8/ 2010 Sharding sẵn sàng sản xuất
Bộ sao chép
Hỗ trợ cho IPv6
1.8 Tháng 3/ 2011
2.0 Tháng 9/ 2011
2.2 Tháng 8/ 2012
2.4 Tháng 3/ 2013 Hỗ trợ không gian địa lý nâng cao
Chuyển sang công cụ JavaScript V8
Cải tiến bảo mật
Tìm kiếm văn bản (beta)
Chỉ mục băm

1 Tham khảo Wikipedia.org

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.

IV. Cài đặt và cấu hình


Để cài đặt phần mềm MongoDB, đầu tiên ta sẽ truy cập vào trang chủ
https://www.mongodb.com/try/download/community để tải phần mềm. Ở giao diện tải
phần mềm, sẽ có 2 lựa chọn là download file cài đặt msi hoặc download file zip. Khi
chọn download file zip, ta chỉ cần giải nén ra không cần cài đặt gì, sau đó bắt đầu 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

Hình 15 kiến trúc của MongoDB [2]

Về mặt kiến trúc , MongoDB gồm có 4 thành phần:


- Mongod: đây là một node để lưu trữ và truy xuất dữ liệu
- Shard: đây là một tập hợp gồm nhiều Mongod tạo thành một cụm dữ liệu , mỗi
mongod là một bản sao dữ liệu. Nó có kiến trúc Master- Slave. Do đó trong
mỗi Shard sẽ có một bản sao là Master và các bản sao còn lại là Slave. Trong
đó, chỉ có Master là có thể đọc và ghi dữ liệu, các slave còn lại chỉ cho phép
đọc dữ liệu.
- Config server: nó hoạt động như một bộ chứa siêu dữ liệu trong MongoDB về
các đối tượng được lưu trữ trong các mongod. Config server sẽ được sử dụng
trong trường hợp các mongod bị lỗi. Thường trong một hệ cơ sở dữ liệu
MongoDB sẽ có từ 1 đến 3 Config Server.
- Mongos: Đây là thành phần duy nhất có thể giao tiếp với các thành phần bên
ngoài. Nó sẽ tiếp nhận yêu cầu từ máy khách và chuyển tiếp các yêu cầu này
đến vùng thích hợp.
Các thành phần này giao tiếp với nhau, trao đổi qua lại trong hệ thống và tạo cho
MongoDB một cơ chế hoạt động đặc biệt đó là sharding. Với cơ chế này, MongoDB
sẽ chia nhỏ một khối dữ liệu lớn ra nhiều phần khác nhau để lưu trữ phân tán. Điều
này giúp tăng khả năng mở rộng, lưu trữ và xử lý của hệ thống này. Các bản dữ liệu
sau khi chia nhỏ sẽ được nhân bản thành nhiều mongos. Tập hợp các mongos này sẽ
được gọi mà một shard. Mỗi mongos có thể là một collection hoặc một phần của
collection và một collection có thể được lưu trữ trải dài trên nhiều shard. Địa chỉ, cấu
hình của các shard này sẽ được lưu trữ trên 1 máy chủ là config server. Nhờ đó, khi
tiếp nhận một yêu cầu từ máy khách, thành phần mongod sẽ tìm kiếm vị trí các dữ liệu
được yêu cầu trong config server. Sau khi đã có được địa chỉ của shard chứa dữ liệu
cần, mongod sẽ vào kho chứa các shard để lấy dữ liệu đó ra để xử lý và trả về cho
máy khách.

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:

Tiếp theo ta thử xem các database có trong hệ thống:

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.

II. Sao lưu dữ liệu


Cũng giống như các hệ quản trị cơ sở dữ liệu khác, việc sao lưu dữ liệu là một công
việc rất quan trọng để dự phòng các biến cố có thể xảy ra. Trong MongoDB, thì việc
sao lưu (backup) và phục hồi (restore) dữ liệu rất thuận tiện vì MongoDB sử dụng JSON
và BSON để lưu trữ dữ liệu dưới chuẩn định dạng binary-encoded. BSON sẽ mở rộng

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

III. Phục hồi dữ liệu


Sau khi đã có các file backup dữ liệu, trong các trường hợp xảy ra sự cố, việc phục hồi
dữ liệu sẽ đưa cơ sở dữ liệu về trạng thái trước khi xảy sự cố. Khi tiến hành khôi phục
cơ sở dữ liệu, nếu database collection chưa tồn tại thì MongoDB sẽ tự động tạo mới một
database rỗng và tiến hành khôi phục dữ liệu.
Để phục hồi dữ liệu đã sao lưu trong MongoDB, ta sử dụng lệnh mongorestore. Cú
pháp:
>mongorestore

Bảng 3 Các lựa chọn tạo backup trong MongoDB

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:

Bảng 4 các tùy chọn backup

CHƯƠNG 3: QUẢN TRỊ THÀNH PHẦN VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU


MONGODB
I. Bộ sưu tập (Collection)
2. Tạo Collection
Khác với các các hệ quản trị cơ sở dữ liệu như SQL Server, MongoDB sử dụng khái
niệm collection thay vì khái niệm bảng. Các collection cũng có chức năng tương tự bảng
nhưng nó lưu trữ data dưới dạng JSON nên không có số lượng cột cố định, khi hiển thị
thì mỗi field sẽ hiển thị giống như 1 cột trong bảng.

23
Để tạo một collection mới trong database, ta sẽ sử dụng câu lệnh:

>Db.createCollection(< tên collection>, options )

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:

Các collections ban đầu


của database shopping

Thực hiện lệnh create


tạo collection “Car”

Xuất hiện collection car trong


danh sách collecions

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()
>

Ví dụ ở đây ta muốn xóa đi collecion car, ta thực hiện:

2. Một số kiểu dữ liệu trong MongoDB

26
Hình 16 Các kiểu dữ liệu trong MongoDB

3. Các thao tác CRUD


Bảng 6 Các thao tác CRUD trong MongoDB

Thao tác Cú pháp Mô tả


Insert >db.<tên Phương thức insertOne được sử dụng để
collection>.insertOne() thêm 1 doccument vào một collection.
Field “_id” sẽ được tự động thêm vào
mỗi object và là duy nhất ( primary key)
cho mỗi object
>db.<tên Với phương thức này, có thể insert nhiều
collection>.insertMany() documents vào một collection bằng cách
truyền vào một mảng.
Read >db.<tên collection>.find() Phương thức này cho phép tìm kiếm và
đọc document thỏa mãn các điều kiện từ
một collection.
Update >db.<tên Update một document đầu tiên được tìm
collection>.updateOne() thấy trong cơ sở dữ liệu
>db.<tên Update tất cả các document được tìm
collection>.updateMany() thấy
Delete >db.<tên Delete tất cả các document của một
collection>.deleteMany() collection. Ta có thể truyền thêm các

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.

II. Khung nhìn


Khung nhìn (view) trong MongoDB là một đối tượng có thể truy vấn, có nội dung được
xác định bởi một câu truy vấn tổng hợp trên các collection hoặc các views khác.
MongoDB không hỗ trợ thao tác chỉnh sửa đối với các khung nhìn
1. Tạo khung nhìn
Để tạo một khung nhìn, ta có 2 cách để tạo :
- Sử dụng phương thức createCollection(). Cú pháp:
db.createCollection(
"<viewName>",
{
"viewOn" : "<source>",
"pipeline" : [<pipeline>],
"collation" : { <collation> }
}
)

- Sử dụng lệnh create. Cú pháp:

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

Lệnh Phương pháp


create db.createCollection()
db.createView()
collMod db.getCollection()
db.getCollectionInfos()
db.getCollectionNames()
find db.collection.aggregate()
distinct db.collection.find()
count db.collection.findOne()
db.collection.countDocuments()
db.collection.estimatedDocumentCount()
db.collection.count()
db.collection.distinct()

III. Chỉ mục


Như đã đề cập ở mục thành phần của MongoDB, chỉ mục (index) giúp việc truy vấn dữ
liệu trở nên hiệu quả hơn. Nếu không có chỉ mục, MongoDB sẽ phải quét một lượng
lớn dữ liệu để chọn ra các document kết nối với lệnh truy vấn.
Để tạo một chỉ mục, ta sử dụng phương thức ensureIndex() của MongoDB. Cú pháp:
Trong đó:
>db.<tên collection>.ensureIndex({field: value})
>- Field là tên trường cần tạo chỉ mục
- Value có giá trị là 1 để tạo chỉ mục theo thứ tự tăng dần hoặc -1 để tạo theo thứ
tự giảm dần.

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

2 Tham khảo Hoclaptrinh.vn

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

IV. Hàm và thủ tục (Stored Procedure -SP)


Trong MongoDB không có khái niệm tương đương với SP trong SQL nhưng nó cung
cấp một tính năng có chức năng tương tự là Stored Javascript. Ta có thể lưu trữ một
Javascript logic trong một collection đặc biệt và sử dụng lại khi cần thiết.
Giả sử, ta cần tạo một hàm để cộng hai số với hai tham số đầu vào và trả về tổng của
chúng. Hàm này được viết trong javascript như sau:
function sum ( x , y ) {
return x + y ;
}

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

Field cần thực thi tính duy nhất.


- Để áp dụng tính duy nhất trên nhiều Field bằng proxy phân đoạn, ta phải có tập
hợp các proxy cho mọi Field. Nếu tạo nhiều unique index trên một proxy thì sẽ
không thể chia nhỏ các collection proxy để sử dụng.
VI. Bẫy lỗi (Trigger)
Trong MongoDB, hệ quản trị cơ sở dữ liệu này không có bất kì hỗ trợ nào về trigger.
Tuy nhiên ta có thể tự tạo ra thủ tục này bằng một số thủ thuật. Khi ta thao tác dữ liệu
trong MongoDB thì tất cả các hành động này sẽ được ghi vào nhật ký hoạt động được
gọi là oplog. Về cơ bản, Oplog là một danh sách chạy các sửa đổi được thực hiện với
dữ liệu. Các Replica Set sẽ lắng nghe các thay đổi trên oplog và thực hiện các thay đổi
này trong các bản sao cục bộ của nó. Do đó ta có thể tự tạo ra thủ tục trigger dựa trên
điều này bằng các công cụ có sẵn của MongoDB. Hiện nay, một số sản phẩm khác có
liên quan với MongoDB đã được tích hợp thêm thủ tục Trigger như MongoDB Realm
hay MongoDB Atlas.

CHƯƠNG 4: QUẢN TRỊ NGƯỜI DÙNG VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU


MONGODB
I. Quyền và vai trò (role) trong MongoDB
Khi làm việc với bất kì cơ sở dữ liệu nào, việc phân quyền, thiết lập tài khoản cho user
là một việc vô cùng cần thiết. Nhất là khi ta xây dựng các phần mềm, hoặc chia sẻ cơ
sở dữ liệu trong một nhóm. Với MongoDB thì điều này cũng không phải là ngoại lệ.
MongoDB cung cấp quyền truy cập của user dựa trên vai trò (roles) của user đó. Hệ
quản trị này cung cấp nhiều role tích hợp để gán cho người dùng. Bên cạnh đó , nó cũng
cho phép tạo người sử dụng tạo ra các role theo nhu cầu.
1. Các quyền và vai trò tích hợp có sẵn trong hệ thống
Trong MongoDB, các role có sẵn này được chia ra làm 4 nhóm role :
a) Nhóm Database User Roles

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

Role Mô tả Các hàm được sử dụng


Read Chỉ cho phép đọc dữ liệu trong collStats
database được chỉ định ( không bao
dbHash
gồm các collection trong hệ thốngdbStats
như: system.indexes, system.js, find
system.namespacesCollection. killCursors
listIndexs
listCollections
readWrite Cho phép đọc và ghi dữ liệu và sửa collStats
đổi dữ liệu trong các collection không convertToCapped
thuộc hệ thống và collection system.js createCollection
của database được chỉ định. dbHash
dbStats
dropCollection
createIndex
dropIndex
emptycapped
find
insert
killCursors
listIndexes
listCollections
remove
renameCollectionSameDB
update
b) Nhóm Database Administration Roles
Với nhóm role này, hệ thống sẽ cấp một số quyền quản trị nhất định trên một database
được chỉ định cho user. Bao gồm các role như sau:
Bảng 11 Nhóm Database Administration Roles

Role Mô tả Các hàm được sử dụng


dbAdmin Quyền này cho phép user collStats
có quyền quản trị đối với dbHash
database được chỉ dbStats
định.Tuy nhiên nó chỉ cho find
phép một số thao tác quản killCursors
trị nhất định như lập lược listIndexes
đồ, chỉ mục, thu thập thống listCollections
kê...

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.

c) Nhóm All Database Roles


Nhóm role này chỉ dành cho các database Admin. Nó có thể xem như là các quyền mở
rộng hơn của 2 nhóm role trên , thay vì user chỉ có quyền trên một database thì với
nhóm role này, user có quyền trên toàn bộ database có trong hệ thống. Cụ thể:
Bảng 12 Nhóm All Database Roles

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);

Role tùy chỉnh mới đã được tạo thành công.

II. Quyền đăng nhập hệ thống

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:

- Cách 2: Đăng nhập với phương thức db.auth()


Với cách này, đầu tiên ta sẽ truy cập vào bằng lệnh mongo, sau đó sử dụng lệnh
db.auth() trên database cần xác thực:

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:

- Xem collection Clothes trong database shopping

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:

- Xem các dữ liệu có trong database mydata:

Ở đâ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/.

[2] Gadini, MongoDB And HBase, 2018.

[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.

[5] N. Đ. Thuận, Ebook NoSQL.

[6] M. D. Kristina Chodorow, The Definitive Guide, O'reilly, 2010.

You might also like