Báo cáo đồ án : tìm hiểu hệ quản trị cơ sở dữ liệu mongodb

Báo cáo đồ án : tìm hiểu hệ quản trị cơ sở dữ liệu mongodb

lOMoARcPSD|27790909
lOMoARcPSD| 27790909
BÁO CÁO TÓM TẮT
1. Tiêu ề báo cáo: TÌM HIỂU HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB
2. Danh sách thành viên
MSSV
Họ tên
Ghi chú
20521042
Nguyễn Trí Vũ
20520031
Nguyn Thanh Tun
20520006
H Cnh Công
3. Nội dung chi tiết
Nội dung 1: Giới thiệu về MongoDB
+ Đề mc 1: Gii thiệu sơ lược v MongoDB
+ Đề mc 2: Mt s khái niệm cơ bản trong MongoDB
Nội dung 2: Các tính năng cơ bản
+ Đề mc 1: Các mô hình d liu
+ Đề mc 2: Các phương thức CRUD trong MongoDB
+ Đề mc 3: Aggregation Operation
Nội dung 3: Các tính năng nâng cao
+ Đề mc 1: Phân quyn, xác thc, bo mt trong MongoDB
+ Đề mc 2: Index
+ Đề mc 3: Replica Set
+ Đề mc 4: Phân tán d liu
+ Đề mc 5: Sao lưu và khôi phục
+ Đề mc 6: Nhp xut d liu
+ Đề mc 7: Mt s tính năng khác trên MongoDB
Nội dung 4: Demo tính năng trên MongoDB
+ Đề mc 1: Kch bn demo
+ Đề mc 2: Các chức năng sẽ demo
+ Đề mc 3: Kết qu demo
Nội dung 5: Kết luận và hướng phát triển
lOMoARcPSD|27790909
4. Phân công công việc
MSSV
Họ tên
Nội dung ược phân công
20521042
Nguyễn Trí Vũ
Ni dung 1 mc 1.2, Ni dung
3 mục 3.1 ến 3.4, mc 3.7, Ni
dung 4, Ni dung 5. Tng hp
ni dung và quay video
20520031
Nguyn Thanh Tun
Ni dung 2 (tt c) , Ni dung
4
20520006
H Cnh Công
Ni dung 1 mc 1.1, Ni dung
3 mc 3.5, 3.6, Ni dung 4
lOMoARcPSD|27790909
2
MỤC LỤC
CHƯƠNG 1: GII THIU V MONGODB ............................................................. 6
1.1. Giới thiệu sơ lược về hệ quản trị CSDL .............................................................. 6
1.2. Một số khái niệm cơ bản trong MongoDB .......................................................... 7
CHƯƠNG 2: CÁC TÍNH NĂNG CƠ BẢN ................................................................ 8
2.1. Các mô hình d liu ........................................................................................... 8
2.1.1. Gii thiu v mô hnh d liu ........................................................................ 8
2.1.2. Tính mm do ................................................................................................ 8
2.1.3. Các cu trc ca mô hnh d liu................................................................... 9
2.1.4. Xác thc mô hnh d liu ............................................................................. 10
2.1.5. Các mu thiết kế ca mô hnh d liu.......................................................... 11
2.2. Các phương thức CRUD trong MongoDB .................................................... 14
2.2.1. Thêm d liu ................................................................................................ 14
2.2.2. Truy vn d liu ........................................................................................... 15
2.2.3. Cp nht d liu ........................................................................................... 16
2.2.4. Xa d liu ................................................................................................... 18
2.3. Aggregation Operation .................................................................................... 19
2.3.1. Aggregation Pipeline ................................................................................... 20
2.3.2. Map-Reduce ................................................................................................. 20
CHƯƠNG 3: CÁC TÍNH NĂNG NÂNG CAO ........................................................ 21
3.1. Phân quyên, xác thc, bo mt trong MongoDB ......................................... 21
3.1.1. Xác thc các kết ni ca người dùng (Authentication) ............................... 22
3.1.2. Phân quyn và kiểm soát người dùng truy cp thông qua các role ............. 24
3.1.3. Mã hóa truyn d liu (TLS/SSL) ............................................................... 27
3.1.4. Mã hóa và bo v d liu ............................................................................. 27
3.1.5. Kim tra (Auditing) ...................................................................................... 27
3.2. Index................................................................................................................... 28
3.2.1. Gii thiu v Index ...................................................................................... 28
3.2.2. To mt index .............................................................................................. 28
3.2.3. S dụng Index h tr truy vn .................................................................. 28
3.3. Replica Set ........................................................................................................ 29
3.3.1. Gii thiu v replica set ............................................................................... 29
3.3.2. Cu trúc ca mt replica set ......................................................................... 29
3.3.3. Các bước thiết lp mt replica set ................................................................ 30
lOMoARcPSD|27790909
3.4. Phân tán d liu ............................................................................................... 31
3.4.1. Gii thiu v Sharding ................................................................................. 31
3.4.2. Mt s ịnh nghĩa .......................................................................................... 31
3.4.3. Phương pháp Sharding ................................................................................. 33
3.4.4. Zone trong Sharded Cluster ......................................................................... 33
3.4.5. Cách trin khai mt Sharded Cluster ........................................................... 34
3.5. Sao lưu và khôi phục ........................................................................................ 35
3.5.1. Sao lưu cơ sở d liu vi mongdump .......................................................... 36
3.5.2. Khôi phục cơ sở d liu vi mongorestore .................................................. 37
3.6. Nhp và xut d liu......................................................................................... 38
3.6.1. Nhp d liu vào Collection ........................................................................ 38
3.6.2. Xut d liu t mt Collection .................................................................... 41
3.7. Mt s tính năng khác trên MongoDB .......................................................... 43
CHƯƠNG 4: DEMO TÍNH NĂNG TRÊN MONGODB ........................................ 44
4.1. Kch bn demo ................................................................................................. 44
4.2. Các chức năng sẽ demo ................................................................................... 46
4.3. Kết qu demo ................................................................................................... 46
CHƯƠNG 5: KT LUẬN VÀ HƯỚNG PHÁT TRIN ......................................... 55
5.1. Kết lun............................................................................................................. 55
5.1.1. Ưu iểm ......................................................................................................... 55
5.1.2. Nhược iểm .................................................................................................... 56
5.2. Hướng phát trin ............................................................................................. 56
DANH MC BNG
Bng 4.1: Thiết lp sharded cluster MongoDB trên localhost .....................................
41
Bng 4.2: Tạo người dùng và phân quyn ....................................................................
41 Bng 4.3: Các collection kèm các thông tin trong database rangerShop
..................... 42
DANH MỤC HÌNH VẼ
Hình 2.1: Ví d v tham chiếu trong mô hình d liu ca MongoDB ...........................
9
Hình 2.2: Ví d thiết lp xác thc bng JSON schema ................................................
10
lOMoARcPSD| 27790909
4
Hình 2.3: Ví d thiết lp xác thc bng toán t truy vn .............................................
10
Hình 2.4: Ví d h thng danh mc sách ưc mô t theo cu trc cây ...................... 13
Hnh 2.5: Dùng phương thức db.collection.insertOne() ể thêm mt sinh viên vào
collection students ........................................................................................................
14
Hnh 2.6: Dùng phương thức db.collection.insertMany() ể thêm các sinh viên vào
collection students ........................................................................................................
14
Hnh 2.7: Dùng phương thức db.collection.find() ể ly toàn b thông tin trong
collection students ........................................................................................................
15
Hnh 2.8: Dùng phương thức db.collection.find() ểm sinh viên thỏa iều kin cho
trước ..............................................................................................................................
16
Hình 2.9: Dùng db.collection.updateMany()cp nhật thông tin sinh viên, sau  kiểm
tra kết qu .....................................................................................................................
17
Hình 2.10: Dùng db.collection. replaceOne() thay thế thông tin ca sinh viên c tên
“uit_sv” .........................................................................................................................
17
Hnh 2.11: Dùng phương thức db.collection.deleteMany() xa tt c document trong
Collection ......................................................................................................................
18
Hnh 2.12: Dùng phương thức db.collection.deleteMany() xa các document trong
Collection theo iều kin .............................................................................................. 18
Hình 2.13: Dùng phương thức db.collection.deleteOne() xa document ầu tiên trong
Collection thỏa iều kin .............................................................................................. 18
Hình 3.1: Bt chế kiểm soát người truy cp ca Mongo bng cách sa file
mongod.conf .................................................................................................................
22
Hình 3.2: S dng MongoDB Compass và tiến hành ăng nhập ................................. 23
Hnh 3.3: Sơ ồ mi quan h các thành phn trong Replica Set .................................. 28
Hình 3.4: Sơ ồ mi quan h các thành phn trong Sharded Cluster ........................... 30
Hnh 3.5: Click Add Datachn Import File .............................................................
36
Hình 3.6: Chn v trí tp và loi tp cho loi tp JSON ...............................................
37 Hình 3.7: Chọn trưng mun thêm và chn loi d liệu cho trường cho loi tp
CSV
lOMoARcPSD| 27790909
......................................................................................................................................
37
Hình 3.8: Chn các options nâng cao cho loi tp CSV ..............................................
38 Hình 3.9: Màn hình hin th các d liu file JSON (bên trái), CSV (bên phải) ã
nhập
vào.................................................................................................................................
38 Hình 3.10: Chn Export Collection
.............................................................................. 39
Hình 3.11: Hp thoi chn la cách xut d liu bng cách query filter hay xut toàn
b ..................................................................................................................................
39
Hình 3.12: Chọn thêm trường ể xut hoc hy b những trường không mun xut ra
......................................................................................................................................
39
Hình 3.13: Chọn Browse ể chn v trí ích muốn xuất file ra, sau  nhấn Export ể
tiến hành xut ................................................................................................................
40 Hnh 4.1: Collection products trong cơ sở d liu rangerShop
.................................... 44
Hnh 4.2: Collection orders và users trong cơ sở d liu rangerShop ..........................
44 Hình 4.3: Sharded Cluster gồm 2 shard là 2 replica set c tên ịnh danh shard_repl
shard2_repl ...................................................................................................................
45
Hình 4.4: Sharded Cluster chứa các collection ã ược phân tán theo index là orders,
products, users ..............................................................................................................
45
Hnh 4.5: Quy nh xác thc d liệu trong các collection trong cơ sở d liu
rangerShop ....................................................................................................................
46
Hình 4.6: Kiểm tra thông tin người dùng và phân quyn trên mongos và trên các shard
thành phn .....................................................................................................................
47
Hình 4.7: Dùng mongoose.connect() kết ni backend với cơ sở d liu rangerShop
kèm thông tin xác thc .................................................................................................
48
Hình 4.8: Thiết kế phương thức GET trong productRouter ly toàn b thông tin sn
phẩm trong cơ sở d liu ..............................................................................................
48
lOMoARcPSD|27790909
6
Hình 4.9: Kết qu phn hi ca backend khi yêu cầu ưa tất thông tin sn phm trong
cơ sở d liu, so sánh vi kết qu truy vần khi dùng phương thức trong Mongosh ....
49
Hình 4.10: Hin th sn phm lên frontend ..................................................................
49
Hình 4.11: Thiết kế phương thức GET trong orderRouter ly thông tin tng quan d
liu trong collection orders ...........................................................................................
50
Hình 4.12: S dụng phương thức db.collections.aggregate() ể xut thông tin s lượng
ơn hàng và tổng giá tr tính ược trong collection orders .......................................... 50
Hình 4.13: Hin th các thông s lên giao din website ca admin .............................
50 Hnh 4.14: Dùng mongodump sao lưu dữ liu ca cơ sở d liu rangerShop
............. 51
Hnh 4.15: Các file sao lưu cơ sở d liu rangerShop ược to ra .............................. 51
Hình 4.16: Dùng mongorestore khôi phc lại cơ sở d liu rangerShop t bản sao lưu
......................................................................................................................................
51
Hình 4.17: Kết qu khôi phc lại cơ sở d liu bng mongorestore ............................
52
Hình 4.18: File JSON ca các collection trong cơ sở d liu rangerShop ...................
52
CHƯƠNG 1: GII THIU V MONGODB
1.1. Gii thiệu sơ lược v h qun tr CSDL
MongoDB là mt trong những cơ sở d liu NoSQL ph biến nht, là một cơ
s d liệu hướng tài liu có mã ngun m. Thuc loi cơ sở d liu không quan h
(NoSQL), MongoDB không da trên cấu trc cơ sở d liu quan h giống như bảng
mà s lưu trữ và truy xut d liu dng document. Định dng d liu mi mà
MongoDB s dng là BSON (khá gn ging với ịnh dng JSON).
MongoDB ược phát hành vào năm 2009 ược viết bng ngôn ng C++, C++ là
ngôn ng gn vi ngôn ng máy nên d dàng hiu rng MongoDB có th tính toán
tốc ộ cao hơn hẳn các h qun tr cơ sở d liệu khác. Đ cũng là lý do mà MongoDB
luôn ược các nhà phát triển ánh giá rất cao.
MongoDB h tr a nền tảng theo hướng ối tượng dùng lưu trữ d liu có cu
trúc phc tp. Không như các hệ qun tr cơ sở d liệu khác lưu trữ dng bng,
lOMoARcPSD|27790909
MongoDB lưu dữ liệu vào collection theo hướng tài liệu JSON. Đây là kiểu d liu
dng Key-Value truy xut nhanh và kh năng mở rng không b ràng buc mi to
khóa ngoi hay khóa chính.
1.2. Mt s khái niệm cơ bản trong MongoDB
Các thành phần cốt lõi tạo nên MongoDB gm:
- Mongod: tiến trình lõi ca MongoDB, nơi lưu trữ và qun lý d liu
- Mongos: controller và query router, dùng cho trường hp phân tán d liu
(sharded cluster)
- Mongosh: giao diện shell ể người dùng có th tương tác thực hin lnh với cơ
s d liu. Có th ng Mongosh ể chy kim tra các lnh truy vn và thao tác
tùy biến d liệu lưu trong cơ sở d liu
Để khởi ộng MongoDB mặc ịnh trên localhost, chy lnh mongosh trên
command line. Tiến trình mongod khởi ng, và mongosh s kết ni vi mongod và
chy trên localhost:27017. Lnh mongosh tương ương với câu lnh mongosh
"mongodb://localhost:27017"
Document: Trong MongoDB, mt bản ghi ưc gi là mt document. Mi
document cha mt cp giá tr gồm trường d liu và giá tr ơng ứng ca trường 
trong document. Document vnh thức tương tự như dữ liu kiu JSON. Giá tr ca
một trường có th là số, văn bản, mng, mt document khác hoc mt mng các
document.
Collection: MongoDB lưu trữ các document trong collection. Collection trong
MongoDB tương ương với bng trong mô hình quan hệ. Để to mt collection mi
trong cơ sở d liu, s dụng phương thức db.createCollection()
BSON: là một ịnh dng d liu tun t hóa dng nh phân ược s dụng ể u
trữ document và thc hin các cuc gi th tc t xa trong MongoDB. Có nhiu kiu
d liu BSON, có th ược s dng s hoc chuỗi ịnh danh quy ịnh kiu d liu cho
một ối tượng.
Database (Cơ sở dữ liệu): Mt mongod có th cha nhiều cơ sở d liu. Mt
cơ sở d liu cha mt hoc nhiều collection. Để chn một cơ s d liu và tiến hành
lOMoARcPSD|27790909
8
các thao tác vi d liu với cơ sở d liệu , trong mongosh dùng lệnh use <tên cơ sở
dữ liệu>.
Để to một cơ sở d liu mi trong mongod, trong trường hp cơ sở d liu
không tn ti, MongoDB s t ng tạo cơ s d liu mi khi lưu trữ document ln ầu
tiên cho cơ sở d liu . Do , c thể dùng lnh use chuyển sang cơ sở d liu không
tn ti và thc hin thao tác thêm document mi trong collection mi trong mongosh.
MongoDB s tạo cơ sở d liu mi kèm theo collection kèm document ược ch nh. Ví
d:
use myNewDB
db.myNewCollection1.insertOne( { x: 1 } )
MongoDB Compass: là mt giao diện GUI cho phép người dùng tương tác vi
mongod mt cách trc quan thay vì dùng giao din commandline. MongoDB
Compass hin th các cơ sở d liu, collection, document mt cách trc quan, h tr
truy vn, thc hin aggregating function và phân tích d liu MongoDB.
MongoDB Database Tools: là tp hp các tin ích dng command-line ược
thiết lp sẵn, dùng ể thc hiện các thao tác ặc bit vi MongoDB như nhập xut, sao
lưu, khôi phục d liu (mongodump và mongorestore),…
CHƯƠNG 2: C TÍNH NĂNG CƠ BẢN
2.1. Các mô hình d liu.
2.1.1. Gii thiu v mô hnh d liu
Thách thc chính trong mô hình hóa d liu là cân bng gia nhu cu ca ng
dụng, ặc iểm v hiu sut ca h qun tr sở d liu và các mu truy xut d liu.
Khi thiết kế mô hình d liu, cn phi luôn cân nhc v vic s dng d liu trong ng
dng (bao gm các truy vn, cp nht và x lý d liệu) cũng như cấu trúc vn có ca
chính d liệu .
2.1.2. Tính mềm do
Khác vi các cơ sở d liu SQL, yêu cu phải xác ịnh và khai báo lược ca
bảng trước khi thêm d liu, các Collection ca MongoDB không yêu cu các
document phi c cùng mt mô hnh d liu: không nht thiết phi c cùng mt nhm
lOMoARcPSD|27790909
các trường, và kiu d liu cho một trưng cũng c th khác nhau gia các document
trong b d liu. Để thay ổi cu trc ca document trong Collection, ch cn cp nht
document theo cu trc d liu mi.
Tính linh hot này tạo iều kin thun li cho vic ánh x các document ti mt
thc th hoc một ối tưng. Mi document có th khp với các trường d liu ca
thc th ược ại din, ngay c khi bn ghi có s thay ổi áng kể so vi các document
khác trong Collection. Tuy nhiên trong thc tế, các document trong cùng mt
Collection thường c cu trc tương tự nhau. Đồng thi, người ta cũng s dng các
quy tc xác thc mô hnh d liệu ối vi quá trnh thêm và sa d liu.
2.1.3. Các cu trc ca mô hnh d liu
Vấn ề quan trng trong vic thiết kế mô hình d liu cho các ng dng s dng
MongoDB xoay quanh cu trúc ca các Collection và cách ng dng th hin mi
quan h gia các d liu.
- Nhng dữ liệu: MongoDB cho phép nhúng tt c d liu liên quan trong mt
document duy nht. D liệu ược nhúng th hin mi quan h gia các d liu
bng cách lưu trữ d liu liên quan trong mt cu trúc tài liu duy nht.
MongoDB h tr vic nhúng các cu trúc d liu vào một trường hoc mng
trong document. Các mô hình d liu không chun hóa này cho phép
các ng dng truy xut và thao tác d liu liên quan trong một thao tác cơ sở
d liu duy nht. Ví d:
{
}
- Tham chiếu: Cn ược gi là kiến trc chun ha ca mô hnh d liu. Các tham
chiếu lưu trữ các mi quan h gia các d liu bng cách thêm các liên kết hoc
tham chiếu gia các document. Các ng dng th thông qua các tham chiếu
lOMoARcPSD|27790909
10
này ể truy cp d liu liên quan. Đây là mt dng mô hình d liu chun hóa.
ví d dưới ây, trường user_id” trong b d liệu “contact” “access” ược ng
tham chiếu ến user c liên quan.
Hình 2.1: Ví dụ về tham chiếu trong mô hình dữ liệu của MongoDB
2.1.4. Xác thực mô hnh d liu
2.1.4.1. Thiết lập xác thc bng JSON schema
c thc cu trc JSON là một phương pháp cho phép ch thích và c thc
c tài liu JSON. Thông qua vic s dng một lược ồ JSON, ể xây dng các quy
tc xác thc cho các trường ca document.
Ví d dưới ây sử dng mt toán t $jsonSchema thiết lp các quy tc xác
thc i vi vic thêm d liu vào Collection “students”.
Hình 2.2: Ví dụ thiết lp xc thc bng JSON schema
Bng vic s dụng ịnh dạng JSON ể thiết lp các quy tc xác thc, chng ta c
th d dàng ọc và hiểu ược các quy tc xác thực ược ưa ra với các trường d liệu như:
lOMoARcPSD|27790909
các trường nào là bt buc, kiu d liu ca mỗi trường, giá tr min/max, các thông
báo li khi quy tc xác thc b vi phm. 2.1.4.2. Thiết lập xác thực bng toán t
truy vấn
Thiết lp quy tc xác thc bng toán t truy vấn ược s dng trong các trường
hp cn to ra các quy tc xác thc ộng ể so sánh giá tr ca các trưng trong thi gian
chy.
Hình 2.3: Ví dụ thiết lp xc thc bng ton t truy vn
Lnh trong d trên to ra mt quy tc c thc khi thêm d liu o
Collection “orders”: trường “totalWithVAT” phải bng tng ca 2 trường total
“VAT”. Khi vi phạm s nhận ược thông báo li.
2.1.5. Các mu thiết kế ca mô hnh d liu
2.1.5.1. Mô hnh quan hệ giữa các document
a) Quan hệ một một
t ví dy dựng sơ ồ mi quan h mt mt gia sinh viên và a ch ca
sinh viên . Trong mô hnh d liu chun ha, document DiaChisẽ cha tham chiếu
ến document “SinhVien”. Nếu vic s dng ng dng cn thường xuyên truy xut d
liệu ịa ch cùng vi d liu sinh viên, th vi vic dùng tham chiếu s i hi ưa ra
nhiều truy vấn hơn ể gii quyết tham chiếu. Mô hnh tốt hơn sẽ là nhng d liệu
“DiaChi” vào trong d liệu “SinhVien” như sau:
{
_id: "sv_uit_1", name: "Nguyen Van A", address: { city:
"HCM", district: "Thu Duc", ward: “Linh Trung”
}
}
b) Quan hệ một nhiều s dụng nhng dữ liệu
lOMoARcPSD|27790909
12
Mô hnh d liu quan h mt nhiu s dụng phương pháp nhng d liệu ược
s dụng trong trường hp cn truy xut nhiu thc th ca mt d liu nm trong mt
d liu khác. Tiếp tc vi ví d trên, ta xét trong trường hp mt sinh viên c th c
nhiều ịa ch liên h. Nếu nhu cu truy xuất thông tin ịa ch ng thi vi d liu sinh
viên xảy ra thường xuyên, th phương pháp tối ưu hơn là nhng các thc th ca d
liệu ịa ch vào trong d liu sinh viên.
{
_id: "sv_uit_1", name:
"Nguyen Van A", address:
[ { city:
"HCM", district:
"Thu Duc", ward:
“Linh Trung”
}, {
city: "HCM",
district: "Phu Nhuan",
ward: “Phuong 2”
}
]
}
c) Quan hệ một nhiều s dụng tham chiếu
t ví d v mô hnh d liu th hin quan h gia sinh viên và môn học ã ăng
ký. V mt môn hc c rt nhiu sinh viên ăng ký, nên vic nhng d liu môn hc
vào trong d liu sinh viên c th dn ến vic lp li d liu ca môn hc, gây lãng phí
tài nguyên h thng. Để tránh việc lưu trữ lp li d liu ca môn hc, c th to ra
một Collection riêng ể cha d liu môn hc. Cần lưu ý trong trường hp này, mt
môn hc s c rt nhiều sinh viên ăng ký, nên việc ể tham chiếu t d liu môn hc
sang d liu sinh viên s dn ến lưu trữ mt mng rt ln:
// MonHoc
{
_id: "mon_hoc_1", name: "Quan ly thong tin", students:
[“sv_uit_1”, “sv_uit_2”, “sv_uit_3” …]
}
Nên cân nhc ể tham chiếu ến d liu môn hc t d liệu sinh viên như sau:
lOMoARcPSD|27790909
// MonHoc
{
_id: "mon_hoc_1",
name: "Quan ly thong tin",
}
// SinhVien
{
_id: "sv_uit_1",
name: "Nguyen Van A",
class_id: “mon_hoc_1”
}
{
_id: "sv_uit_2",
name: "Nguyen Van B",
class_id: “mon_hoc_1”
}
2.1.5.2. Mô hnh cây
t ví d v h thng danh mc sách ưc mô t trong cu trc cây như sau:
Hình 2.4: Ví dụ hệ thng danh mục sch ưc mô t theo cu trc cây
a) S dụng tham chiếu cha
{ _id: "MongoDB", parent: "CoSoDuLieu" }
{ _id: "PostgreSQL", parent: "CoSoDuLieu" }
{ _id: "CoSoDuLieu", parent: "CongNgheThongTin" }
{ _id: "NgonNguLapTrinh", parent: "CongNgheThongTin" } { _id:
"CongNgheThongTin", parent: "Sach" }
{ _id: "Sach", parent: null }
b) S dụng tham chiếu con
{ _id: "MongoDB", child: [] }
{ _id: "PostgreSQL", child: [] }
lOMoARcPSD|27790909
14
{ _id: "CoSoDuLieu", child: ["MongoDB", "PostgreSQL"] }
{ _id: "NgonNguLapTrinh", child: [] }
{ _id: "CongNgheThongTin", child: ["CoSoDuLieu", "NgonNguLapTrinh"] }
{ _id: "Sach", child: ["CongNgheThongTin"] }
c) S dụng danh sách gốc
{_id: "MongoDB", ancestors: ["Sach", "CongNgheThongTin", "CoSoDuLieu"],
parent: "CoSoDuLieu"}
{_id: "PostgreSQL", ancestors: ["Sach", "CongNgheThongTin","CoSoDuLieu"],
parent: "CoSoDuLieu"}
{_id: "CoSoDuLieu", ancestors: ["Sach","CongNgheThongTin"],
parent:"CongNgheThongTin"}
{_id:"NgonNguLapTrinh", ancestors: ["Sach","CongNgheThongTin"],
parent:"CongNgheThongTin"}
{_id:"CongNgheThongTin", ancestors: ["Sach"], parent: "Sach"}
{_id: "Sach", ancestors: [], parent: null}
d) S dụng ưng dn
{_id: "MongoDB", path: ",Sach,CongNgheThongTin,CoSoDuLieu,"}
{_id: "PostgreSQL", path: ",Sach,CongNgheThongTin,CoSoDuLieu,"}
{_id: "CoSoDuLieu", path: ",Sach,CongNgheThongTin,"}
{_id:"NgonNguLapTrinh", path: ",Sach,CongNgheThongTin"}
{_id:"CongNgheThongTin", path: ",Sach,"}
{_id: "Sach", path: null}
2.2. Các phương thức CRUD trong MongoDB
2.2.1. Thêm d liu
C pháp db.collection.insertOne() ược s dụng ể thêm mt document vào
Collection.
Hình 2.5: Dùng phương thức db.collection.insertOne() ể thêm một sinh viên vào collection students
Câu lnh trong ví d trên ã thêm thông tin ca mt sinh viên mi vào
Collection students”. V trong document không khai báo trường “_id”, MongoDB sẽ
t ng gán mt giá tr ObjectId cho trường này. Hàm insertOne() tr v kết qu thc
thi thêm d liu và giá tr ca trường “_idca document vừa ược thêm vào.
Khi cn thêm nhiu document cùng mt lc, s dng c pháp
lOMoARcPSD|27790909
db.collection.insertMany() và truyn vào mt mng gm các document.
Hình 2.6: Dùng phương thức db.collection.insertMany() ể thêm cc sinh viên vào collection students
Khi s dng câu lệnh insert ể thêm d liu, nếu thêm d liu vào mt
Collection không tn ti, thao tác thêm d liu s t ng to mi Collection.
MongoDB cũng yêu cu mi document cn c trường “_idm kha chính. Nếu
trong câu lệnh insert chưa khai báo trường này, thao tác thêm d liu s t ng to ra
mt giá tr ObjectId ể gán cho “_id”, và tr v sau khi thêm d liu thành công.
Ngoài ra, vic thêm d liu cũng c th ược thc hin bi hàm
db.collection.bulkWrite() hoc mt sm cp nht, chnh sa d liu vi tùy chn
upsert=true:
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.findAndModify()
- db.collection.findOneAndUpdate()
- db.collection.findOneAndReplace()
2.2.2. Truy vn d liu
Truy vn tt c document trong Collection: S dng c pháp
db.collection.find() và truyn vào tham s là một ối tượng JSON rng {}.
lOMoARcPSD|27790909
16
Hình 2.7: Dùng phương thức db.collection.find() ể ly toàn bộ thông tin trong collection students
S dụng iều kin bng: Xác ịnh các iều kin tm kiếm dưới dng các cp
<field>:<value>, th hiện dưới ịnh dng JSON và truyn vào hàm
db.collection.find()
S dng toán t truy vn: MongoDB h tr tm kiếm và lc d liu bng các
toán t so sánh, logic, iều kin, ...
S dụng iều kiện “AND” hoc “OR: Ví d tm kiếm tt c sinh viên khoa
CNTT c GPA > 3.7 hoc < 3.6
Hình 2.8: Dùng phương thức db.collection.find() ể tìm sinh viên thỏa iều kiện cho trước
2.2.3. Cập nhật d liu
Cp nht d liệu trên MongoDB ược thc hin thông qua các câu lnh:
- db.collection.updateOne(<filter>, <update>, <options>)
- db.collection.updateMany(<filter>, <update>, <options>)
lOMoARcPSD|27790909
- db.collection.replaceOne(<filter>, <update>, <options>)
Trong , <filter> iều kin lc document ể thc hin cp nht, <update>
c pháp cp nht d liu, vi <options> là mt s iều kin ược thêm vào.
Cập nhật trên một document: S dng c pháp db.collection.updateOne()
lấy ra sinh viên ầu tiên c tênuit_sv_2, cp nht chuyên ngành thành KHMT
niên kha thành 2022. Dùng toán t $currentDate cp nhật trường lastModified
thành ngày hin ti; nếu chưa s ược toán t $currentDate to ra.
Cập nhật trên nhiều document: S dng db.collection.updateMany() sa a
ch thành ph ca các sinh viên kha 2020 tHCMthành TP.HCM”.
Hình 2.9: Dùng db.collection.updateMany()cp nht thông tin sinh viên, sau ó kiểm tra kết qu
lOMoARcPSD|27790909
18
Thay thế giá tr trên một document: S dng db.collection.replaceOne()
thay thế thông tin ca sinh viên c tên uit_sv.
Hình 2.10: Dùng db.collection. replaceOne() thay thế thông tin của sinh viên có tên “uit_sv”
2.2.4. Xa dữ liu
Xa tt cả document trong Collection: S dng db.collection.deleteMany(),
truyn vào tham s là một ối tượng JSON rng.
Hình 2.11: Dùng phương thức db.collection.deleteMany() xóa tt c document trong Collection
Xa tt cả document tha mn iều kiện: S dng db.collection.deleteMany(),
vi tham s truyn vào th hiện iều kiện ể tm kiếm document thc thi lnh xa. d
xa d liu các sinh viên c GPA < 3.7 ra khi Collection students.
lOMoARcPSD|27790909
Hình 2.12: Dùng phương thức db.collection.deleteMany() xóa cc document trong Collection theo iều kiện
Xa một document tha iều kiện: S dng c pháp db.collection.deleteOne(),
vi tham s truyn vào iều kin tm kiếm, lnh này s xa document ầu tiên tm thy
tha mãn iều kiện ã cho. Ví d, xa d liệu sinh viên ầu tiên niên kha 2020.
Hình 2.13: Dùng phương thức db.collection.deleteOne() xóa document ầu tiên trong Collection thỏa iều kiện
2.3. Aggregation Operation
Aggregation Operations x lý nhiu tài liu và tr v kết qu ã tính toán. Bn
có th s dng các phép toán tng hợp ể: Nhm các giá tr t nhiu document vi
nhau; Thc hin các thao tác trên d liu ược nhm ể tr v mt kết qu duy nht;
Phân tích s thay ổi ca d liu theo thi gian
Aggregation Operations c th ược thc hin ph biến bng các phương thức
như Aggregation Pipeline, Map-Reduce
lOMoARcPSD|27790909
20
2.3.1. Aggregation Pipeline
Aggregation Pipeline bao gm nhiều giai oạn x lý tài liu:
- Mỗi giai oạn thc hin một thao tác trên các document ầu vào. Ví d: mt giai
oạn có th lc document, nhóm document và tính toán giá tr.
- Các document ược tr ra t một giai oạn xs ược chuyn vào cho giai oạn
xtiếp theo
- Mt Aggregation Pipeline c th tr v kết qu cho các nhm tài liu. Ví d: tr
v giá tr tng, trung bnh, ln nht, nh nht.
Ví d v Aggregation Pipeline dưới ây gồm c hai giai on và tr v tng s
lượng ặt hàng ca các mt hàng c c medium ược nhm theo tên mt hàng:
db.orders.aggregate( [
// Giai on 1: Lc ra cc ơn hng c c l medium
{
$match: { size: "medium" }
},
// Giai on 2: T cc ơn hng ã lc, nhm theo tên mt hng v tnh tng
{
$group: { _id: "$name", totalQuantity: { $sum: "$quantity" } }
}] )
Ví d trên minh ha mt Aggregation Pipeline với 2 giai oạn:
- Giai oạn $match: Lc ra các document ơn hàng cch cmedium, sau
chuyn các document va lọc ược ến giai oạn $group
- Giai oạn $group: Nhm các document nhận ược theo tên mt hàng. Sau s
dng $sum tính toán tổng ơn hàng t $quantity ca mi ơn hàng. Tng va
tính ược lưu trữ trong totalQuantity ược tr v bi Aggregation
Pipeline.
2.3.2. Map-Reduce
Map-Reduce là mt mô hình x lý d liệu ể nhm và mô hnh ha khối lượng
ln d liu thô thành các kết qu tng hp hu ích. Để thc hin các thao tác map-
reduce, MongoDB cung cp lnh mapReduce.
lOMoARcPSD|27790909
db.orders.mapReduce( function() { emit(
this.cust_id, this.amount ); }, function(key,
value) { return Array.sum( values) },
{ query: { status:
“A” }, out:
“order_totals”
}
)
Trong thao tác map-reduce ví d trên, MongoDB áp dụng giai oạn map cho
mi document u vào (nghĩa là các document trong Collection tha mãn iều kin truy
vn). Quá trnh map to ra ánh x các cp kha-giá tr (key-value). Đi vi nhng
khóa có nhiu giá tr, MongoDB áp dng reduce, phương thức này thu thp và rt gn
d liu tng hợp. MongoDB sau  u trữ các kết qu trong mt Collection. Theoy
chọn, ầu ra ca quá trnh reduce có th chuyn qua mt hàm cuối cùng ể rt gn thêm
hoc x lý kết qu ca Aggregation Operation.
Tt c các hàm phc v map-reduce trong MongoDB ều dùng JavaScript và
chy trong tiến trnh mongod. Thao tác map-reduce ly các tài liu ca mt Collection
duy nhất làm ầu vào và có th thc hin bt k thao tác phân loi và lc nào trưc khi
bt ầu giai oạn map. mapReduce th tr v kết qu ca thao tác dưới dng
document hoc có th ghi kết qu vào Collection.
CHƯƠNG 3: C TÍNH NĂNG NÂNG CAO
3.1. Phân quyên, xác thc, bo mt trong MongoDB
Để m bo an toàn bo mật cho cơ sở d liu, MongoDB cung cp các tính
năng gip người s dng thc hin các bin pháp an ninh cần c như sau:
- Xác thc các kết ni ca người dùng (Authentication)
- Phân quyn (Authorization)/ kiểm soát người dùng truy cp thông qua các role
(Role-Based access control.)
- Mã hóa mạng (Network Encryption)/ mã ha các thông tin ược truyền i
(Transport Encryption)
- Mã hóa kho d liu (Storage Encryption)/ Mã hóa d liu lúc h thống ang ở
lOMoARcPSD|27790909
22
trng thái ngh (Encryption-at-rest)
- Kim tra (Auditing)
3.1.1. Xác thc các kết ni ca ngưi dùng (Authentication)
Tính năng xác thực yêu cu máy khách cung cp bng chng rng tài khon là
hp l có th truy cập cơ sở d liu. MongoDB cung cp 3 loại cơ chế xác thc:
- Xác thc da trên mt khu máy khách xác minh danh tính bng cách chng
minh vic có s hu mt giá tr mật ược xác ịnh trước. Cơ chếy
MongoDB s dng SCRAM-SHA-1 và SCRAM-SHA-256
- Xác thc da trên chng ch - ng dng khách xác minh danh tính bng chng
ch x.509 ược ký bi T chc Phát hành Chng ch (Certificate Authority) áng
tin cậy.
- Xác thc bên ngoài - máy khách xác minh danh tính bng dch v bên ngoài,
chng hạn như Kerberos hoc LDAP.
MongoDB Community h tr xác thc kiu SCRAM, x.509, còn vi phiên bn
MongoDB Atlas và MongoDB Enterprise s h tr thêm các cơ chế xác thc bên
ngoài: xác thc dùng LDAP proxy, xác thc Kerberos.
3.1.1.1. S dụng SCRAM ể xác thực các kết nối ca ngưi dùng
a) Giới thiệu về SCRAM
Salted Challenge Response Authentication Mechanism (SCRAM) là cơ chế xác
thực người dùng mặc ịnh cho MongoDB. Khi một người dùng xác thc vào server,
MongoDB s dùng SCRAM ể xác thực các thông tin ược người dùng cung cp v tên
ăng nhập, mt khẩu và cơ sở d liu muốn ược xác thực ể truy cp
b) Tính năng ặc trưng khi triển khai bảo mật kiểu SCRAM
- Các h s công vic có th iều chnh. Ví d như số ln lp (iteration count)
trong phương thức dn xut khóa (Key derivation function).
- Mt mã Salt ngu nhiên cho mỗi người dùng.
- Xác thc danh tính hai chiu gia máy ch và máy khách
c) Cách bật tính năng kiểm soát ngưi dùng và tạo tài khoản với mongod
lOMoARcPSD|27790909
- Bước 1: Khởi ộng MongoDB chế không kiểm soát người truy cp
- Bước 2: Kết ni mongosh ti mongod cn thiết lp
- Bước 3: To user qun tr (administrator) bng cách dùng collection admin và
chạy phương thức db.createUser(). Ví d
db.createUser(
{
user: "vunguyen",
pwd: "vunguyen",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]})
- Bước 4: Bt chế kiểm soát người truy cp ca mongod. M file config
mongod.conf và chnh sa phn security thêm authorization: enabled
-
Hình 3.1: Bt chế ộ kiểm sot người truy cp của Mongo bng cách sa file mongod.conf
- Bước 5: Kết ni li MongoDB và xác thc dùng tài khon admin va to
lOMoARcPSD|27790909
24
Hình 3.2: S dụng MongoDB Compass và tiến hành ăng nhp
- Bước 6: To một người dùng mi bng tài khon admin db.createUser(
{
user: "user1",
pwd: "user1",
roles: [ { role: "readWrite", db: "quan_ly_sach_2" }]})
- Bước 7: Kết ni li MongoDB và xác thc bng tài khon mi to
3.1.2. Phân quyn và kiểm soát ngưi dùng truy cp thông qua các role
MongoDB s dng Kim soát truy cp da trên các role (Role-Based Access
Control - RBAC) ể qun lý quyn truy cp vào h thống MongoDB. Người dùng ược
cp mt hoc nhiều role xác nh quyn truy cp ca người dùng vào các hot ộng và
tài nguyên sở d liệu. người dùng không có quyn truy cp vào h thng ngoài
các role ược gán 3.1.2.1. Một số ịnh nghĩa
Resource: Mt resource (tài nguyên) trong MongoDB có th là một cơ sở d
liu, mt collection, mt b các collection hoc mt cluster. Nếu tài nguyên là cluster,
các hành ộng liên kết nh hưởng ến trng thái ca h thống hơn là một cơ sở d liu
hoc collection c th.
Privilege: Privilege (Đặc quyn) bao gm mt resource c th và các hành ộng
ược phép trên resource. Mt role cấp privilege ( c quyền) thc hin các hành ộng
ược ch nh trên mt resource. Mi privilege hoặc ược ch nh rõ ràng trong role hoặc
ược kế tha t mt role khác hoc c hai.
lOMoARcPSD| 27790909
3.1.2.2. Role ược thiết lập sẵn và Role do ngưi dùng ịnh nghĩa
a) Các role ược thiết lập sẵn
- Các role cho người dùng cơ sở d liu: read, readWrite
- Các role cho người qun tr cơ sở d liu: dbAdmin, dbOwner, userAdmin
- Các role cho người qun tr Cluster: Cơ sở d liệu admin c ịnh nghĩa thêm các
role ể qun tr toàn b h thng thay vì một cơ sở d liu riêng l:
clusterAdmin, clusterManager, clusterMonitor, và hostManager
- Các role cho sao lưu và phục hi: Cơ sở d liệu admin ịnh nghĩa sẵn các role
backup, restore
- Các role áp dng lên toàn b các cơ sở d liu tr local và config:
readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase,
dbAdminAnyDatabase
- Các role Superuser: Mt s role trc tiếp hay gián tiếp có quyn truy cp ti
toàn b h thống. Các role sau ây c thể gán bt kì privilge nào bất k cơ sở
d liu nào: dbOwner, userAdmin, userAdminAnyDatabase, root
- Role ni b h thng: __system
b) Role do ngưi dùng ịnh nghĩa
- Để to mt role mi trong MongoDB, s dng phương thức db.createRole().
- MongoDB cũng cung cấp các phương thức ể tiến hành chnh sa các role người
dùng ã ịnh nghĩa trước
3.1.2.3. Các thao tác trên role
a) Hiển thị role ca ngưi dùng: S dụng phương thức db.getUser() b) Hiển thị
privilege ca một role
- Để xem thông tin ca mt role, người dùng phải ược cấp role, hoặc ược phép
thực thi viewRole trên cơ sở d liu hin ti
- S dụng phương thức db.getRole() hoc lnh rolesInfo, vi thiết lp
showPrivileges: true
c) Xa role khỏi ngưi dùng: Dùng phương thức db.revokeRolesFromUser().
d) Gán role cho ngưi dùng: Dùng phương thức db.grantRolesToUser().
lOMoARcPSD|27790909
26
3.1.2.4. Thay ổi mt khu và d liu tùy chnh
Để sửa ổi mt khu và d liu tùy chnh phải c privilege ược cp cho các hành
ng changeOwnPassword và changeOwnCustomData ơng ứng trên cơ sở d liu
ca người dùng. C 2 cách thay ổi mt khu và d liu tùy chnh:
- Dùng phương thức db.updateUser() ể cp nht mt khu và d liu tùy chnh.
- Dùng phương thức passwordPrompt () kết hp với các phương thức người
dùng khác nhau nhc nhp mt khu thay ch nh mt khu trc tiếp trong
phương thức
3.1.2.5. Kim soát quyn truy cp mức ộ Collection
Bng cách ch ịnh cơ sở d liu và collection trong phần ịnh nghĩa tài nguyên
ca mt privilege, qun tr viên có th gii hn các hành ộng ch trong mt collection
c th trong một cơ sở d liu c th. Mỗi hành ộng privilege trong mt
role có th ược xác ịnh phm vi cho mt collection khác. Ví d:
privileges: [
{ resource: { db: "products", collection: "inventory" }, actions: [ "find",
"update", "insert" ] },
{ resource: { db: "products", collection: "orders" }, actions: [ "find" ] }]
3.1.2.6. Các bước tiến hành thiết lp các role h tr phân quyn và kim soát truy
cập ngưi dùng
- Bước 1: To tài khon user administartor
- Bước 2: T tài khon admin, to thêm nhng tài khon duy nht cho tng
người /ng dng truy cp vào server
- Bước 3: Tạo các role ịnh nghĩa các quyền truy cp cn có ca mt nhóm người
dùng
- Bước 4: To các tài khoản ngưi dùng và gán cho h nhng role mà h cần ể
thc hin chức năng vai tr ca h
lOMoARcPSD|27790909
3.1.3. Mã hóa truyn d liu (TLS/SSL)
Mã hóa truyn d liu có tác dụng ngăn chặn người l không cho sao chép d
liu trong khi d liệu ang ược truyền i MongoDB h tr TLS / SSL (Transport
Layer Security/Secure Sockets Layer) ể mã hóa tt c lưu lượng mng ca MongoDB.
TLS / SSL ảm bo rng lưu lượng mng MongoDB ch có th ọc ược bởi ng máy
khách ược nhm ti
3.1.4. Mã hóa và bo v d liu
Mã hóa d liệu lưu tr là công vic cn thiết ể phng trường hp các tp cha
cơ sở d liu b sao chép bt hp pháp. Vic sao chép các tp cơ sở d liu có th xy
ra khi c người ột nhp vào trung tâm d liệu (data center) và ánh cp ĩa cứng ca
máy ch. Tiến hành mã hóa d liu trong lớp lưu trữ với tính năng Encryption at Rest
(mã hóa trng thái ngh) ca ca công c u trữ WiredTiger, hoc s dng mã hóa
h thng tp, mã hóa thiết b hoc mã hóa vt lý (ví d: dm-crypt). Ngoài ra cũng nên
bo v d liu MongoDB bng cách s dng các quyn tp h thng. Có th s dng
Mã hóa có th truy vn (Queryable Encryption) hoặc Mã ha các trưng d liu phía
máy khách (Client-Side Field Level Encryption) ể mã ha các trường d liu trong
document phía ng dng trước khi truyn d liệu ến máy ch.
3.1.5. Kim tra (Auditing)
Kiểm tra gip theo dõi người dùng cơ sở d liu, ngay c khi người  xa dấu
vết ca h sau khi thay ổi hoặc thay ổi d liệu cơ sở d liu, cho phép theo dõi quyn
truy cập và thay ổi cấu hnh cơ sở d liu và d liu. MongoDB Enterprise có một cơ
sở h thng kim tra có th ghi li các s kin h thống như hoạt ộng ca người dùng
và các s kin kết ni trên mt phiên bn MongoDB.
MongoDB tp hp các log nht ký vào mt ch trung tâm. Các nht ký này
cha các n lc xác thực cơ sở d liu, bao gồm ịa ch IP ngun. Các h sơ kiểm tra
này giúp cho việc phân tích iều tra và cho phép qun tr viên xác minh các bin pháp
kim soát thích hp.
lOMoARcPSD|27790909
28
3.2. Index
3.2.1. Gii thiu v Index
Index là mt cu trúc d liệu ặc bit, ng dng cây nh phân ể lưu trữ mt phn
ca d liu theo cách d duyt và tìm kiếm. Index cha d liu ca một trường hoc
một nhm các trường c th, và sp xếp theo giá tr trong các trường . Việc sp xếp
các giá tr trong index giúp cho các truy vấn liên quan ến khong giá tr hoc tìm giá
tr khớp ược hiu qu hơn. Ngoài ra, MongoDB c thể tr v kết qu ược sp xếp sn
khi dùng trình t sp xếp trong index. MongoDB có th tn dụng index ể gii hn s
lượng document cn kim tra
Các loi index: MongoDB cung cp các loại index khác nhau ể phc v cho
tng loi d liu và câu truy vn: Single Field, Compound Index, Multikey Index,
Geospatial Index, Text Index, Hashed Index, Clustered Index
Các thuc tính ca Index: Unique Index, Partial Index, Sparse Index, TTL
Index, Hidden Index
3.2.2. To mt index
Để to mt index trong Mongo shell, dùng lnh db.collection.createIndex()
theo cú pháp sau: db.collection.createIndex( <tên trường dữ liệu và kiểu index kèm
thông s>,
<cc tùy chọn khc> )
Ví d: to ra một index trên trường name, sp xếp giá tr theo th t gim dn:
db.collection.createIndex( { name: -1 } )
3.2.3. S dụng Index h tr truy vn
Index có th giúp ci thin tốc ộ truy vấn trong cơ sở d liu. Khi truy vn d
liu kèm theo ch nh vùng cn tìm kiếm mà tương ứng vi một index ã thiết lp,
MongoDB s tr v kết qu t các giá tr trong index thay vì quét tng document hay
ưa document vào vùng nhớ
Ngoi ra, MongoDB có th thc hin Index Intersection bng cách kết hp các
index ã thiết lập khác nhau ể x lý truy vn nếu cho kết qu phù hp vi yêu cu
lOMoARcPSD|27790909
3.3. Replica Set
3.3.1. Gii thiu v replica set
Replica set là mt nhóm các trình mongod cùng qun lý mt b d liu. Replica
set giúp d liu tn ti nhiều nơi và luôn sẵn sàng cung cp thông tin cho các ng
dng, góp phần tránh gián oạn dch v khi có s c server; gip tăng khả năng y
khách c ược d liu, d liu phân b cc b và tập trung hơn theo khu vc. Ngoài ra,
replica set còn h tr vic sao lưu, khôi phục d liệu, báo cáo, …
3.3.2. Cu trúc ca mt replica set
Mt replica set bao gm nhiu node (tức server), trong  c một Primary node
duy nht, các node còn li là các Secondary node, ngoài ra có th cha thêm arbiter
node ể h tr chn primary node khi mt server gp s c. Primary node và
Secondary node ều ph trách cha d liu, còn Arbiter node thì không
Primary node ph trách toàn b vic ghi d liệu, lưu các thay ổi và chnh sa
trong d liu vào collection tên oplog. Các secondary node s sao chép collection
oplog ca primary node, dựa vào  thực hin các thao tác trên d liu lưu ở server ca
chính n, làm sao ể d liu trên server ging d liu trên primary node. Vic sao chép
collection oplog và thc hin li thao tác ghi trong diễn ra ồng thi vi nhau, m bo
d liu trên các secondary node giống như dữ liu trên primary node, giúp replica set
có th hoạt ộng và cung cp d liu ngay c khi có node không hoạt ộng
Dưới ây là sơ ồ ặc trưng cho Replication trong MongoDB, trong ng dng
Client luôn luôn tương tác với primary node và primary node này sau tái to d liu
cho secondary node
lOMoARcPSD|27790909
30
Hình 3.3: Sơ ồ mi quan hệ cc thành phần trong Replica Set
Mi node trong trong replica set s gi tín hiu ping (heartbeat) ti các node
khác mi 2 giây. Nếu mt node không có tín hiu ping tr v trong vòng 10 giây, các
node khác s ánh dấu node  là không truy cập ược. Trong trường hp , mt
secondary node bt kì s tiến hành t chc cuc bình chọn ể các node có th chn ra
mt secondary node tr thành primary node mi.
Cu hình ca mt replica set khuyến ngh ti thiu nên có 3 node ph trách
cha d liu: mt primary node và hai secondary node. Trong mt s trường hp,
chng hn replica set có hai (02) node, mt primary node và mt secondary node, có
th thêm một mongod ng vai tr arbiter node. Arbiter node này không cha d liu
mà ch tham gia bình chọn ể phá thế hòa giúp chn ra node nào là primary node.
3.3.3. Các bước thiết lp mt replica set
Các bước sau ây sẽ mô t cách to ra replica set gm 3 node t 3 mongod có
sẵn, trường hp không cn xác thc
Bước 1: Khởi ộng tng server mongod ca replica set theo cú pháp sau:
mongod --replSet "rs0" --bind_ip localhost,<hostname| ịa chỉ ip >
Trong mục <hostname| ịa ch ip > ch nh tên min và/hoặc ịa ch IP ca
mongod mà các máy khách t xa (bao gm c các mongod khác trong cùng replica
set) có th kết ni và s dng.
Bước 2: Kết ni mongosh ti mt trong các node mongod
lOMoARcPSD|27790909
Bước 3: Khi to replica set. Trong mongosh chy phương thức rs.initiate().
Thiết lập ối s ca phương thức theo mu như sau:
rs.initiate( { _id
: "rs0",
members: [
{ _id: 0, host: "mongodb0.example.net:27017" },
{ _id: 1, host: "mongodb1.example.net:27017" },
{ _id: 2, host: "mongodb2.example.net:27017" }
]})
Khi MongoDB sẽ khi to ra mt replica set dùng các giá tr ã thiết lp
Bước 4: Xem các thông s cài t ca replica set thông qua lnh rs.conf()
Bước 5: Kim tra trng thái replica set hin ti thông qua lnh rs.status()
3.4. Phân tán d liu
3.4.1. Gii thiu v Sharding
Sharding là một phương thức dùng ể phân phi d liu trên nhiu máy khác
nhau. MongoDB s dụng sharding ể h tr trin khai các ng dng có các tp d liu
rt ln và có các hot ộng trên d liu mà cần thông lượng cao, h tr horizontal
scaling (m rng theo chiu ngang) giúp tài nguyên h thng bt kp yêu cu kh năng
x lý bng cách phân chia tp d liu h thng và ti trên nhiu y ch khác nhau,
thêm các máy ch b sung ể tăng dung lưng theo yêu cu.
3.4.2. Mt s ịnh nghĩa
3.4.2.1. Sharded Cluster
Mt sharded cluster trong MongoDB cha các thành phn sau:
- Shard: mi shard cha mt tp hp con ca d liệu ược chia nh. Mi shard có
th ược triển khai cài ặt như một tp bn sao ca d liu gc (replica set)
- Mongos: ng vai tr query router, là lớp interface trung gian gia các ng
dng bên máy khách và sharded cluster.
- Config servers: thiết lp cu hình máy ch lưu trữ các thông tin metadata và
các cài ặt cho cluster
lOMoARcPSD|27790909
32
MongoDB phân oạn d liu ti mức ộ collection, phân phi d liu ca
collection trên các shard khác nhau trong cluster.
Hình 3.4: Sơ ồ mi quan hệ cc thành phần trong Sharded Cluster
3.4.2.2. Shard Key và Chunk
Shard Key: MongoDB s dụng shard key ể phân phi document ca collection
trên các shard. Giá tr ca shard key bao gm giá tr ca một trường hoc nhiều trường
d liu trong các document. Khi phân mnh mt collection ra nhiu shard cn tiến
hành chn các shard key. Giá tr shard key ca mt document s quyết nh cách nó s
ược phân oạn như thế nào trên các shard khác nhau
Chỉ số Shard Key: Để phân oạn mt collection lên các shard khác nhau,
collection phải có mt ch s (index) bt u bng giá tr shard key. Khi phân oạn mt
collection trng, MongoDB s h tr to ch s nếu collection chưa c chỉ s phù
hp cho shard key. Vic la chn khóa shard key ảnh hưởng ến hiu sut, hiu qu
kh năng mở rng ca mt sharded cluster
Chunk: MongoDB phân d liu trong shard thành các các chunk. Mi chunk
có khong gii hn giá tr da trên shard key
3.4.2.3. Collection ược chia nh và không ược chia nh
Một cơ sở d liu có th có mt hn hợp các collection ược phân oạn
collection không ược phân oạn. Các collection ã ược phân oạn s ược chia vùng và
phân phối trên các shard trong cluster. collection không ược phân oạn ược lưu trữ trên
shard chính. Mỗi cơ sở d liu có mt shard chính ca riêng nó.
lOMoARcPSD|27790909
3.4.3. Phương pháp Sharding
3.4.3.1. Sharding theo giá tr băm (Hashed Sharding)
Hashed Sharding liên quan ến vic tính toán một hàm băm dựa trên giá tr ca
trường shard key. Sau khi tính toán các giá tr ca shard key và c ược mt tp hp
các giá tr băm, mỗi chunk ược gán mt khong giá tr da trên các giá tr m . Khi
các shard key có th có giá tr sát nhau, nhưng các giá trị băm sau khi tính toán ca
chúng s cách nhau dn ến shard key s không nm trên cùng mt chunk. Phân phi
d liu da trên các giá tr băm tạo iều kin phân phi d liệu ồng ều hơn, ặc bit là
trong các tp d liệu mà shard key thay ổi theo một hàm ơn iệu.
Tuy nhiên phân phi d liu kiểu hàm băm khiến cho vic truy xut và thao tác
d liu da theo các khong giá tr ca shard key có kh ng sẽ nhm ti nhiu shard
thay vì mt shard nhất ịnh, do  việc x lý có th din ra trên quy mô cluster liên quan
ến nhiu shard thay vì ch mt shard nhất nh. 3.4.3.2. Sharding theo khoảng giá trị
(Ranged Sharding)
Sharding theo khong giá tr là phân chia d liu thành các khong giá tr da
trên chính các giá tr ca shard key. Mỗi chunk ược gán mt phm vi cha giá tr da
trên các giá tr ca shard key. Khi , các shard key có giá tr sát nhau có nhiu kh
năng nm trên cùng mt chunk, cho phép vic truy xut và thao tác d liu da theo
các khong giá tr ca shard key s ch nhm ti mt shard nhất ịnh
Hiu qu ca Ranged Sharding ph thuc vào giá tr shard key ưc chn. H
thông các shard key không ược t chc cn thn có th khiến vic phân phi d liu
không ồng ều, dn ến không tn dụng ưc mt s li ích ca vic sharding hoc có th
gây ra tc nghn khi x lý d liu
3.4.4. Zone trong Sharded Cluster
Zone có th h tr vic khoanh vùng d liu cho các shared cluster mà các
phân oạn  tồn ti trên nhiu trung tâm d liu khác nhau. Trong các cluster phân
oạn, có th to các vùng (zone) chứa các phân oạn d liu da trên shard key. Mi
zone bao gm mt hoc nhiu khong giá tr shard key. Đồng thi, zone có th liên
kết vi mt hoc nhiu shard trong cluster. Mt shard có th liên kết vi mt hay
lOMoARcPSD|27790909
34
nhiu zone. Trong mt cluster, MongoDB ch di chuyn các chunk cha trong mt
zone ến các shard ược liên kết với zone .
3.4.5. Cách trin khai mt Sharded Cluster
Mi thành phn trong sharded cluster phi m bo có th kết ni vi tt c các
thành phn khác trong cluster, bao gm tt c các shard và config server. Quy trình
tổng quát ể trin khai mt Sharded Cluster gồm các bưc sau: To config server
replica set, To các shard replica set, Khởi ộng mongos ể khởi ộng Sharded
Cluster, Kết ni vi Sharded Cluster, và Phân mnh mt Collection
3.4.5.1. To config server replica
Bước 1: Vi mi mt mongod, tiến hành thiết lp các giá tr cài ặt mongod
thông qua file configuaration hoc qua câu lnh command line mongod --configsvr
--replSet <replica set name> --dbpath <path> --bind_ip
localhost,<hostname(s)|ip address(es)>
Bước 2: Kết ni mongosh ti mt trong các config server
mongosh --host <hostname> --port <port>
Bước 3: Khi chy replica set. Trong mongosh, chy phương thức rs.initiate()
rs.initiate() nhận ối s là các thông s cài ặt replica set. Các thông s gm:
- _id: tên ịnh danh ca replica set (ly t replication.replSetName hoc replSet)
- configsvr: ể giá tr true
- members: mng cha các thành phn mongod ca replica set
3.4.5.2. To các shard replica
Khi trin khai sharded cluster trong thc tế, dùng replica set vi ít nht 3 thành
phn mongod
Bước 1: Khởi ộng tng shard. Thiết lp các thông s khởi ộng ca mongod
thông qua file config hoc câu lnh command line mongod --shardsvr --replSet
<replSetname> --dbpath <path> --bind_ip
localhost,<hostname(s)|ip address(es)>
Bước 2: Kết ni mongosh ti một trong các shard ã khởi ộng mongosh --
host <hostname> --port <port>
lOMoARcPSD|27790909
Bước 3: Khi to replica set. Trong mongosh, chy phương thc rs.initiate()
rs.initiate() nhận ối s là các thông s cài ặt replica set. Các thông s gm:
- _id: tên ịnh danh replica set (ly t replication.replSetName hoc replSet)
- members: mng cha các thành phn mongod ca replica set
3.4.5.3. Khởi ộng mongos ể khởi ng Sharded Cluster
Khởi ộng mongos kèm theo thiết lp các thông s khởi ộng ca mongod
thông qua file config hoc câu lnh command line mongos
--configdb
<configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,cfg3.example
.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>
3.4.5.4. Kết ni vi Sharded Cluster
Kết ni mongosh ti mongos va to, ch rõ mongos chy trên host và port nào
mongosh --host <hostname> --port <port>
3.4.5.5. Thêm shard vào cluster
Trong một phiên mongosh ang kết ni ti mongos, dùng phương thức
sh.addShard() thêm shard vào cluster sh.addShard( "<replSetName>/s1-
mongo1.example.net:27018,s1-
mongo2.example.net:27018,s1-mongo3.example.net:27018")
3.4.5.6. Phân mnh mt Collection
Để phân mnh mt collection, kết ni mongosh tới mongos và dùng phương
thc sh.shardCollection().C 2 phương pháp phân mảnh mt collection:
- Sharding theo giá tr m (hashed Sharding):
sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed"
} )
- Sharding theo khong giá tr (Ranged Sharding):
sh.shardCollection("<database>.<collection>", { <shard key field> : 1, ... } )
3.5. Sao lưu và khôi phục
Các mongodump và mongorestore tn dng vic xut d liệu BSON to bn
sao lưu các triển khai cơ sở d liu nh. Do mongodump và mongorestore hoạt ộng
lOMoARcPSD|27790909
36
bng cách tương tác vi mt phiên bản mongod ang chạy, chúng có th ảnh hưởng ến
hiu sut ca cơ sở d liệu ang chạy. S dụng sao lưu thay thế như Filesystem
Snapshots hoc MongoDB Cloud Manager nếu tác ộng hiu sut ca mongodump và
mongorestore là không th chp nhn.
3.5.1. Sao lưu cơ sở d liu vi mongdump
3.5.1.1. To bản sao lưu cho mongod chy trên local
Loại trừ cơ sở dữ liệu cục bộ: mongodump loi tr ni dung ca cơ sở d liu
cc b trong ầu ra ca nó.
Quyền truy cp bắt buộc: phi c c quyn cấp hành ộng tìm kiếm cho mi
sở d liệu ể sao lưu. Vai tr sao lưu tích hợp cung cấp các c quyn cn thiết ể thc
hin sao lưu bất k và tt c các cơ sở d liu.
Các mongodump sao lưu dữ liu bng cách kết ni với mongod ang chạy. Tin
ích này có th to bn sao lưu cho toàn bộ máy ch, cơ sở d liu hoc collection
hoc có th s dng truy vấn ể sao lưu một phn ca collection Cc
thao tc mongodump cơ bn:
- Khi chy mongodump mà không có bt k i s nào, lnh s tiến hành kết ni
vi MongoDB trên h thng cc b (ví d: localhost) trên cng 27017 và to
bản sao lưu cơ sở d liệu c tên là dump / trong thư mục hin ti.
- th dùng i s --host--port ch ra MongoDB nên kết ni ti.
- Để tùy chnh thư mục ầu ra, s dng i s --out hoc -o
- Nếu ch muốn sao lưu một phần cơ sở d liu, s dụng các ối s --db -
collection ch ra cơ s d liu hay collection nào muốn sao lưu
Ví d: mongodump --username=uit --password=uit1 -
authenticationDatabase=admin --db=rangerShop --out=D:\backup
lOMoARcPSD|27790909
-
To bản sao lưu bng Oplog:
Các --oplogy chn vi mongodump thu thp các mc oplog và cho phép thc
hin sao lưu trên cơ sở d liu trc tiếp. Nếu sau  khôi phục cơ sở d liu t bn sao
lưuy, cơ sở d liu s giống như khi quá trnh sao lưu hoàn tất. Vi --oplog,
mongodump sao chép tt c d liu t sở d liu nguồn cũng như tất c các mc
oplog t ầu ến cuối quy trnh sao lưu. Hoạt ộng này kết hp vi mongorestore -
oplogReplay cho phép khôi phc bản sao lưu phản ánh thời iểm c th tương ứng vi
thi iểm mongodump hoàn thành to tp xut.
3.5.1.2. To bản sao lưu từ các phiên bn Non-Local mongod
Các --host và --port cho mongodump cho phép bn kết nối và sao lưu host từ
xa, như ví dụ sau: “mongodump --host=mongodb1.example.net --port=3017 -
username=user --password="pass" --out=/opt/backup/mongodump-2013-10-24”
Bt c lnh mongodump s dng s liên quan ến phân quyn username
password trên database
3.5.2. Khôi phc cơ sở d liu vi mongorestore
Để khôi phc d liu mt trin khai MongoDB có kim soát truy cp, cn có
role cung cấp các ặc quyn cn thiết ể khôi phc d liu t các bản sao lưu nếu d liu
không bao gm d liu thu thp system.profile và chy mongorestore không có
oplogReplay.
Nếu d liệu sao lưu bao gồm d liu thu thp system.profile hoc chy vi
oplogReplay và cơ sở d liệu ích không chứa tp hp system.profile thì cn phi có
các ặc quyn sau:
- Mongorestore c gng to collection mặc dù chương trnh không thực s khôi
phc tài liệu system.profile. Do , người dùng cn các ặc quyn b sung ể thc
hiện các hành ộng createCollection và convertToCapped trên system.profile
cho cơ sở d liu.
lOMoARcPSD|27790909
38
- C hai vai trò tích hợp dbAdmin và dbAdminAnyDatabase ều cung cp các c
quyn b sung.
3.5.2.1. Các thao tác cơ bản vi mongorestore
Các mongorestore khôi phc bản sao lưu nhị phân ưc to bi mongodump.
Theo mặc ịnh, mongorestore tìm kiếm mt bản sao lưu cơ s d liệu trong thư mục
dump / directory. Các mongorestore tin ích khôi phc d liu bng cách kết ni trc
tiếp với mongod ang chạy, mongorestore có th khôi phc toàn b bản sao lưu cơ sở
d liu hoc mt tp hp con ca bản sao lưu.
Để s dng mongorestore” giao tiếp vi mongod” s dng lệnh dưới ây
“mongorestore --port=<port number> <path to the backup>”
3.6. Nhp và xut d liu
MongoDB Compass h tr nhp và xut d liu JSON ln CSV
3.6.1. Nhp d liu vào Collection
Mt s hn chế khi nhp d liu thông qua MongoDB Compass bao gm chc
năng nhập d liệu không ược h tr phiên bn Read Only ca MongoDB Compass,
và chức năng y s không hoạt ộng nếu ang kết nối ến Data Lake
Trước khi nhp data vào MongoDB Compass phi chc rng d liệu ã ược nh
dạng ng n Compass hiểu ược
- Với ịnh dng file JSON: Mi dòng là mt d liu thông tin. Du phẩy ngăn
cách d liu trong mt mng (không ngt dòng gia các phn t trong mng)
- Đối với ịnh dng file CSV: Dng ầu tiên ca file là tên ct phải ược ngăn cách
bng các du phy, nhng dòng tiếp theo là các giá tr ca ct theo th t.
Quy trình:
- Bước 1: Kết ni vi b tài liu mà bn mun nhp d liu
- Bước 2: Điều hướng ến b tài liu mun nhp
- Bước 3: Chọn “Add Data” và chọn “Import File”
lOMoARcPSD|27790909
-
Hình 3.5: Click “Add Data” chọn Import File
Bước 4: Chn v trí ca tệp trong Import File”, chọn loi tp thích hp vi tp
mun thêm vào bao gm JSON hoc CSV
Hình 3.6: Chọn vị trí tệp và loại tệp cho loại tệp JSON
Gi s nếu như chọn loi tp là CSV thì s có th ch nh các loại trường ể nhp
và loi d liu ca các trường . Kiểu d liu cho tt c các trường mặc ịnh là kiu
chui. Để loi tr một trường khi tp CSV thì hãy b chn hp checkbox bên cnh.
Để chn loi cho một trường thì s dng drop-down menu phía dưới trường .
lOMoARcPSD|27790909
40
Hình 3.7: Chọn trường mun thêm và chọn loại dữ liệu cho trường cho loại tệp CSV
- Bước 5: Định cu hình các tùy chn nhp trong “Options”
Nếu ang nhập tp CSV có th chn cách phân tách d liu ca mình. Đối vi c
nhp tp JSON và CSV, có th chuyển ổi “bỏ qua chui trống” (Ignore empty
Strings) và “dừng khi có lỗi” (Stop on errors)
Hình 3.8: Chọn cc options nâng cao cho loại tệp CSV
- Bước 6: Chn Import
lOMoARcPSD|27790909
-
Hình 3.9: Màn hình hiển thị cc dữ liệu file JSON (bên tri), CSV (bên phi) ã nhp vào
3.6.2. Xut d liu t mt Collection
MongoDB Compass có th xut d liu dưới dng tp JSON hoc CSV. Ch
nh b lc hoặc ường dn tng hợp cho nơi chứa d liu ca mình, Compass s xut
các tài liu phù hp vi kết qu truy vn hoặc ường dn ã chỉ nh. Cn lưu ý là
không th nh hình li tài liệu ã xuất bng tài liu d án.
Để xut toàn b b sưu tập sang mt tp:
- Bước 1: Kết ni vi trin khai có cha Collection mun truy xut
Bước 2: Nhp vào Collection trên thanh menu và chn “Export Collection”
Hình 3.10: Chọn Export Collection Compass
s xut hin hp thoại như sau:
lOMoARcPSD|27790909
42
Hình 3.11: Hộp thoại chọn la cách xut dữ liệu bng cách query filter hay xut toàn bộ
Hp thoi hin th truy vn mặc ịnh s ược s dụng ể xut d liu. Nếu không
có chnh sa câu truy vn, thao tác s tr v tt c các tài liu trong collection. Nếu
mun b qua b lc và xut toàn b d liu thì chọn “Export Full Collection” và nhấp
vào “Select Fields”
- Bước 3: Chọn các trường tài liệu ưa vào tệp s xut. Thêm các trường khác
bng nút Add Field nếu trường không ược chương trnh t ng phát hin.
Hình 3.12: Chọn thêm trường ể xut hoặc hủy bỏ những trường không mun xut ra
- Bước 5: Chn loi tp và v trí xut: Trong Chn loi tp xut, chn JSON
hoc CSV. Nếu chn JSON, d liu s ược xut sang tệp ích dưới dng mt
mng. Sau chọn “Select Output, chọn nơi xuất tp sang.
lOMoARcPSD|27790909
-
Hình 3.13: Chọn Browse ể chọn vị trí ích mun xut file ra, sau ó nhn Export ể tiến hành xut
- Bước 6: Nhp vào Export. Thanh tiến trình hin th trng thái ca quá trình
xut. Nếu xy ra li, thanh tiến trình s chuyển sang màu ỏ và thông báo li
xut hin trong hp thoi. Sau khi xut thành công, hp thoi s ng.
3.7. Mt s tính năng khác trên MongoDB
Change stream: Change stream cho phép các ng dng tiếp cn thông tin v
các thay ổi trong d liu theo thi gian thc thay vì phi theo dõi oplog. Các ng dng
kết ni với cơ sở d liu MongoDB có th dùng change strams ể c ược các thay ổi v
d liệu lưu trên một collection ơn l, một cơ sở d liu hay nguyên c d
án, và dựa trên  c thể ngay lp tc có các thao tác phn ng li với các thay ổi .
Time Series: Time series data (d liu theo thi gian) là mt chui các d liu
thay ổi theo thi gian, t s thayi ca d liu có th phân tích, nghiên cứu, ưa ra các
nhn xét v d liu, ngoài ra còn giúp ci thin vic truy vn và tối ưu vùng nhớ lưu
trữ d liu và các index. Collection time series có th thc hiện các thao tác như thêm
và truy vn như các collection bnh thường
Thực hiện một transaction trên nhiều document: Trong MongoDB, mt
thao tác lên mt document có tính nguyên tử. Tuy nhiên, ối với các trường hp cn
tính nguyên t trên thao tác ọc và ghi cùng lúc trên nhiu document (có th trên mt
hoc nhiu collection), MongoDB h tr thc hin transaction trên nhiu document.
lOMoARcPSD|27790909
44
CHƯƠNG 4: DEMO TÍNH NĂNG TRÊN MONGODB
4.1. Kch bn demo
To ng dng website bán qun áo rangerShop bng cách to và lưu dữ liu trên
Sharded Cluster ca MongoDB, cung cp các tính năng cơ bản truy xut, thêm, xóa,
sửa người dùng, sn phẩm, ơn hàng. Backend s dng NodeJS và framework
ExpressJS, truy vấn cơ sở d liu s dng thư viện Mongoose. Frontend s dng
ReactJS. Tiến hành sao lưu, khôi phục, xut và nhp d liu t file JSON
Bng 4.1: Thiết lp sharded cluster MongoDB trên localhost
Các thành phần
Tên replica set
Hostname, port mongod ca replica set
Config Server
Replica Set
config_repl
localhost:28041, localhost:28042,
localhost:28043
Shard Replica Set (1)
shard_repl
localhost:28081, localhost:28082,
localhost:28083
Shard Replica Set (2)
shard2_repl
localhost:29081, localhost:29082,
localhost:29083
Mongos
localhost:27017
Bng 4.2: Tạo người dùng và phân quyền
Host
Username
Role trong database admin
localhost:28081
shard_repl_admin
userAdminAnyDatabase,
readWriteAnyDatabase, clusterAdmin
adminRangerShopShard1
readWriteAnyDatabase
localhost:29081
shard2_repl_admin
userAdminAnyDatabase,
readWriteAnyDatabase, clusterAdmin
adminRangerShopShard2
readWriteAnyDatabase
localhost:27017
vunguyen
userAdminAnyDatabase,
readWriteAnyDatabase, clusterAdmin
nguoidung
readWriteAnyDatabase
lOMoARcPSD| 27790909
45
Database to thêm trong Sharded Cluster: rangerShop
Bng 4.3: Các collection kèm các thông tin trong database rangerShop
*Trường dữ liệu in nghiêng không bắt buộc phi có trong collection
Collection
Shard Keys
Kiểu dữ liệu trong collection
Trưng
dữ liệu
Kiểu BSON và yêu cầu dữ liệu
users
{_id:1}
name
string
email
string
password
string
isAdmin
bool
products
{_id:”hashed”}
name
string
slug
string
image
string
brand
string
category
string
description
string
price
number, minimum: 0
countInStock
number, minimum: 0
rating
number, minimum: 0
numReviews
number, minimum: 0
reviews
array, cha các object
Object trong mng có các thuc tính
sau: name (string), comment
(string), rating (number)
orders
{_id:”hashed”}
orderItems
array, cha các object
Object trong mng có thuc tính:
name (string), slug (string), image
(string), price (number,
minimum:0), quantity (number,
minimum:0), product (objectId)
lOMoARcPSD|27790909
46
shippingAddress
object; có các thuc tính sau:
fullName (string), address (string),
city (string), postalCode (string),
country (string), location (object)
location cha các thuc tính: lat
(number), lng (number), address
(string), name (string), vicinity
(string), googleAddressId (string)
paymentMethod
string
paymentResult
object; có các thuc tính sau:
id(string), status(string),
update_time(string)
itemsPrice
number, minimum: 0
shippingPrice
number, minimum: 0
taxPrice
number, minimum: 0
totalPrice
number, minimum: 0
user
objectId
isDelivered
bool
deliveredAt
date
4.2. Các chức năng sẽ demo
- To sharded cluster và thiết lp xác thc, to tài khon, phân quyn
- Tạo cơ sở d liu, thêm xác thc d liu
- Nhp d liu t file JSON
- Thiết kế ng dng (truy xut, thêm, xóa, sa các collection users, products,
orders)
- Xut và backup d liu
4.3. Kết qu demo
Link Demo:
lOMoARcPSD|27790909
47
https://drive.google.com/file/d/1PM7t07qmx4JeJPenqGWfoaYh6uFThohR/view?usp
=sharing
Chi tiết các collection và document ca cơ sở d liu rangerShop trong sharded
cluster:
Hình 4.1: Collection products trong cơ sở dữ liệu rangerShop
Hình 4.2: Collection orders và users trong cơ sở dữ liệu rangerShop
S dụng phương thức rs.status() ể xem thông tin sharded cluster và các shard ược
kết ni trong sharded cluster
lOMoARcPSD|27790909
48
Hình 4.3: Sharded Cluster gồm 2 shard là 2 replica set có tên ịnh danh shard_repl và shard2_repl
Hình 4.4: Sharded Cluster chứa cc collection ã ưc phân tán theo index là orders, products, users
Dùng tính năng xác thực d liu (validation) trên các collection bng JSON
schema giúp cu trúc d liu ược thng nht. Kim tra thông tin xác thc mô hình d
liu hông qua tab Validation ca tng collection trong MonggoDB Compass
lOMoARcPSD|27790909
49
Hình 4.5: Quy ịnh xc thc dữ liệu trong cc collection trong cơ sở dữ liệu rangerShop
Dùng phương thức db.getUSers() ly thông tin người dùng và phân quyn trên
mongos và trên các shard thành phn
lOMoARcPSD|27790909
50
Hình 4.6: Kiểm tra thông tin người dùng và phân quyền trên mongos và trên cc shard thành phần
Xây dng backend ng dng website rangerShop kết ni với cơ sở d liu. Kết
ni backend vi shard cluster thông qua URI kèm thông tin xác thc
lOMoARcPSD|27790909
51
Hình 4.7: Dùng mongoose.connect() kết ni backend với cơ sở dữ liệu rangerShop kèm thông tin xc thc
Lp trình backend (productRoutes.js) ly thông tin sn phm t MongoDB cho
ra kết qu giống như khi chạy lnh truy vn trong MongoShell. Frontend ly d liu
hiển th thông tin lên website
Hình 4.8: Thiết kế phương thức GET trong productRouter ly toàn bộ thông tin sn phẩm trong cơ sở dữ liệu
lOMoARcPSD|27790909
52
Hình 4.9: Kết qu phn hồi của backend khi yêu cầu ưa tt thông tin sn phẩm trong cơ sở dữ liệu, so snh với
kết qu truy vần khi dùng phương thức trong Mongosh
Hình 4.10: Hiển thị sn phẩm lên frontend
S dng tính năng Aggregation Operations ca MongoDB: Lp trình backend
(file productRoutes.js ) ly thông tin tng quan v s lượng và tng tin t các ơn hàng
bng cách dùng Aggregation Operation ca MongoDB
lOMoARcPSD|27790909
53
Hình 4.11: Thiết kế phương thức GET trong orderRouter ly thông tin tổng quan dữ liệu trong collection orders
Hình 4.12: S dụng phương thức db.collections.aggregate() ể xut thông tin s ng ơn hàng và tổng gi trị tính
ưc trong collection orders
Hình 4.13: Hiển thị cc thông s lên giao diện website của admin
Sao lưu và khôi phục d liu ca cơ s d liu rangerShop
lOMoARcPSD|27790909
54
Hình 4.14: Dùng mongodump sao lưu dữ liệu của cơ sở dữ liệu rangerShop
Hình 4.15: Cc file sao lưu cơ sở dữ liệu rangerShop ưc tạo ra
Khôi phc li cơ sở d liu rangerShop, ặt tên mi là rangerShopBackup.
Toàn b d liu và các xác thc d liệu ược khôi phc.
Hình 4.16: Dùng mongorestore khôi phục lại cơ sở dữ liệu rangerShop từ bn sao lưu
lOMoARcPSD|27790909
55
Hình 4.17: Kết qu khôi phục lại cơ sở dữ liệu bng mongorestore
Xut d liu ca cơ s d liu rangerShop ra file JSON
Hình 4.18: File JSON của cc collection trong cơ sở dữ liệu rangerShop
CHƯƠNG 5: KT LUẬN VÀ HƯỚNG PHÁT TRIN
5.1. Kết lun
5.1.1. Ưu iểm
- Đã nêu các thông tin cơ bản v MongoDB
- Đề cp các tính năng cơ bản: mô hình và cu trúc d liệu, các phương thức
lOMoARcPSD|27790909
56
CRUD trong MongoDB, tính năng Aggregation Operation
- Tìm hiểu ược mt s nh năng nâng cao: Phân quyn xác thc, bo mt,
Index, Replica Set, Sharded Cluster, sao lưu và khôi phục, nhp xut d liu
- S dụng các tính năng tm hiểu ưc trên mt ng dụng trên môi trường localhost
5.1.2. Nhược iểm
- Chưa tm hiểu các phương thức bo mật khác như x509, TLS/SSL. Chưa i sâu vào
mt s tính năng trên MongoDB như change streams, time series, transactions
- Demo cn chnh sa v t chc d liu và hoàn thiện hơn về giao din
- Chưa i sâu vào các phương pháp sao lưu như Filesystem Snapshots hoc
MongoDB Cloud Manager
5.2. Hướng phát trin
- Khc phục các nhược iểm cp trên trên
- Tiến hành trin khai sharded cluster trên các máy ch khác nhau thay vì t chc
trên local
- Nghiên cứu cài ặt index ể tối ưu xử lý khi phân tán d liu cho các shard trong
sharded cluster.
TÀI LIỆU THAM KHẢO
[1] MongoDB Manual: https://www.mongodb.com/docs/manual/ [2] Demo:
https://drive.google.com/file/d/1PM7t07qmx4JeJPenqGWfoaYh6uFThohR/view?usp
=sharing
| 1/58

Preview text:

lOMoARcPSD| 27790909 lOMoAR cPSD| 27790909 BÁO CÁO TÓM TẮT
1. Tiêu ề báo cáo: TÌM HIỂU HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB
2. Danh sách thành viên MSSV Họ tên Ghi chú 20521042 Nguyễn Trí Vũ 20520031 Nguyễn Thanh Tuấn 20520006 Hồ Cảnh Công
3. Nội dung chi tiết
Nội dung 1: Giới thiệu về MongoDB
+ Đề mục 1: Giới thiệu sơ lược về MongoDB
+ Đề mục 2: Một số khái niệm cơ bản trong MongoDB
Nội dung 2: Các tính năng cơ bản
+ Đề mục 1: Các mô hình dữ liệu
+ Đề mục 2: Các phương thức CRUD trong MongoDB
+ Đề mục 3: Aggregation Operation
Nội dung 3: Các tính năng nâng cao
+ Đề mục 1: Phân quyền, xác thực, bảo mật trong MongoDB + Đề mục 2: Index + Đề mục 3: Replica Set
+ Đề mục 4: Phân tán dữ liệu
+ Đề mục 5: Sao lưu và khôi phục
+ Đề mục 6: Nhập xuất dữ liệu
+ Đề mục 7: Một số tính năng khác trên MongoDB
Nội dung 4: Demo tính năng trên MongoDB
+ Đề mục 1: Kịch bản demo
+ Đề mục 2: Các chức năng sẽ demo
+ Đề mục 3: Kết quả demo
Nội dung 5: Kết luận và hướng phát triển lOMoARcPSD| 27790909
4. Phân công công việc MSSV Họ tên
Nội dung ược phân công 20521042 Nguyễn Trí Vũ
Nội dung 1 mục 1.2, Nội dung
3 mục 3.1 ến 3.4, mục 3.7, Nội
dung 4, Nội dung 5. Tổng hợp nội dung và quay video 20520031 Nguyễn Thanh Tuấn
Nội dung 2 (tất cả) , Nội dung 4 20520006 Hồ Cảnh Công
Nội dung 1 mục 1.1, Nội dung
3 mục 3.5, 3.6, Nội dung 4 lOMoARcPSD| 27790909 MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU VỀ MONGODB ............................................................. 6
1.1. Giới thiệu sơ lược về hệ quản trị CSDL .............................................................. 6
1.2. Một số khái niệm cơ bản trong MongoDB .......................................................... 7
CHƯƠNG 2: CÁC TÍNH NĂNG CƠ BẢN ................................................................ 8
2.1. Các mô hình dữ liệu ........................................................................................... 8
2.1.1. Giới thiệu về mô hình dữ liệu ........................................................................ 8
2.1.2. Tính mềm dẻo ................................................................................................ 8
2.1.3. Các cấu trúc của mô hình dữ liệu................................................................... 9
2.1.4. Xác thực mô hình dữ liệu ............................................................................. 10
2.1.5. Các mẫu thiết kế của mô hình dữ liệu.......................................................... 11
2.2. Các phương thức CRUD trong MongoDB .................................................... 14
2.2.1. Thêm dữ liệu ................................................................................................ 14
2.2.2. Truy vấn dữ liệu ........................................................................................... 15
2.2.3. Cập nhật dữ liệu ........................................................................................... 16
2.2.4. Xóa dữ liệu ................................................................................................... 18
2.3. Aggregation Operation .................................................................................... 19
2.3.1. Aggregation Pipeline ................................................................................... 20
2.3.2. Map-Reduce ................................................................................................. 20
CHƯƠNG 3: CÁC TÍNH NĂNG NÂNG CAO ........................................................ 21
3.1. Phân quyên, xác thực, bảo mật trong MongoDB ......................................... 21
3.1.1. Xác thực các kết nối của người dùng (Authentication) ............................... 22
3.1.2. Phân quyền và kiểm soát người dùng truy cập thông qua các role ............. 24
3.1.3. Mã hóa truyền dữ liệu (TLS/SSL) ............................................................... 27
3.1.4. Mã hóa và bảo vệ dữ liệu ............................................................................. 27
3.1.5. Kiểm tra (Auditing) ...................................................................................... 27
3.2. Index................................................................................................................... 28
3.2.1. Giới thiệu về Index ...................................................................................... 28
3.2.2. Tạo một index .............................................................................................. 28
3.2.3. Sử dụng Index ể hỗ trợ truy vấn .................................................................. 28
3.3. Replica Set ........................................................................................................ 29
3.3.1. Giới thiệu về replica set ............................................................................... 29
3.3.2. Cấu trúc của một replica set ......................................................................... 29
3.3.3. Các bước thiết lập một replica set ................................................................ 30 2 lOMoARcPSD| 27790909
3.4. Phân tán dữ liệu ............................................................................................... 31
3.4.1. Giới thiệu về Sharding ................................................................................. 31
3.4.2. Một số ịnh nghĩa .......................................................................................... 31
3.4.3. Phương pháp Sharding ................................................................................. 33
3.4.4. Zone trong Sharded Cluster ......................................................................... 33
3.4.5. Cách triển khai một Sharded Cluster ........................................................... 34
3.5. Sao lưu và khôi phục ........................................................................................ 35
3.5.1. Sao lưu cơ sở dữ liệu với mongdump .......................................................... 36
3.5.2. Khôi phục cơ sở dữ liệu với mongorestore .................................................. 37
3.6. Nhập và xuất dữ liệu......................................................................................... 38
3.6.1. Nhập dữ liệu vào Collection ........................................................................ 38
3.6.2. Xuất dữ liệu từ một Collection .................................................................... 41
3.7. Một số tính năng khác trên MongoDB .......................................................... 43
CHƯƠNG 4: DEMO TÍNH NĂNG TRÊN MONGODB ........................................ 44
4.1. Kịch bản demo ................................................................................................. 44
4.2. Các chức năng sẽ demo ................................................................................... 46
4.3. Kết quả demo ................................................................................................... 46
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ......................................... 55
5.1. Kết luận............................................................................................................. 55
5.1.1. Ưu iểm ......................................................................................................... 55
5.1.2. Nhược iểm .................................................................................................... 56
5.2. Hướng phát triển ............................................................................................. 56 DANH MỤC BẢNG
Bảng 4.1: Thiết lập sharded cluster MongoDB trên localhost ..................................... 41
Bảng 4.2: Tạo người dùng và phân quyền ....................................................................
41 Bảng 4.3: Các collection kèm các thông tin trong database rangerShop ..................... 42 DANH MỤC HÌNH VẼ
Hình 2.1: Ví dụ về tham chiếu trong mô hình dữ liệu của MongoDB ........................... 9
Hình 2.2: Ví dụ thiết lập xác thực bằng JSON schema ................................................ 10 lOMoAR cPSD| 27790909
Hình 2.3: Ví dụ thiết lập xác thực bằng toán tử truy vấn ............................................. 10
Hình 2.4: Ví dụ hệ thống danh mục sách ược mô tả theo cấu trúc cây ...................... 13
Hình 2.5: Dùng phương thức db.collection.insertOne() ể thêm một sinh viên vào
collection students ........................................................................................................ 14
Hình 2.6: Dùng phương thức db.collection.insertMany() ể thêm các sinh viên vào
collection students ........................................................................................................ 14
Hình 2.7: Dùng phương thức db.collection.find() ể lấy toàn bộ thông tin trong
collection students ........................................................................................................ 15
Hình 2.8: Dùng phương thức db.collection.find() ể tìm sinh viên thỏa iều kiện cho
trước .............................................................................................................................. 16
Hình 2.9: Dùng db.collection.updateMany()cập nhật thông tin sinh viên, sau ó kiểm
tra kết quả ..................................................................................................................... 17
Hình 2.10: Dùng db.collection. replaceOne() thay thế thông tin của sinh viên có tên
“uit_sv” ......................................................................................................................... 17
Hình 2.11: Dùng phương thức db.collection.deleteMany() xóa tất cả document trong
Collection ...................................................................................................................... 18
Hình 2.12: Dùng phương thức db.collection.deleteMany() xóa các document trong
Collection theo iều kiện .............................................................................................. 18
Hình 2.13: Dùng phương thức db.collection.deleteOne() xóa document ầu tiên trong
Collection thỏa iều kiện .............................................................................................. 18
Hình 3.1: Bật chế ộ kiểm soát người truy cập của Mongo bằng cách sửa file
mongod.conf ................................................................................................................. 22
Hình 3.2: Sử dụng MongoDB Compass và tiến hành ăng nhập ................................. 23
Hình 3.3: Sơ ồ mối quan hệ các thành phần trong Replica Set .................................. 28
Hình 3.4: Sơ ồ mối quan hệ các thành phần trong Sharded Cluster ........................... 30
Hình 3.5: Click “Add Data” chọn Import File ............................................................. 36
Hình 3.6: Chọn vị trí tệp và loại tệp cho loại tệp JSON ...............................................
37 Hình 3.7: Chọn trường muốn thêm và chọn loại dữ liệu cho trường cho loại tệp CSV 4 lOMoAR cPSD| 27790909
...................................................................................................................................... 37
Hình 3.8: Chọn các options nâng cao cho loại tệp CSV ..............................................
38 Hình 3.9: Màn hình hiển thị các dữ liệu file JSON (bên trái), CSV (bên phải) ã nhập
vào.................................................................................................................................
38 Hình 3.10: Chọn Export Collection
.............................................................................. 39
Hình 3.11: Hộp thoại chọn lựa cách xuất dữ liệu bằng cách query filter hay xuất toàn
bộ .................................................................................................................................. 39
Hình 3.12: Chọn thêm trường ể xuất hoặc hủy bỏ những trường không muốn xuất ra
...................................................................................................................................... 39
Hình 3.13: Chọn Browse ể chọn vị trí ích muốn xuất file ra, sau ó nhấn Export ể
tiến hành xuất ................................................................................................................
40 Hình 4.1: Collection products trong cơ sở dữ liệu rangerShop
.................................... 44
Hình 4.2: Collection orders và users trong cơ sở dữ liệu rangerShop ..........................
44 Hình 4.3: Sharded Cluster gồm 2 shard là 2 replica set có tên ịnh danh shard_repl và
shard2_repl ................................................................................................................... 45
Hình 4.4: Sharded Cluster chứa các collection ã ược phân tán theo index là orders,
products, users .............................................................................................................. 45
Hình 4.5: Quy ịnh xác thực dữ liệu trong các collection trong cơ sở dữ liệu
rangerShop .................................................................................................................... 46
Hình 4.6: Kiểm tra thông tin người dùng và phân quyền trên mongos và trên các shard
thành phần ..................................................................................................................... 47
Hình 4.7: Dùng mongoose.connect() kết nối backend với cơ sở dữ liệu rangerShop
kèm thông tin xác thực ................................................................................................. 48
Hình 4.8: Thiết kế phương thức GET trong productRouter lấy toàn bộ thông tin sản
phẩm trong cơ sở dữ liệu .............................................................................................. 48 lOMoARcPSD| 27790909
Hình 4.9: Kết quả phản hồi của backend khi yêu cầu ưa tất thông tin sản phẩm trong
cơ sở dữ liệu, so sánh với kết quả truy vần khi dùng phương thức trong Mongosh .... 49
Hình 4.10: Hiển thị sản phẩm lên frontend .................................................................. 49
Hình 4.11: Thiết kế phương thức GET trong orderRouter lấy thông tin tổng quan dữ
liệu trong collection orders ........................................................................................... 50
Hình 4.12: Sử dụng phương thức db.collections.aggregate() ể xuất thông tin số lượng
ơn hàng và tổng giá trị tính ược trong collection orders .......................................... 50
Hình 4.13: Hiển thị các thông số lên giao diện website của admin .............................
50 Hình 4.14: Dùng mongodump sao lưu dữ liệu của cơ sở dữ liệu rangerShop ............. 51
Hình 4.15: Các file sao lưu cơ sở dữ liệu rangerShop ược tạo ra .............................. 51
Hình 4.16: Dùng mongorestore khôi phục lại cơ sở dữ liệu rangerShop từ bản sao lưu
...................................................................................................................................... 51
Hình 4.17: Kết quả khôi phục lại cơ sở dữ liệu bằng mongorestore ............................ 52
Hình 4.18: File JSON của các collection trong cơ sở dữ liệu rangerShop ................... 52
CHƯƠNG 1: GIỚI THIỆU VỀ MONGODB
1.1. Giới thiệu sơ lược về hệ quản trị CSDL
MongoDB là một trong những cơ sở dữ liệu NoSQL phổ biến nhất, là một cơ
sở dữ liệu hướng tài liệu có mã nguồn mở. Thuộc loại cơ sở dữ liệu không quan hệ
(NoSQL), MongoDB không dựa trên cấu trúc cơ sở dữ liệu quan hệ giống như bảng
mà sẽ lưu trữ và truy xuất dữ liệu ở dạng document. Định dạng dữ liệu mới mà
MongoDB sử dụng là BSON (khá gần giống với ịnh dạng JSON).
MongoDB ược phát hành vào năm 2009 ược viết bằng ngôn ngữ C++, C++ là
ngôn ngữ gần với ngôn ngữ máy nên dễ dàng hiểu rằng MongoDB có thể tính toán ở
tốc ộ cao hơn hẳn các hệ quản trị cơ sở dữ liệu khác. Đó cũng là lý do mà MongoDB
luôn ược các nhà phát triển ánh giá rất cao.
MongoDB hỗ trợ a nền tảng theo hướng ối tượng dùng lưu trữ dữ liệu có cấu
trúc phức tạp. Không như các hệ quản trị cơ sở dữ liệu khác lưu trữ ở dạng bảng, 6 lOMoARcPSD| 27790909
MongoDB lưu dữ liệu vào collection theo hướng tài liệu JSON. Đây là kiểu dữ liệu
dạng Key-Value truy xuất nhanh và khả năng mở rộng không bị ràng buộc mới tạo
khóa ngoại hay khóa chính.
1.2. Một số khái niệm cơ bản trong MongoDB
Các thành phần cốt lõi tạo nên MongoDB gồm:
- Mongod: tiến trình lõi của MongoDB, nơi lưu trữ và quản lý dữ liệu
- Mongos: controller và query router, dùng cho trường hợp phân tán dữ liệu (sharded cluster)
- Mongosh: giao diện shell ể người dùng có thể tương tác thực hiện lệnh với cơ
sở dữ liệu. Có thể dùng Mongosh ể chạy kiểm tra các lệnh truy vần và thao tác
tùy biến dữ liệu lưu trong cơ sở dữ liệu
Để khởi ộng MongoDB mặc ịnh trên localhost, chạy lệnh mongosh trên
command line. Tiến trình mongod khởi ộng, và mongosh sẽ kết nới với mongod và
chạy trên localhost:27017. Lệnh mongosh tương ương với câu lệnh mongosh
"mongodb://localhost:27017"
Document: Trong MongoDB, một bản ghi ược gọi là một document. Mỗi
document chứa một cặp giá trị gồm trường dữ liệu và giá trị tương ứng của trường ó
trong document. Document về hình thức tương tự như dữ liệu kiểu JSON. Giá trị của
một trường có thể là số, văn bản, mảng, một document khác hoặc một mảng các document.
Collection: MongoDB lưu trữ các document trong collection. Collection trong
MongoDB tương ương với bảng trong mô hình quan hệ. Để tạo một collection mới
trong cơ sở dữ liệu, sử dụng phương thức db.createCollection()
BSON: là một ịnh dạng dữ liệu tuần tự hóa dạng nhị phân ược sử dụng ể lưu
trữ document và thực hiện các cuộc gọi thủ tục từ xa trong MongoDB. Có nhiểu kiểu
dữ liệu BSON, có thể ược sử dụng số hoặc chuỗi ịnh danh ể quy ịnh kiểu dữ liệu cho một ối tượng.
Database (Cơ sở dữ liệu): Một mongod có thể chứa nhiều cơ sở dữ liệu. Một
cơ sở dữ liệu chứa một hoặc nhiều collection. Để chọn một cơ sở dữ liệu và tiến hành lOMoARcPSD| 27790909
các thao tác với dữ liệu với cơ sở dữ liệu ó, trong mongosh dùng lệnh use dữ liệu>.
Để tạo một cơ sở dữ liệu mới trong mongod, trong trường hợp cơ sở dữ liệu
không tồn tại, MongoDB sẽ tự ộng tạo cơ sở dữ liệu mới khi lưu trữ document lần ầu
tiên cho cơ sở dữ liệu ó. Do ó, có thể dùng lệnh use ể chuyển sang cơ sở dữ liệu không
tồn tại và thực hiện thao tác thêm document mới trong collection mới trong mongosh.
MongoDB sẽ tạo cơ sở dữ liệu mới kèm theo collection kèm document ược chỉ ịnh. Ví dụ: use myNewDB
db.myNewCollection1.insertOne( { x: 1 } )
MongoDB Compass: là một giao diện GUI cho phép người dùng tương tác với
mongod một cách trực quan thay vì dùng giao diện commandline. MongoDB
Compass hiển thị các cơ sở dữ liệu, collection, document một cách trực quan, hỗ trợ
truy vấn, thực hiện aggregating function và phân tích dữ liệu MongoDB.
MongoDB Database Tools: là tập hợp các tiện ích dạng command-line ược
thiết lập sẵn, dùng ể thực hiện các thao tác ặc biệt với MongoDB như nhập xuất, sao
lưu, khôi phục dữ liệu (mongodump và mongorestore),…
CHƯƠNG 2: CÁC TÍNH NĂNG CƠ BẢN
2.1. Các mô hình dữ liệu.
2.1.1. Giới thiệu về mô hình dữ liệu
Thách thức chính trong mô hình hóa dữ liệu là cân bằng giữa nhu cầu của ứng
dụng, ặc iểm về hiệu suất của hệ quản trị cơ sở dữ liệu và các mẫu truy xuất dữ liệu.
Khi thiết kế mô hình dữ liệu, cần phải luôn cân nhắc về việc sử dụng dữ liệu trong ứng
dụng (bao gồm các truy vấn, cập nhật và xử lý dữ liệu) cũng như cấu trúc vốn có của chính dữ liệu ó.
2.1.2. Tính mềm dẻo
Khác với các cơ sở dữ liệu SQL, yêu cầu phải xác ịnh và khai báo lược ồ của
bảng trước khi thêm dữ liệu, các Collection của MongoDB không yêu cầu các
document phải có cùng một mô hình dữ liệu: không nhất thiết phải có cùng một nhóm 8 lOMoARcPSD| 27790909
các trường, và kiểu dữ liệu cho một trường cũng có thể khác nhau giữa các document
trong bộ dữ liệu. Để thay ổi cấu trúc của document trong Collection, chỉ cần cập nhật
document theo cấu trúc dữ liệu mới.
Tính linh hoạt này tạo iều kiện thuận lợi cho việc ánh xạ các document tới một
thực thể hoặc một ối tượng. Mỗi document có thể khớp với các trường dữ liệu của
thực thể ược ại diện, ngay cả khi bản ghi có sự thay ổi áng kể so với các document
khác trong Collection. Tuy nhiên trong thực tế, các document trong cùng một
Collection thường có cấu trúc tương tự nhau. Đồng thời, người ta cũng sử dụng các
quy tắc xác thực mô hình dữ liệu ối với quá trình thêm và sửa dữ liệu.
2.1.3. Các cấu trúc của mô hình dữ liệu
Vấn ề quan trọng trong việc thiết kế mô hình dữ liệu cho các ứng dụng sử dụng
MongoDB xoay quanh cấu trúc của các Collection và cách ứng dụng thể hiện mối
quan hệ giữa các dữ liệu.
- Nhúng dữ liệu: MongoDB cho phép nhúng tất cả dữ liệu liên quan trong một
document duy nhất. Dữ liệu ược nhúng thể hiện mối quan hệ giữa các dữ liệu
bằng cách lưu trữ dữ liệu liên quan trong một cấu trúc tài liệu duy nhất.
MongoDB hỗ trợ việc nhúng các cấu trúc dữ liệu vào một trường hoặc mảng
trong document. Các mô hình dữ liệu không “chuẩn hóa” này cho phép
các ứng dụng truy xuất và thao tác dữ liệu liên quan trong một thao tác cơ sở
dữ liệu duy nhất. Ví dụ: { _id: , username: “uit_sv”, contact: { phone: “0123456789”, email: “cntt@uit.edu.vn”, }, access: { class: “VB2”, group: “CNTT” } }
- Tham chiếu: Còn ược gọi là kiến trúc chuẩn hóa của mô hình dữ liệu. Các tham
chiếu lưu trữ các mối quan hệ giữa các dữ liệu bằng cách thêm các liên kết hoặc
tham chiếu giữa các document. Các ứng dụng có thể thông qua các tham chiếu lOMoARcPSD| 27790909
này ể truy cập dữ liệu liên quan. Đây là một dạng mô hình dữ liệu chuẩn hóa. Ở
ví dụ dưới ây, trường “user_id” trong bộ dữ liệu “contact” và “access” ược dùng
ể tham chiếu ến user có liên quan.
Hình 2.1: Ví dụ về tham chiếu trong mô hình dữ liệu của MongoDB
2.1.4. Xác thực mô hình dữ liệu
2.1.4.1. Thiết lập xác thực bằng JSON schema
Xác thực cấu trúc JSON là một phương pháp cho phép chú thích và xác thực
các tài liệu JSON. Thông qua việc sử dụng một lược ồ JSON, ể xây dựng các quy
tắc xác thực cho các trường của document.
Ví dụ dưới ây sử dụng một toán tử $jsonSchema ể thiết lập các quy tắc xác
thực ối với việc thêm dữ liệu vào Collection “students”.
Hình 2.2: Ví dụ thiết lập xác thực bằng JSON schema
Bằng việc sử dụng ịnh dạng JSON ể thiết lập các quy tắc xác thực, chúng ta có
thể dễ dàng ọc và hiểu ược các quy tắc xác thực ược ưa ra với các trường dữ liệu như: 10 lOMoARcPSD| 27790909
các trường nào là bắt buộc, kiểu dữ liệu của mỗi trường, giá trị min/max, các thông
báo lỗi khi quy tắc xác thực bị vi phạm. 2.1.4.2. Thiết lập xác thực bằng toán tử truy vấn
Thiết lập quy tắc xác thực bằng toán tử truy vấn ược sử dụng trong các trường
hợp cần tạo ra các quy tắc xác thực ộng ể so sánh giá trị của các trường trong thời gian chạy.
Hình 2.3: Ví dụ thiết lập xác thực bằng toán tử truy vấn
Lệnh ở trong ví dụ trên tạo ra một quy tắc xác thực khi thêm dữ liệu vào
Collection “orders”: trường “totalWithVAT” phải bằng tổng của 2 trường “total” và
“VAT”. Khi vi phạm sẽ nhận ược thông báo lỗi.
2.1.5. Các mẫu thiết kế của mô hình dữ liệu
2.1.5.1. Mô hình quan hệ giữa các document
a) Quan hệ một – một
Xét ví dụ xây dựng sơ ồ mối quan hệ một – một giữa sinh viên và ịa chỉ của
sinh viên ó. Trong mô hình dữ liệu chuẩn hóa, document “DiaChi” sẽ chứa tham chiếu
ến document “SinhVien”. Nếu việc sử dụng ứng dụng cần thường xuyên truy xuất dữ
liệu ịa chỉ cùng với dữ liệu sinh viên, thì với việc dùng tham chiếu sẽ òi hỏi ưa ra
nhiều truy vấn hơn ể giải quyết tham chiếu. Mô hình tốt hơn sẽ là nhúng dữ liệu
“DiaChi” vào trong dữ liệu “SinhVien” như sau: {
_id: "sv_uit_1", name: "Nguyen Van A", address: { city:
"HCM", district: "Thu Duc", ward: “Linh Trung” } }
b) Quan hệ một – nhiều sử dụng nhúng dữ liệu lOMoARcPSD| 27790909
Mô hình dữ liệu quan hệ một – nhiều sử dụng phương pháp nhúng dữ liệu ược
sử dụng trong trường hợp cần truy xuất nhiều thực thể của một dữ liệu nằm trong một
dữ liệu khác. Tiếp tục với ví dụ ở trên, ta xét trong trường hợp một sinh viên có thể có
nhiều ịa chỉ liên hệ. Nếu nhu cầu truy xuất thông tin ịa chỉ ồng thời với dữ liệu sinh
viên xảy ra thường xuyên, thì phương pháp tối ưu hơn là nhúng các thực thể của dữ
liệu ịa chỉ vào trong dữ liệu sinh viên. { _id: "sv_uit_1", name: "Nguyen Van A", address: [ { city: "HCM", district: "Thu Duc", ward: “Linh Trung” }, { city: "HCM", district: "Phu Nhuan", ward: “Phuong 2” } ] }
c) Quan hệ một – nhiều sử dụng tham chiếu
Xét ví dụ về mô hình dữ liệu thể hiện quan hệ giữa sinh viên và môn học ã ăng
ký. Vì một môn học có rất nhiều sinh viên ăng ký, nên việc nhúng dữ liệu môn học
vào trong dữ liệu sinh viên có thể dẫn ến việc lặp lại dữ liệu của môn học, gây lãng phí
tài nguyên hệ thống. Để tránh việc lưu trữ lặp lại dữ liệu của môn học, có thể tạo ra
một Collection riêng ể chứa dữ liệu môn học. Cần lưu ý trong trường hợp này, một
môn học sẽ có rất nhiều sinh viên ăng ký, nên việc ể tham chiếu từ dữ liệu môn học
sang dữ liệu sinh viên sẽ dẫn ến lưu trữ một mảng rất lớn: // MonHoc {
_id: "mon_hoc_1", name: "Quan ly thong tin", students:
[“sv_uit_1”, “sv_uit_2”, “sv_uit_3” …] }
Nên cân nhắc ể tham chiếu ến dữ liệu môn học từ dữ liệu sinh viên như sau: 12 lOMoARcPSD| 27790909 // MonHoc { _id: "mon_hoc_1", name: "Quan ly thong tin", } // SinhVien { _id: "sv_uit_1", name: "Nguyen Van A", class_id: “mon_hoc_1” } { _id: "sv_uit_2", name: "Nguyen Van B", class_id: “mon_hoc_1” }
2.1.5.2. Mô hình cây
Xét ví dụ về hệ thống danh mục sách ược mô tả trong cấu trúc cây như sau:
Hình 2.4: Ví dụ hệ thống danh mục sách ược mô tả theo cấu trúc cây
a) Sử dụng tham chiếu cha
{ _id: "MongoDB", parent: "CoSoDuLieu" }
{ _id: "PostgreSQL", parent: "CoSoDuLieu" }
{ _id: "CoSoDuLieu", parent: "CongNgheThongTin" }
{ _id: "NgonNguLapTrinh", parent: "CongNgheThongTin" } { _id:
"CongNgheThongTin", parent: "Sach" } { _id: "Sach", parent: null }
b) Sử dụng tham chiếu con { _id: "MongoDB", child: [] }
{ _id: "PostgreSQL", child: [] } lOMoARcPSD| 27790909
{ _id: "CoSoDuLieu", child: ["MongoDB", "PostgreSQL"] }
{ _id: "NgonNguLapTrinh", child: [] }
{ _id: "CongNgheThongTin", child: ["CoSoDuLieu", "NgonNguLapTrinh"] }
{ _id: "Sach", child: ["CongNgheThongTin"] }
c) Sử dụng danh sách gốc
{_id: "MongoDB", ancestors: ["Sach", "CongNgheThongTin", "CoSoDuLieu"], parent: "CoSoDuLieu"}
{_id: "PostgreSQL", ancestors: ["Sach", "CongNgheThongTin","CoSoDuLieu"], parent: "CoSoDuLieu"}
{_id: "CoSoDuLieu", ancestors: ["Sach","CongNgheThongTin"], parent:"CongNgheThongTin"}
{_id:"NgonNguLapTrinh", ancestors: ["Sach","CongNgheThongTin"], parent:"CongNgheThongTin"}
{_id:"CongNgheThongTin", ancestors: ["Sach"], parent: "Sach"}
{_id: "Sach", ancestors: [], parent: null}
d) Sử dụng ường dẫn
{_id: "MongoDB", path: ",Sach,CongNgheThongTin,CoSoDuLieu,"}
{_id: "PostgreSQL", path: ",Sach,CongNgheThongTin,CoSoDuLieu,"}
{_id: "CoSoDuLieu", path: ",Sach,CongNgheThongTin,"}
{_id:"NgonNguLapTrinh", path: ",Sach,CongNgheThongTin"}
{_id:"CongNgheThongTin", path: ",Sach,"} {_id: "Sach", path: null}
2.2. Các phương thức CRUD trong MongoDB
2.2.1. Thêm dữ liệu
Cú pháp db.collection.insertOne() ược sử dụng ể thêm một document vào Collection.
Hình 2.5: Dùng phương thức db.collection.insertOne() ể thêm một sinh viên vào collection students
Câu lệnh trong ví dụ trên ã thêm thông tin của một sinh viên mới vào
Collection “students”. Vì trong document không khai báo trường “_id”, MongoDB sẽ
tự ộng gán một giá trị ObjectId cho trường này. Hàm insertOne() trả về kết quả thực
thi thêm dữ liệu và giá trị của trường “_id” của document vừa ược thêm vào.
Khi cần thêm nhiều document cùng một lúc, sử dụng cú pháp 14 lOMoARcPSD| 27790909
db.collection.insertMany() và truyền vào một mảng gồm các document.
Hình 2.6: Dùng phương thức db.collection.insertMany() ể thêm các sinh viên vào collection students
Khi sử dụng câu lệnh insert ể thêm dữ liệu, nếu thêm dữ liệu vào một
Collection không tồn tại, thao tác thêm dữ liệu sẽ tự ộng tạo mới Collection.
MongoDB cũng yêu cầu mỗi document cần có trường “_id” làm khóa chính. Nếu
trong câu lệnh insert chưa khai báo trường này, thao tác thêm dữ liệu sẽ tự ộng tạo ra
một giá trị ObjectId ể gán cho “_id”, và trả về sau khi thêm dữ liệu thành công.
Ngoài ra, việc thêm dữ liệu cũng có thể ược thực hiện bởi hàm
db.collection.bulkWrite() hoặc một số hàm cập nhật, chỉnh sửa dữ liệu với tùy chọn upsert=true:
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.findAndModify()
- db.collection.findOneAndUpdate()
- db.collection.findOneAndReplace()
2.2.2. Truy vấn dữ liệu
Truy vấn tất cả document trong Collection: Sử dụng cú pháp
db.collection.find() và truyền vào tham số là một ối tượng JSON rỗng {}. lOMoARcPSD| 27790909
Hình 2.7: Dùng phương thức db.collection.find() ể lấy toàn bộ thông tin trong collection students
Sử dụng iều kiện bằng: Xác ịnh các iều kiện tìm kiếm dưới dạng các cặp
:, thể hiện dưới ịnh dạng JSON và truyền vào hàm
db.collection.find()
Sử dụng toán tử truy vấn: MongoDB hỗ trợ tìm kiếm và lọc dữ liệu bằng các
toán tử so sánh, logic, iều kiện, ...
Sử dụng iều kiện “AND” hoặc “OR: Ví dụ tìm kiếm tất cả sinh viên khoa
CNTT có GPA > 3.7 hoặc < 3.6
Hình 2.8: Dùng phương thức db.collection.find() ể tìm sinh viên thỏa iều kiện cho trước
2.2.3. Cập nhật dữ liệu
Cập nhật dữ liệu trên MongoDB ược thực hiện thông qua các câu lệnh:
- db.collection.updateOne(, , )
- db.collection.updateMany(, , ) 16 lOMoARcPSD| 27790909
- db.collection.replaceOne(, , )
Trong ó, là iều kiện lọc document ể thực hiện cập nhật,
cú pháp cập nhật dữ liệu, với là một số iều kiện ược thêm vào.
Cập nhật trên một document: Sử dụng cú pháp db.collection.updateOne()
lấy ra sinh viên ầu tiên có tên“uit_sv_2”, cập nhật chuyên ngành thành “KHMT”
niên khóa thành 2022. Dùng toán tử $currentDate ể cập nhật trường lastModified
thành ngày hiện tại; nếu chưa có sẽ ược toán tử $currentDate tạo ra.
Cập nhật trên nhiều document: Sử dụng db.collection.updateMany() ể sửa ịa
chỉ thành phố của các sinh viên khóa 2020 từ“HCM” thành “TP.HCM”.
Hình 2.9: Dùng db.collection.updateMany()cập nhật thông tin sinh viên, sau ó kiểm tra kết quả lOMoARcPSD| 27790909
Thay thế giá trị trên một document: Sử dụng db.collection.replaceOne()
thay thế thông tin của sinh viên có tên “uit_sv”.
Hình 2.10: Dùng db.collection. replaceOne() thay thế thông tin của sinh viên có tên “uit_sv”
2.2.4. Xóa dữ liệu
Xóa tất cả document trong Collection: Sử dụng db.collection.deleteMany(),
truyền vào tham số là một ối tượng JSON rỗng.
Hình 2.11: Dùng phương thức db.collection.deleteMany() xóa tất cả document trong Collection
Xóa tất cả document thỏa mãn iều kiện: Sử dụng db.collection.deleteMany(),
với tham số truyền vào thể hiện iều kiện ể tìm kiếm document thực thi lệnh xóa. Ví dụ
xóa dữ liệu các sinh viên có GPA < 3.7 ra khỏi Collection students. 18 lOMoARcPSD| 27790909
Hình 2.12: Dùng phương thức db.collection.deleteMany() xóa các document trong Collection theo iều kiện
Xóa một document thỏa iều kiện: Sử dụng cú pháp db.collection.deleteOne(),
với tham số truyền vào là iều kiện tìm kiếm, lệnh này sẽ xóa document ầu tiên tìm thấy
thỏa mãn iều kiện ã cho. Ví dụ, xóa dữ liệu sinh viên ầu tiên niên khóa 2020.
Hình 2.13: Dùng phương thức db.collection.deleteOne() xóa document ầu tiên trong Collection thỏa iều kiện
2.3. Aggregation Operation
Aggregation Operations xử lý nhiều tài liệu và trả về kết quả ã tính toán. Bạn
có thể sử dụng các phép toán tổng hợp ể: Nhóm các giá trị từ nhiều document với
nhau; Thực hiện các thao tác trên dữ liệu ược nhóm ể trả về một kết quả duy nhất;
Phân tích sự thay ổi của dữ liệu theo thời gian
Aggregation Operations có thể ược thực hiện phổ biến bằng các phương thức
như Aggregation Pipeline, Map-Reduce lOMoARcPSD| 27790909
2.3.1. Aggregation Pipeline
Aggregation Pipeline bao gồm nhiều giai oạn xử lý tài liệu:
- Mỗi giai oạn thực hiện một thao tác trên các document ầu vào. Ví dụ: một giai
oạn có thể lọc document, nhóm document và tính toán giá trị.
- Các document ược trả ra từ một giai oạn xử lý sẽ ược chuyển vào cho giai oạn xử lý tiếp theo
- Một Aggregation Pipeline có thể trả về kết quả cho các nhóm tài liệu. Ví dụ: trả
về giá trị tổng, trung bình, lớn nhất, nhỏ nhất.
Ví dụ về Aggregation Pipeline dưới ây gồm có hai giai oạn và trả về tổng số
lượng ặt hàng của các mặt hàng có cỡ medium và ược nhóm theo tên mặt hàng: db.orders.aggregate( [
// Giai oạn 1: Lọc ra các ơn hàng có cỡ là “medium” { $match: { size: "medium" } },
// Giai oạn 2: Từ các ơn hàng ã lọc, nhóm theo tên mặt hàng và tính tổng {
$group: { _id: "$name", totalQuantity: { $sum: "$quantity" } } }] )
Ví dụ trên minh họa một Aggregation Pipeline với 2 giai oạn:
- Giai oạn $match: Lọc ra các document ơn hàng có kích cỡ là medium, sau ó
chuyển các document vừa lọc ược ến giai oạn $group
- Giai oạn $group: Nhóm các document nhận ược theo tên mặt hàng. Sau ó sử
dụng $sum ể tính toán tổng ơn hàng từ $quantity của mỗi ơn hàng. Tổng vừa
tính ược lưu trữ trong totalQuantity và ược trả về bởi Aggregation Pipeline. 2.3.2. Map-Reduce
Map-Reduce là một mô hình xử lý dữ liệu ể nhóm và mô hình hóa khối lượng
lớn dữ liệu thô thành các kết quả tổng hợp hữu ích. Để thực hiện các thao tác map-
reduce, MongoDB cung cấp lệnh mapReduce. 20 lOMoARcPSD| 27790909
db.orders.mapReduce( function() { emit(
this.cust_id, this.amount ); }, function(key,
value) { return Array.sum( values) }, { query: { status: “A” }, out: “order_totals” } )
Trong thao tác map-reduce ở ví dụ trên, MongoDB áp dụng giai oạn map cho
mỗi document ầu vào (nghĩa là các document trong Collection thỏa mãn iều kiện truy
vấn). Quá trình map tạo ra ánh xạ các cặp khóa-giá trị (key-value). Đối với những
khóa có nhiều giá trị, MongoDB áp dụng reduce, phương thức này thu thập và rút gọn
dữ liệu tổng hợp. MongoDB sau ó lưu trữ các kết quả trong một Collection. Theo tùy
chọn, ầu ra của quá trình reduce có thể chuyển qua một hàm cuối cùng ể rút gọn thêm
hoặc xử lý kết quả của Aggregation Operation.
Tất cả các hàm phục vụ map-reduce trong MongoDB ều dùng JavaScript và
chạy trong tiến trình mongod. Thao tác map-reduce lấy các tài liệu của một Collection
duy nhất làm ầu vào và có thể thực hiện bất kỳ thao tác phân loại và lọc nào trước khi
bắt ầu giai oạn map. mapReduce có thể trả về kết quả của thao tác dưới dạng
document hoặc có thể ghi kết quả vào Collection.
CHƯƠNG 3: CÁC TÍNH NĂNG NÂNG CAO
3.1. Phân quyên, xác thực, bảo mật trong MongoDB
Để ảm bảo an toàn bảo mật cho cơ sở dữ liệu, MongoDB cung cấp các tính
năng giúp người sử dụng thực hiện các biện pháp an ninh cần có như sau:
- Xác thực các kết nối của người dùng (Authentication)
- Phân quyền (Authorization)/ kiểm soát người dùng truy cập thông qua các role (Role-Based access control.)
- Mã hóa mạng (Network Encryption)/ mã hóa các thông tin ược truyền i (Transport Encryption)
- Mã hóa kho dữ liệu (Storage Encryption)/ Mã hóa dữ liệu lúc hệ thống ang ở lOMoARcPSD| 27790909
trạng thái nghỉ (Encryption-at-rest) - Kiểm tra (Auditing)
3.1.1. Xác thực các kết nối của người dùng (Authentication)
Tính năng xác thực yêu cầu máy khách cung cấp bằng chứng rằng tài khoản là
hợp lệ ể có thể truy cập cơ sở dữ liệu. MongoDB cung cấp 3 loại cơ chế xác thực:
- Xác thực dựa trên mật khẩu – máy khách xác minh danh tính bằng cách chứng
minh việc có sở hữu một giá trị bí mật ược xác ịnh trước. Cơ chế này ở
MongoDB sử dụng SCRAM-SHA-1 và SCRAM-SHA-256
- Xác thực dựa trên chứng chỉ - ứng dụng khách xác minh danh tính bằng chứng
chỉ x.509 ược ký bởi Tổ chức Phát hành Chứng chỉ (Certificate Authority) áng tin cậy.
- Xác thực bên ngoài - máy khách xác minh danh tính bằng dịch vụ bên ngoài,
chẳng hạn như Kerberos hoặc LDAP.
MongoDB Community hỗ trợ xác thực kiểu SCRAM, x.509, còn với phiên bản
MongoDB Atlas và MongoDB Enterprise sẽ hỗ trợ thêm các cơ chế xác thực bên
ngoài: xác thực dùng LDAP proxy, xác thực Kerberos.
3.1.1.1. Sử dụng SCRAM ể xác thực các kết nối của người dùng
a) Giới thiệu về SCRAM
Salted Challenge Response Authentication Mechanism (SCRAM) là cơ chế xác
thực người dùng mặc ịnh cho MongoDB. Khi một người dùng xác thực vào server,
MongoDB sẽ dùng SCRAM ể xác thực các thông tin ược người dùng cung cấp về tên
ăng nhập, mật khẩu và cơ sở dữ liệu muốn ược xác thực ể truy cập
b) Tính năng ặc trưng khi triển khai bảo mật kiểu SCRAM
- Các hệ số công việc có thể iều chỉnh. Ví dụ như số lần lặp (iteration count)
trong phương thức dẫn xuất khóa (Key derivation function).
- Mật mã Salt ngẫu nhiên cho mỗi người dùng.
- Xác thực danh tính hai chiều giữa máy chủ và máy khách
c) Cách bật tính năng kiểm soát người dùng và tạo tài khoản với mongod 22 lOMoARcPSD| 27790909
- Bước 1: Khởi ộng MongoDB ở chế ộ không kiểm soát người truy cập
- Bước 2: Kết nối mongosh tới mongod cần thiết lập
- Bước 3: Tạo user quản trị (administrator) bằng cách dùng collection admin và
chạy phương thức db.createUser(). Ví dụ db.createUser( { user: "vunguyen", pwd: "vunguyen", roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" } ]})
- Bước 4: Bật chế ộ kiểm soát người truy cập của mongod. Mở file config
mongod.conf và chỉnh sửa phần security thêm authorization: enabled -
Hình 3.1: Bật chế ộ kiểm soát người truy cập của Mongo bằng cách sửa file mongod.conf
- Bước 5: Kết nối lại MongoDB và xác thực dùng tài khoản admin vừa tạo lOMoARcPSD| 27790909
Hình 3.2: Sử dụng MongoDB Compass và tiến hành ăng nhập
- Bước 6: Tạo một người dùng mới bằng tài khoản admin db.createUser( { user: "user1", pwd: "user1",
roles: [ { role: "readWrite", db: "quan_ly_sach_2" }]})
- Bước 7: Kết nối lại MongoDB và xác thực bằng tài khoản mới tạo
3.1.2. Phân quyền và kiểm soát người dùng truy cập thông qua các role
MongoDB sử dụng Kiểm soát truy cập dựa trên các role (Role-Based Access
Control - RBAC) ể quản lý quyền truy cập vào hệ thống MongoDB. Người dùng ược
cấp một hoặc nhiều role xác ịnh quyền truy cập của người dùng vào các hoạt ộng và
tài nguyên cơ sở dữ liệu. người dùng không có quyền truy cập vào hệ thống ngoài
các role ược gán 3.1.2.1. Một số ịnh nghĩa
Resource: Một resource (tài nguyên) trong MongoDB có thể là một cơ sở dữ
liệu, một collection, một bộ các collection hoặc một cluster. Nếu tài nguyên là cluster,
các hành ộng liên kết ảnh hưởng ến trạng thái của hệ thống hơn là một cơ sở dữ liệu hoặc collection cụ thể.
Privilege: Privilege (Đặc quyền) bao gồm một resource cụ thể và các hành ộng
ược phép trên resource. Một role cấp privilege ( ặc quyền) ể thực hiện các hành ộng
ược chỉ ịnh trên một resource. Mỗi privilege hoặc ược chỉ ịnh rõ ràng trong role hoặc
ược kế thừa từ một role khác hoặc cả hai. 24 lOMoAR cPSD| 27790909
3.1.2.2. Role ược thiết lập sẵn và Role do người dùng ịnh nghĩa
a) Các role ược thiết lập sẵn
- Các role cho người dùng cơ sở dữ liệu: read, readWrite
- Các role cho người quản trị cơ sở dữ liệu: dbAdmin, dbOwner, userAdmin
- Các role cho người quản trị Cluster: Cơ sở dữ liệu admin có ịnh nghĩa thêm các
role ể quản trị toàn bộ hệ thống thay vì một cơ sở dữ liệu riêng lẻ:
clusterAdmin, clusterManager, clusterMonitor, và hostManager
- Các role cho sao lưu và phục hồi: Cơ sở dữ liệu admin ịnh nghĩa sẵn các role backup, restore
- Các role áp dụng lên toàn bộ các cơ sở dữ liệu trừ local và config:
readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminAnyDatabase
- Các role Superuser: Một số role trực tiếp hay gián tiếp có quyền truy cập tới
toàn bộ hệ thống. Các role sau ây có thể gán bất kì privilge nào ở bất kì cơ sở
dữ liệu nào: dbOwner, userAdmin, userAdminAnyDatabase, root
- Role nội bộ hệ thống: __system
b) Role do người dùng ịnh nghĩa
- Để tạo một role mới trong MongoDB, sử dụng phương thức db.createRole().
- MongoDB cũng cung cấp các phương thức ể tiến hành chỉnh sửa các role người
dùng ã ịnh nghĩa trước ó
3.1.2.3. Các thao tác trên role
a) Hiển thị role của người dùng: Sử dụng phương thức db.getUser() b) Hiển thị
privilege của một role
- Để xem thông tin của một role, người dùng phải ược cấp role ó, hoặc ược phép
thực thi viewRole trên cơ sở dữ liệu hiện tại
- Sử dụng phương thức db.getRole() hoặc lệnh rolesInfo, với thiết lập showPrivileges: true
c) Xóa role khỏi người dùng: Dùng phương thức db.revokeRolesFromUser().
d) Gán role cho người dùng: Dùng phương thức db.grantRolesToUser(). lOMoARcPSD| 27790909
3.1.2.4. Thay ổi mật khẩu và dữ liệu tùy chỉnh
Để sửa ổi mật khẩu và dữ liệu tùy chỉnh phải có privilege ược cấp cho các hành
ộng changeOwnPassword và changeOwnCustomData tương ứng trên cơ sở dữ liệu
của người dùng. Có 2 cách thay ổi mật khẩu và dữ liệu tùy chỉnh:
- Dùng phương thức db.updateUser() ể cập nhật mật khẩu và dữ liệu tùy chỉnh.
- Dùng phương thức passwordPrompt () kết hợp với các phương thức người
dùng khác nhau ể nhắc nhập mật khẩu thay vì chỉ ịnh mật khẩu trực tiếp trong phương thức
3.1.2.5. Kiểm soát quyền truy cập mức ộ Collection
Bằng cách chỉ ịnh cơ sở dữ liệu và collection trong phần ịnh nghĩa tài nguyên
của một privilege, quản trị viên có thể giới hạn các hành ộng chỉ trong một collection
cụ thể trong một cơ sở dữ liệu cụ thể. Mỗi hành ộng privilege trong một
role có thể ược xác ịnh phạm vi cho một collection khác. Ví dụ: privileges: [
{ resource: { db: "products", collection: "inventory" }, actions: [ "find", "update", "insert" ] },
{ resource: { db: "products", collection: "orders" }, actions: [ "find" ] }]
3.1.2.6. Các bước tiến hành thiết lập các role hỗ trợ phân quyền và kiểm soát truy cập người dùng
- Bước 1: Tạo tài khoản user administartor
- Bước 2: Từ tài khoản admin, tạo thêm những tài khoản duy nhất cho từng
người /ứng dụng truy cập vào server
- Bước 3: Tạo các role ịnh nghĩa các quyền truy cập cần có của một nhóm người dùng
- Bước 4: Tạo các tài khoản người dùng và gán cho họ những role mà họ cần ể
thực hiện chức năng vai trò của họ 26 lOMoARcPSD| 27790909
3.1.3. Mã hóa truyền dữ liệu (TLS/SSL)
Mã hóa truyền dữ liệu có tác dụng ngăn chặn người lạ không cho sao chép dữ
liệu trong khi dữ liệu ang ược truyền i MongoDB hỗ trợ TLS / SSL (Transport
Layer Security/Secure Sockets Layer) ể mã hóa tất cả lưu lượng mạng của MongoDB.
TLS / SSL ảm bảo rằng lưu lượng mạng MongoDB chỉ có thể ọc ược bởi úng máy khách ược nhắm tới
3.1.4. Mã hóa và bảo vệ dữ liệu
Mã hóa dữ liệu lưu trữ là công việc cần thiết ể phòng trường hợp các tệp chứa
cơ sở dữ liệu bị sao chép bất hợp pháp. Việc sao chép các tệp cơ sở dữ liệu có thể xảy
ra khi có người ột nhập vào trung tâm dữ liệu (data center) và ánh cắp ĩa cứng của
máy chủ. Tiến hành mã hóa dữ liệu trong lớp lưu trữ với tính năng Encryption at Rest
(mã hóa ở trạng thái nghỉ) của của công cụ lưu trữ WiredTiger, hoặc sử dụng mã hóa
hệ thống tệp, mã hóa thiết bị hoặc mã hóa vật lý (ví dụ: dm-crypt). Ngoài ra cũng nên
bảo vệ dữ liệu MongoDB bằng cách sử dụng các quyền tệp hệ thống. Có thể sử dụng
Mã hóa có thể truy vấn (Queryable Encryption) hoặc Mã hóa các trường dữ liệu phía
máy khách (Client-Side Field Level Encryption) ể mã hóa các trường dữ liệu trong
document phía ứng dụng trước khi truyền dữ liệu ến máy chủ.
3.1.5. Kiểm tra (Auditing)
Kiểm tra giúp theo dõi người dùng cơ sở dữ liệu, ngay cả khi người ó xóa dấu
vết của họ sau khi thay ổi hoặc thay ổi dữ liệu cơ sở dữ liệu, cho phép theo dõi quyền
truy cập và thay ổi cấu hình cơ sở dữ liệu và dữ liệu. MongoDB Enterprise có một cơ
sở hệ thống kiểm tra có thể ghi lại các sự kiện hệ thống như hoạt ộng của người dùng
và các sự kiện kết nối trên một phiên bản MongoDB.
MongoDB tập hợp các log nhật ký vào một chỗ trung tâm. Các nhật ký này
chứa các nỗ lực xác thực cơ sở dữ liệu, bao gồm ịa chỉ IP nguồn. Các hồ sơ kiểm tra
này giúp cho việc phân tích iều tra và cho phép quản trị viên xác minh các biện pháp kiểm soát thích hợp. lOMoARcPSD| 27790909 3.2. Index
3.2.1. Giới thiệu về Index
Index là một cấu trúc dữ liệu ặc biệt, ứng dụng cây nhị phân ể lưu trữ một phần
của dữ liệu theo cách dễ duyệt và tìm kiếm. Index chứa dữ liệu của một trường hoặc
một nhóm các trường cụ thể, và sắp xếp theo giá trị trong các trường ó. Việc sắp xếp
các giá trị trong index giúp cho các truy vấn liên quan ến khoảng giá trị hoặc tìm giá
trị khớp ược hiệu quả hơn. Ngoài ra, MongoDB có thể trả về kết quả ược sắp xếp sẵn
khi dùng trình tự sắp xếp trong index. MongoDB có thể tận dụng index ể giới hạn số
lượng document cần kiểm tra
Các loại index: MongoDB cung cấp các loại index khác nhau ể phục vụ cho
từng loại dữ liệu và câu truy vấn: Single Field, Compound Index, Multikey Index,
Geospatial Index, Text Index, Hashed Index, Clustered Index
Các thuộc tính của Index: Unique Index, Partial Index, Sparse Index, TTL Index, Hidden Index
3.2.2. Tạo một index
Để tạo một index trong Mongo shell, dùng lệnh db.collection.createIndex()
theo cú pháp sau: db.collection.createIndex( thông số>, )
Ví dụ: tạo ra một index trên trường name, sắp xếp giá trị theo thứ tự giảm dần:
db.collection.createIndex( { name: -1 } )
3.2.3. Sử dụng Index ể hỗ trợ truy vấn
Index có thể giúp cải thiện tốc ộ truy vấn trong cơ sở dữ liệu. Khi truy vấn dữ
liệu kèm theo chỉ ịnh vùng cần tìm kiếm mà tương ứng với một index ã thiết lập,
MongoDB sẽ trả về kết quả từ các giá trị trong index thay vì quét từng document hay ưa document vào vùng nhớ
Ngoải ra, MongoDB có thể thực hiện Index Intersection bằng cách kết hợp các
index ã thiết lập khác nhau ể xử lý truy vấn nếu cho kết quả phù hợp với yêu cầu 28 lOMoARcPSD| 27790909 3.3. Replica Set
3.3.1. Giới thiệu về replica set
Replica set là một nhóm các trình mongod cùng quản lý một bộ dữ liệu. Replica
set giúp dữ liệu tồn tại ở nhiều nơi và luôn sẵn sàng cung cấp thông tin cho các ứng
dụng, góp phần tránh gián oạn dịch vụ khi có sự cố server; giúp tăng khả năng máy
khách ọc ược dữ liệu, dữ liệu phân bố cục bộ và tập trung hơn theo khu vực. Ngoài ra,
replica set còn hỗ trợ việc sao lưu, khôi phục dữ liệu, báo cáo, …
3.3.2. Cấu trúc của một replica set
Một replica set bao gồm nhiều node (tức server), trong ó có một Primary node
duy nhất, các node còn lại là các Secondary node, ngoài ra có thể chứa thêm arbiter
node ể hỗ trợ chọn primary node khi một server gặp sự cố. Primary node và
Secondary node ều phụ trách chứa dữ liệu, còn Arbiter node thì không
Primary node phụ trách toàn bộ việc ghi dữ liệu, lưu các thay ổi và chỉnh sửa
trong dữ liệu vào collection tên oplog. Các secondary node sẽ sao chép collection
oplog của primary node, dựa vào ó thực hiện các thao tác trên dữ liệu lưu ở server của
chính nó, làm sao ể dữ liệu trên server giống dữ liệu trên primary node. Việc sao chép
collection oplog và thực hiện lại thao tác ghi trong ó diễn ra ồng thời với nhau, ảm bảo
dữ liệu trên các secondary node giống như dữ liệu trên primary node, giúp replica set
có thể hoạt ộng và cung cấp dữ liệu ngay cả khi có node không hoạt ộng
Dưới ây là sơ ồ ặc trưng cho Replication trong MongoDB, trong ó ứng dụng ở
Client luôn luôn tương tác với primary node và primary node này sau ó tái tạo dữ liệu cho secondary node lOMoARcPSD| 27790909
Hình 3.3: Sơ ồ mối quan hệ các thành phần trong Replica Set
Mỗi node trong trong replica set sẽ gửi tín hiệu ping (heartbeat) tới các node
khác mỗi 2 giây. Nếu một node không có tín hiệu ping trả về trong vòng 10 giây, các
node khác sẽ ánh dấu node ó là không truy cập ược. Trong trường hợp ó, một
secondary node bất kì sẽ tiến hành tổ chức cuộc bình chọn ể các node có thể chọn ra
một secondary node trở thành primary node mới.
Cấu hình của một replica set khuyến nghị tối thiểu nên có 3 node phụ trách
chứa dữ liệu: một primary node và hai secondary node. Trong một số trường hợp,
chẳng hạn replica set có hai (02) node, một primary node và một secondary node, có
thể thêm một mongod óng vai trò arbiter node. Arbiter node này không chứa dữ liệu
mà chỉ tham gia bình chọn ể phá thế hòa giúp chọn ra node nào là primary node.
3.3.3. Các bước thiết lập một replica set
Các bước sau ây sẽ mô tả cách tạo ra replica set gồm 3 node từ 3 mongod có
sẵn, trường hợp không cần xác thực
Bước 1: Khởi ộng từng server mongod của replica set theo cú pháp sau:
mongod --replSet "rs0" --bind_ip localhost,
Trong ó mục chỉ ịnh tên miền và/hoặc ịa chỉ IP của
mongod mà các máy khách từ xa (bao gồm cả các mongod khác trong cùng replica
set) có thể kết nối và sử dụng.
Bước 2: Kết nối mongosh tới một trong các node mongod 30 lOMoARcPSD| 27790909
Bước 3: Khởi tạo replica set. Trong mongosh chạy phương thức rs.initiate().
Thiết lập ối số của phương thức theo mẫu như sau: rs.initiate( { _id : "rs0", members: [
{ _id: 0, host: "mongodb0.example.net:27017" },
{ _id: 1, host: "mongodb1.example.net:27017" },
{ _id: 2, host: "mongodb2.example.net:27017" } ]})
Khi ó MongoDB sẽ khởi tạo ra một replica set dùng các giá trị ã thiết lập
Bước 4: Xem các thông số cài ặt của replica set thông qua lệnh rs.conf()
Bước 5: Kiểm tra trạng thái replica set hiện tại thông qua lệnh rs.status()
3.4. Phân tán dữ liệu
3.4.1. Giới thiệu về Sharding
Sharding là một phương thức dùng ể phân phối dữ liệu trên nhiều máy khác
nhau. MongoDB sử dụng sharding ể hỗ trợ triển khai các ứng dụng có các tập dữ liệu
rất lớn và có các hoạt ộng trên dữ liệu mà cần thông lượng cao, hỗ trợ horizontal
scaling (mở rộng theo chiều ngang) giúp tài nguyên hệ thống bắt kịp yêu cầu khả năng
xử lý bằng cách phân chia tập dữ liệu hệ thống và tải trên nhiều máy chủ khác nhau,
thêm các máy chủ bổ sung ể tăng dung lượng theo yêu cầu.
3.4.2. Một số ịnh nghĩa
3.4.2.1. Sharded Cluster
Một sharded cluster trong MongoDB chứa các thành phần sau:
- Shard: mỗi shard chứa một tập hợp con của dữ liệu ược chia nhỏ. Mỗi shard có
thể ược triển khai cài ặt như một tập bản sao của dữ liệu gốc (replica set)
- Mongos: óng vai trò là query router, là lớp interface trung gian giữa các ứng
dụng bên máy khách và sharded cluster.
- Config servers: thiết lập cấu hình máy chủ lưu trữ các thông tin metadata và các cài ặt cho cluster lOMoARcPSD| 27790909
MongoDB phân oạn dữ liệu tới mức ộ collection, phân phối dữ liệu của
collection trên các shard khác nhau trong cluster.
Hình 3.4: Sơ ồ mối quan hệ các thành phần trong Sharded Cluster
3.4.2.2. Shard Key và Chunk
Shard Key: MongoDB sử dụng shard key ể phân phối document của collection
trên các shard. Giá trị của shard key bao gồm giá trị của một trường hoặc nhiều trường
dữ liệu trong các document. Khi phân mảnh một collection ra nhiều shard cần tiến
hành chọn các shard key. Giá trị shard key của một document sẽ quyết ịnh cách nó sẽ
ược phân oạn như thế nào trên các shard khác nhau
Chỉ số Shard Key: Để phân oạn một collection lên các shard khác nhau,
collection ó phải có một chỉ số (index) bắt ầu bằng giá trị shard key. Khi phân oạn một
collection trống, MongoDB sẽ hỗ trợ tạo chỉ số nếu collection ó chưa có chỉ số phù
hợp cho shard key. Việc lựa chọn khóa shard key ảnh hưởng ến hiệu suất, hiệu quả và
khả năng mở rộng của một sharded cluster
Chunk: MongoDB phân dữ liệu trong shard thành các các chunk. Mỗi chunk
có khoảng giới hạn giá trị dựa trên shard key
3.4.2.3. Collection ược chia nhỏ và không ược chia nhỏ
Một cơ sở dữ liệu có thể có một hỗn hợp các collection ược phân oạn và
collection không ược phân oạn. Các collection ã ược phân oạn sẽ ược chia vùng và
phân phối trên các shard trong cluster. collection không ược phân oạn ược lưu trữ trên
shard chính. Mỗi cơ sở dữ liệu có một shard chính của riêng nó. 32 lOMoARcPSD| 27790909
3.4.3. Phương pháp Sharding
3.4.3.1. Sharding theo giá trị băm (Hashed Sharding)
Hashed Sharding liên quan ến việc tính toán một hàm băm dựa trên giá trị của
trường shard key. Sau khi tính toán các giá trị của shard key và có ược một tập hợp
các giá trị băm, mỗi chunk ược gán một khoảng giá trị dựa trên các giá trị băm ó. Khi
ó các shard key có thể có giá trị sát nhau, nhưng các giá trị băm sau khi tính toán của
chúng sẽ cách nhau dẫn ến shard key sẽ không nằm trên cùng một chunk. Phân phối
dữ liệu dựa trên các giá trị băm tạo iều kiện phân phối dữ liệu ồng ều hơn, ặc biệt là
trong các tập dữ liệu mà shard key thay ổi theo một hàm ơn iệu.
Tuy nhiên phân phối dữ liệu kiểu hàm băm khiến cho việc truy xuất và thao tác
dữ liệu dựa theo các khoảng giá trị của shard key có khả năng sẽ nhắm tới nhiều shard
thay vì một shard nhất ịnh, do ó việc xử lý có thể diễn ra trên quy mô cluster liên quan
ến nhiều shard thay vì chỉ một shard nhất ịnh. 3.4.3.2. Sharding theo khoảng giá trị (Ranged Sharding)
Sharding theo khoảng giá trị là phân chia dữ liệu thành các khoảng giá trị dựa
trên chính các giá trị của shard key. Mỗi chunk ược gán một phạm vi chứa giá trị dựa
trên các giá trị của shard key. Khi ó, các shard key có giá trị sát nhau có nhiều khả
năng nằm trên cùng một chunk, cho phép việc truy xuất và thao tác dữ liệu dựa theo
các khoảng giá trị của shard key sẽ chỉ nhắm tới một shard nhất ịnh
Hiệu quả của Ranged Sharding phụ thuộc vào giá trị shard key ược chọn. Hệ
thông các shard key không ược tổ chức cẩn thận có thể khiến việc phân phối dữ liệu
không ồng ều, dẫn ến không tận dụng ược một số lợi ích của việc sharding hoặc có thể
gây ra tắc nghẽn khi xử lý dữ liệu
3.4.4. Zone trong Sharded Cluster
Zone có thể hỗ trợ việc khoanh vùng dữ liệu cho các shared cluster mà các
phân oạn ó tồn tại trên nhiều trung tâm dữ liệu khác nhau. Trong các cluster phân
oạn, có thể tạo các vùng (zone) chứa các phân oạn dữ liệu dựa trên shard key. Mỗi
zone bao gồm một hoặc nhiều khoảng giá trị shard key. Đồng thới, zone có thể liên
kết với một hoặc nhiều shard trong cluster. Một shard có thể liên kết với một hay lOMoARcPSD| 27790909
nhiều zone. Trong một cluster, MongoDB chỉ di chuyển các chunk chứa trong một
zone ến các shard ược liên kết với zone ó.
3.4.5. Cách triển khai một Sharded Cluster
Mỗi thành phần trong sharded cluster phải ảm bảo có thể kết nối với tất cả các
thành phần khác trong cluster, bao gồm tất cả các shard và config server. Quy trình
tổng quát ể triển khai một Sharded Cluster gồm các bước sau: Tạo config server
replica set, Tạo các shard replica set, Khởi ộng mongos ể khởi ộng Sharded
Cluster, Kết nối với Sharded Cluster, và Phân mảnh một Collection
3.4.5.1. Tạo config server replica
Bước 1: Với mỗi một mongod, tiến hành thiết lập các giá trị cài ặt mongod
thông qua file configuaration hoặc qua câu lệnh command line mongod --configsvr
--replSet --dbpath --bind_ip localhost,
Bước 2: Kết nối mongosh tới một trong các config server mongosh --host --port
Bước 3: Khởi chạy replica set. Trong mongosh, chạy phương thức rs.initiate()
rs.initiate() nhận ối số là các thông số cài ặt replica set. Các thông số gồm:
- _id: tên ịnh danh của replica set (lấy từ replication.replSetName hoặc – replSet)
- configsvr: ể giá trị true
- members: mảng chứa các thành phần mongod của replica set
3.4.5.2. Tạo các shard replica
Khi triển khai sharded cluster trong thực tế, dùng replica set với ít nhất 3 thành phần mongod
Bước 1: Khởi ộng từng shard. Thiết lập các thông số khởi ộng của mongod
thông qua file config hoặc câu lệnh command line mongod --shardsvr --replSet --dbpath --bind_ip localhost,
Bước 2: Kết nối mongosh tới một trong các shard ã khởi ộng mongosh -- host --port 34 lOMoARcPSD| 27790909
Bước 3: Khởi tạo replica set. Trong mongosh, chạy phương thức rs.initiate()
rs.initiate() nhận ối số là các thông số cài ặt replica set. Các thông số gồm:
- _id: tên ịnh danh replica set (lấy từ replication.replSetName hoặc –replSet)
- members: mảng chứa các thành phần mongod của replica set
3.4.5.3. Khởi ộng mongos ể khởi ộng Sharded Cluster
Khởi ộng mongos kèm theo thiết lập các thông số khởi ộng của mongod
thông qua file config hoặc câu lệnh command line mongos --configdb
/cfg1.example.net:27019,cfg2.example.net:27019,cfg3.example
.net:27019 --bind_ip localhost,
3.4.5.4. Kết nối với Sharded Cluster
Kết nối mongosh tới mongos vừa tạo, chỉ rõ mongos chạy trên host và port nào mongosh --host --port
3.4.5.5. Thêm shard vào cluster
Trong một phiên mongosh ang kết nối tới mongos, dùng phương thức
sh.addShard() ể thêm shard vào cluster sh.addShard( "/s1-
mongo1.example.net:27018,s1-
mongo2.example.net:27018,s1-mongo3.example.net:27018")
3.4.5.6. Phân mảnh một Collection
Để phân mảnh một collection, kết nối mongosh tới mongos và dùng phương
thức sh.shardCollection().Có 2 phương pháp phân mảnh một collection:
- Sharding theo giá trị băm (hashed Sharding):
sh.shardCollection(".", { : "hashed" } )
- Sharding theo khoảng giá trị (Ranged Sharding):
sh.shardCollection(".", { : 1, ... } )
3.5. Sao lưu và khôi phục
Các mongodump và mongorestore tận dụng việc xuất dữ liệu BSON ể tạo bản
sao lưu các triển khai cơ sở dữ liệu nhỏ. Do mongodump và mongorestore hoạt ộng lOMoARcPSD| 27790909
bằng cách tương tác với một phiên bản mongod ang chạy, chúng có thể ảnh hưởng ến
hiệu suất của cơ sở dữ liệu ang chạy. Sử dụng sao lưu thay thế như Filesystem
Snapshots hoặc MongoDB Cloud Manager nếu tác ộng hiệu suất của mongodump và
mongorestore là không thể chấp nhận.
3.5.1. Sao lưu cơ sở dữ liệu với mongdump
3.5.1.1. Tạo bản sao lưu cho mongod chạy trên local
Loại trừ cơ sở dữ liệu cục bộ: mongodump loại trừ nội dung của cơ sở dữ liệu
cục bộ trong ầu ra của nó.
Quyền truy cập bắt buộc: phải có ặc quyền cấp hành ộng tìm kiếm cho mỗi cơ
sở dữ liệu ể sao lưu. Vai trò sao lưu tích hợp cung cấp các ặc quyền cần thiết ể thực
hiện sao lưu bất kỳ và tất cả các cơ sở dữ liệu.
Các mongodump sao lưu dữ liệu bằng cách kết nối với mongod ang chạy. Tiện
ích này có thể tạo bản sao lưu cho toàn bộ máy chủ, cơ sở dữ liệu hoặc collection
hoặc có thể sử dụng truy vấn ể sao lưu một phần của collection Các
thao tác mongodump cơ bản:
- Khi chạy mongodump mà không có bất kỳ ối số nào, lệnh sẽ tiến hành kết nối
với MongoDB trên hệ thống cục bộ (ví dụ: localhost) trên cổng 27017 và tạo
bản sao lưu cơ sở dữ liệu có tên là dump / trong thư mục hiện tại.
- Có thể dùng ối số --host--port ể chỉ ra MongoDB nên kết nối tới.
- Để tùy chỉnh thư mục ầu ra, sử dụng ối số --out hoặc -o
- Nếu chỉ muốn sao lưu một phần cơ sở dữ liệu, sử dụng các ối số --db và -
collection ể chỉ ra cơ sở dữ liệu hay collection nào muốn sao lưu
Ví dụ: mongodump --username=uit --password=uit1 -
authenticationDatabase=admin --db=rangerShop --out=D:\backup 36 lOMoARcPSD| 27790909 -
Tạo bản sao lưu bằng Oplog:
Các --oplog tùy chọn với mongodump thu thập các mục oplog và cho phép thực
hiện sao lưu trên cơ sở dữ liệu trực tiếp. Nếu sau ó khôi phục cơ sở dữ liệu từ bản sao
lưu này, cơ sở dữ liệu sẽ giống như khi quá trình sao lưu hoàn tất. Với --oplog,
mongodump sao chép tất cả dữ liệu từ cơ sở dữ liệu nguồn cũng như tất cả các mục
oplog từ ầu ến cuối quy trình sao lưu. Hoạt ộng này kết hợp với mongorestore -
oplogReplay cho phép khôi phục bản sao lưu phản ánh thời iểm cụ thể tương ứng với
thời iểm mongodump hoàn thành tạo tệp xuất.
3.5.1.2. Tạo bản sao lưu từ các phiên bản Non-Local mongod
Các --host và --port cho mongodump cho phép bạn kết nối và sao lưu host từ
xa, như ví dụ sau: “mongodump --host=mongodb1.example.net --port=3017 -
username=user --password="pass" --out=/opt/backup/mongodump-2013-10-24”
Bất cứ lệnh mongodump sử dụng sẽ liên quan ến phân quyền username
password trên database
3.5.2. Khôi phục cơ sở dữ liệu với mongorestore
Để khôi phục dữ liệu một triển khai MongoDB có kiểm soát truy cập, cần có
role cung cấp các ặc quyền cần thiết ể khôi phục dữ liệu từ các bản sao lưu nếu dữ liệu
không bao gồm dữ liệu thu thập system.profile và chạy mongorestore không có – oplogReplay.
Nếu dữ liệu sao lưu bao gồm dữ liệu thu thập system.profile hoặc chạy với –
oplogReplay và cơ sở dữ liệu ích không chứa tập hợp system.profile thì cần phải có các ặc quyền sau:
- Mongorestore cố gắng tạo collection mặc dù chương trình không thực sự khôi
phục tài liệu system.profile. Do ó, người dùng cần các ặc quyền bổ sung ể thực
hiện các hành ộng createCollection và convertToCapped trên system.profile cho cơ sở dữ liệu. lOMoARcPSD| 27790909
- Cả hai vai trò tích hợp dbAdmin và dbAdminAnyDatabase ều cung cấp các ặc quyền bổ sung.
3.5.2.1. Các thao tác cơ bản với mongorestore
Các mongorestore khôi phục bản sao lưu nhị phân ược tạo bởi mongodump.
Theo mặc ịnh, mongorestore tìm kiếm một bản sao lưu cơ sở dữ liệu trong thư mục
dump / directory. Các mongorestore tiện ích khôi phục dữ liệu bằng cách kết nối trực
tiếp với mongod ang chạy, mongorestore có thể khôi phục toàn bộ bản sao lưu cơ sở
dữ liệu hoặc một tập hợp con của bản sao lưu.
Để sử dụng “mongorestore” giao tiếp với “mongod” sử dụng lệnh dưới ây
“mongorestore --port= ”
3.6. Nhập và xuất dữ liệu
MongoDB Compass hỗ trợ nhập và xuất dữ liệu JSON lẫn CSV
3.6.1. Nhập dữ liệu vào Collection
Một số hạn chế khi nhập dữ liệu thông qua MongoDB Compass bao gồm chức
năng nhập dữ liệu không ược hỗ trợ ở phiên bản Read Only của MongoDB Compass,
và chức năng này sẽ không hoạt ộng nếu ang kết nối ến Data Lake
Trước khi nhập data vào MongoDB Compass phải chắc rằng dữ liệu ã ược ịnh
dạng úng ển Compass hiểu ược
- Với ịnh dạng file JSON: Mỗi dòng là một dữ liệu thông tin. Dấu phẩy ngăn
cách dữ liệu trong một mảng (không ngắt dòng giữa các phần tử trong mảng)
- Đối với ịnh dạng file CSV: Dòng ầu tiên của file là tên cột phải ược ngăn cách
bằng các dấu phẩy, những dòng tiếp theo là các giá trị của cột theo thứ tự. Quy trình:
- Bước 1: Kết nối với bộ tài liệu mà bạn muốn nhập dữ liệu
- Bước 2: Điều hướng ến bộ tài liệu muốn nhập
- Bước 3: Chọn “Add Data” và chọn “Import File” 38 lOMoARcPSD| 27790909 -
Hình 3.5: Click “Add Data” chọn Import File
Bước 4: Chọn vị trí của tệp trong “Import File”, chọn loại tệp thích hợp với tệp
muốn thêm vào bao gồm JSON hoặc CSV
Hình 3.6: Chọn vị trí tệp và loại tệp cho loại tệp JSON
Giả sử nếu như chọn loại tệp là CSV thì sẽ có thể chỉ ịnh các loại trường ể nhập
và loại dữ liệu của các trường ó. Kiểu dữ liệu cho tất cả các trường mặc ịnh là kiểu
chuỗi. Để loại trừ một trường khỏi tệp CSV thì hãy bỏ chọn họp checkbox bên cạnh.
Để chọn loại cho một trường thì sử dụng drop-down menu phía dưới trường ó. lOMoARcPSD| 27790909
Hình 3.7: Chọn trường muốn thêm và chọn loại dữ liệu cho trường cho loại tệp CSV
- Bước 5: Định cấu hình các tùy chọn nhập trong “Options”
Nếu ang nhập tệp CSV có thể chọn cách phân tách dữ liệu của mình. Đối với cả
nhập tệp JSON và CSV, có thể chuyển ổi “bỏ qua chuỗi trống” (Ignore empty
Strings) và “dừng khi có lỗi” (Stop on errors)
Hình 3.8: Chọn các options nâng cao cho loại tệp CSV
- Bước 6: Chọn Import 40 lOMoARcPSD| 27790909 -
Hình 3.9: Màn hình hiển thị các dữ liệu file JSON (bên trái), CSV (bên phải) ã nhập vào
3.6.2. Xuất dữ liệu từ một Collection
MongoDB Compass có thể xuất dữ liệu dưới dạng tệp JSON hoặc CSV. Chỉ
ịnh bộ lọc hoặc ường dẫn tổng hợp cho nơi chứa dữ liệu của mình, Compass sẽ xuất
các tài liệu phù hợp với kết quả truy vấn hoặc ường dẫn ã chỉ ịnh. Cần lưu ý là
không thể ịnh hình lại tài liệu ã xuất bằng tài liệu dự án.
Để xuất toàn bộ bộ sưu tập sang một tệp:
- Bước 1: Kết nối với triển khai có chứa Collection muốn truy xuất
Bước 2: Nhấp vào Collection trên thanh menu và chọn “Export Collection”
Hình 3.10: Chọn Export Collection Compass
sẽ xuất hiện hộp thoại như sau: lOMoARcPSD| 27790909
Hình 3.11: Hộp thoại chọn lựa cách xuất dữ liệu bằng cách query filter hay xuất toàn bộ
Hộp thoại hiển thị truy vấn mặc ịnh sẽ ược sử dụng ể xuất dữ liệu. Nếu không
có chỉnh sửa câu truy vấn, thao tác sẽ trả về tất cả các tài liệu trong collection. Nếu
muốn bỏ qua bộ lọc và xuất toàn bộ dữ liệu thì chọn “Export Full Collection” và nhấp vào “Select Fields”
- Bước 3: Chọn các trường tài liệu ưa vào tệp sẽ xuất. Thêm các trường khác
bằng nút “Add Field” nếu trường ó không ược chương trình tự ộng phát hiện.
Hình 3.12: Chọn thêm trường ể xuất hoặc hủy bỏ những trường không muốn xuất ra
- Bước 5: Chọn loại tệp và vị trí xuất: Trong Chọn loại tệp xuất, chọn JSON
hoặc CSV. Nếu chọn JSON, dữ liệu sẽ ược xuất sang tệp ích dưới dạng một
mảng. Sau ó chọn “Select Output”, chọn nơi xuất tệp sang. 42 lOMoARcPSD| 27790909 -
Hình 3.13: Chọn Browse ể chọn vị trí ích muốn xuất file ra, sau ó nhấn Export ể tiến hành xuất
- Bước 6: Nhấp vào Export. Thanh tiến trình hiển thị trạng thái của quá trình
xuất. Nếu xảy ra lỗi, thanh tiến trình sẽ chuyển sang màu ỏ và thông báo lỗi
xuất hiện trong hộp thoại. Sau khi xuất thành công, hộp thoại sẽ óng.
3.7. Một số tính năng khác trên MongoDB
Change stream: Change stream cho phép các ứng dụng tiếp cận thông tin về
các thay ổi trong dữ liệu theo thời gian thực thay vì phải theo dõi oplog. Các ứng dụng
kết nối với cơ sở dữ liệu MongoDB có thể dùng change strams ể có ược các thay ổi về
dữ liệu lưu trên một collection ơn lẻ, một cơ sở dữ liệu hay nguyên cả dự
án, và dựa trên ó có thể ngay lập tức có các thao tác phản ứng lại với các thay ổi ó.
Time Series: Time series data (dữ liệu theo thời gian) là một chuỗi các dữ liệu
thay ổi theo thời gian, từ sự thay ổi của dữ liệu có thể phân tích, nghiên cứu, ưa ra các
nhận xét về dữ liệu, ngoài ra còn giúp cải thiện việc truy vấn và tối ưu vùng nhớ lưu
trữ dữ liệu và các index. Collection time series có thể thực hiện các thao tác như thêm
và truy vấn như các collection bình thường
Thực hiện một transaction trên nhiều document: Trong MongoDB, một
thao tác lên một document có tính nguyên tử. Tuy nhiên, ối với các trường hợp cần
tính nguyên tử trên thao tác ọc và ghi cùng lúc trên nhiều document (có thể trên một
hoặc nhiều collection), MongoDB hỗ trợ thực hiện transaction trên nhiều document. lOMoARcPSD| 27790909
CHƯƠNG 4: DEMO TÍNH NĂNG TRÊN MONGODB 4.1. Kịch bản demo
Tạo ứng dụng website bán quần áo rangerShop bằng cách tạo và lưu dữ liệu trên
Sharded Cluster của MongoDB, cung cấp các tính năng cơ bản truy xuất, thêm, xóa,
sửa người dùng, sản phẩm, ơn hàng. Backend sử dụng NodeJS và framework
ExpressJS, truy vấn cơ sở dữ liệu sử dụng thư viện Mongoose. Frontend sử dụng
ReactJS. Tiến hành sao lưu, khôi phục, xuất và nhập dữ liệu từ file JSON
Bảng 4.1: Thiết lập sharded cluster MongoDB trên localhost Các thành phần Tên replica set
Hostname, port mongod của replica set Config Server config_repl
localhost:28041, localhost:28042, localhost:28043 Replica Set
Shard Replica Set (1) shard_repl
localhost:28081, localhost:28082, localhost:28083
Shard Replica Set (2) shard2_repl
localhost:29081, localhost:29082, localhost:29083 Mongos localhost:27017
Bảng 4.2: Tạo người dùng và phân quyền Host Username
Role trong database admin
localhost:28081 shard_repl_admin userAdminAnyDatabase,
readWriteAnyDatabase, clusterAdmin
adminRangerShopShard1 readWriteAnyDatabase
localhost:29081 shard2_repl_admin userAdminAnyDatabase,
readWriteAnyDatabase, clusterAdmin
adminRangerShopShard2 readWriteAnyDatabase localhost:27017 vunguyen userAdminAnyDatabase,
readWriteAnyDatabase, clusterAdmin nguoidung readWriteAnyDatabase 44 lOMoAR cPSD| 27790909
Database tạo thêm trong Sharded Cluster: rangerShop
Bảng 4.3: Các collection kèm các thông tin trong database rangerShop
*Trường dữ liệu in nghiêng không bắt buộc phải có trong collection Collection Shard Keys
Kiểu dữ liệu trong collection Trường
Kiểu BSON và yêu cầu dữ liệu dữ liệu users {_id:1} name string email string password string isAdmin bool products {_id:”hashed”} name string slug string image string brand string category string description string price number, minimum: 0 countInStock number, minimum: 0 rating number, minimum: 0 numReviews number, minimum: 0 reviews array, chứa các object
Object trong mảng có các thuộc tính sau: name (string), comment (string), rating (number) orders {_id:”hashed”} orderItems array, chứa các object
Object trong mảng có thuộc tính:
name (string), slug (string), image (string), price (number, minimum:0), quantity (number,
minimum:0), product (objectId) 45 lOMoARcPSD| 27790909
shippingAddress object; có các thuộc tính sau:
fullName (string), address (string),
city (string), postalCode (string),
country (string), location (object)
location chứa các thuộc tính: lat
(number), lng (number), address
(string), name (string), vicinity
(string), googleAddressId (string) paymentMethod string paymentResult
object; có các thuộc tính sau: id(string), status(string), update_time(string) itemsPrice number, minimum: 0 shippingPrice number, minimum: 0 taxPrice number, minimum: 0 totalPrice number, minimum: 0 user objectId isDelivered bool deliveredAt date
4.2. Các chức năng sẽ demo
- Tạo sharded cluster và thiết lập xác thực, tạo tài khoản, phân quyền
- Tạo cơ sở dữ liệu, thêm xác thực dữ liệu
- Nhập dữ liệu từ file JSON
- Thiết kế ứng dụng (truy xuất, thêm, xóa, sửa các collection users, products, orders)
- Xuất và backup dữ liệu 4.3. Kết quả demo Link Demo: 46 lOMoARcPSD| 27790909
https://drive.google.com/file/d/1PM7t07qmx4JeJPenqGWfoaYh6uFThohR/view?usp =sharing
Chi tiết các collection và document của cơ sở dữ liệu rangerShop trong sharded cluster:
Hình 4.1: Collection products trong cơ sở dữ liệu rangerShop
Hình 4.2: Collection orders và users trong cơ sở dữ liệu rangerShop
Sử dụng phương thức rs.status() ể xem thông tin sharded cluster và các shard ược
kết nối trong sharded cluster 47 lOMoARcPSD| 27790909
Hình 4.3: Sharded Cluster gồm 2 shard là 2 replica set có tên ịnh danh shard_repl và shard2_repl
Hình 4.4: Sharded Cluster chứa các collection ã ược phân tán theo index là orders, products, users
Dùng tính năng xác thực dữ liệu (validation) trên các collection bằng JSON
schema ể giúp cấu trúc dữ liệu ược thống nhất. Kiểm tra thông tin xác thực mô hình dữ
liệu hông qua tab Validation của từng collection trong MonggoDB Compass 48 lOMoARcPSD| 27790909
Hình 4.5: Quy ịnh xác thực dữ liệu trong các collection trong cơ sở dữ liệu rangerShop
Dùng phương thức db.getUSers() ể lấy thông tin người dùng và phân quyền trên
mongos và trên các shard thành phần 49 lOMoARcPSD| 27790909
Hình 4.6: Kiểm tra thông tin người dùng và phân quyền trên mongos và trên các shard thành phần
Xây dựng backend ứng dụng website rangerShop kết nối với cơ sở dữ liệu. Kết
nối backend với shard cluster thông qua URI kèm thông tin xác thực 50 lOMoARcPSD| 27790909
Hình 4.7: Dùng mongoose.connect() kết nối backend với cơ sở dữ liệu rangerShop kèm thông tin xác thực
Lập trình backend (productRoutes.js) lấy thông tin sản phẩm từ MongoDB cho
ra kết quả giống như khi chạy lệnh truy vấn trong MongoShell. Frontend lấy dữ liệu ó
hiển thị thông tin lên website
Hình 4.8: Thiết kế phương thức GET trong productRouter lấy toàn bộ thông tin sản phẩm trong cơ sở dữ liệu 51 lOMoARcPSD| 27790909
Hình 4.9: Kết quả phản hồi của backend khi yêu cầu ưa tất thông tin sản phẩm trong cơ sở dữ liệu, so sánh với
kết quả truy vần khi dùng phương thức trong Mongosh
Hình 4.10: Hiển thị sản phẩm lên frontend
Sử dụng tính năng Aggregation Operations của MongoDB: Lập trình backend
(file productRoutes.js ) lấy thông tin tổng quan về số lượng và tổng tiền từ các ơn hàng
bằng cách dùng Aggregation Operation của MongoDB 52 lOMoARcPSD| 27790909
Hình 4.11: Thiết kế phương thức GET trong orderRouter lấy thông tin tổng quan dữ liệu trong collection orders
Hình 4.12: Sử dụng phương thức db.collections.aggregate() ể xuất thông tin số lượng ơn hàng và tổng giá trị tính
ược trong collection orders
Hình 4.13: Hiển thị các thông số lên giao diện website của admin
Sao lưu và khôi phục dữ liệu của cơ sở dữ liệu rangerShop 53 lOMoARcPSD| 27790909
Hình 4.14: Dùng mongodump sao lưu dữ liệu của cơ sở dữ liệu rangerShop
Hình 4.15: Các file sao lưu cơ sở dữ liệu rangerShop ược tạo ra
Khôi phục lại cơ sở dữ liệu rangerShop, ặt tên mới là rangerShopBackup.
Toàn bộ dữ liệu và các xác thực dữ liệu ược khôi phục.
Hình 4.16: Dùng mongorestore khôi phục lại cơ sở dữ liệu rangerShop từ bản sao lưu 54 lOMoARcPSD| 27790909
Hình 4.17: Kết quả khôi phục lại cơ sở dữ liệu bằng mongorestore
Xuất dữ liệu của cơ sở dữ liệu rangerShop ra file JSON
Hình 4.18: File JSON của các collection trong cơ sở dữ liệu rangerShop
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1. Kết luận 5.1.1. Ưu iểm
- Đã nêu các thông tin cơ bản về MongoDB
- Đề cập các tính năng cơ bản: mô hình và cấu trúc dữ liệu, các phương thức 55 lOMoARcPSD| 27790909
CRUD trong MongoDB, tính năng Aggregation Operation
- Tìm hiểu ược một số tính năng nâng cao: Phân quyền xác thực, bảo mật,
Index, Replica Set, Sharded Cluster, sao lưu và khôi phục, nhập xuất dữ liệu
- Sử dụng các tính năng tìm hiểu ược trên một ứng dụng trên môi trường localhost 5.1.2. Nhược iểm
- Chưa tìm hiểu các phương thức bảo mật khác như x509, TLS/SSL. Chưa i sâu vào
một số tính năng trên MongoDB như change streams, time series, transactions
- Demo cần chỉnh sửa về tổ chức dữ liệu và hoàn thiện hơn về giao diện
- Chưa i sâu vào các phương pháp sao lưu như Filesystem Snapshots hoặc MongoDB Cloud Manager
5.2. Hướng phát triển
- Khắc phục các nhược iểm ề cập ở trên trên
- Tiến hành triển khai sharded cluster trên các máy chủ khác nhau thay vì tổ chức trên local
- Nghiên cứu cài ặt index ể tối ưu xử lý khi phân tán dữ liệu cho các shard trong sharded cluster.
TÀI LIỆU THAM KHẢO
[1] MongoDB Manual: https://www.mongodb.com/docs/manual/ [2] Demo:
https://drive.google.com/file/d/1PM7t07qmx4JeJPenqGWfoaYh6uFThohR/view?usp =sharing 56