1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

56 107 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo Đồ Án Tìm Hiểu Hệ Quản Trị Cơ Sở Dữ Liệu MongoDB
Tác giả Nguyễn Trí Vũ, Nguyễn Thanh Tuấn, Hồ Cảnh Công
Người hướng dẫn ThS. Lưu Thanh Sơn
Trường học Trường Đại Học Công Nghệ Thông Tin, Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Chuyên ngành Khoa học và Kỹ thuật Thông Tin
Thể loại Báo cáo đồ án
Năm xuất bản 2022
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 56
Dung lượng 8,31 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 2

3 Nội dung chi ti t ế

N ội dung 1: Gi i thi u v Mongoớ ệ ề DB

+ Đề 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 u ữ liệ

+ Đề 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 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

Trang 3

4 Phân công công vi c

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 vộ à ideo

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 ộ

Trang 4

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 6

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 8

2.1.4 Xác th c mô hự nh dữ liệu 9

2.1.5 Các mu thiết kế  c a mô h nh d  ữ liệu 10

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 17

2.3 Aggregation Operation 19

2.3.1 Aggregation Pipeline 19

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

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 23 ậ 3.1.3 Mã hóa truyền dữ liệu (TLS/SSL) 25

3.1.4 Mã hóa và bảo v d ệ ữ liệu 26

3.1.5 Kiểm tra (Auditing) 26

3.2 Index 26

3.2.1 Giới thiệu v Index 26 ề 3.2.2 T o m t index 27 ạ ộ 3.2.3 S dử ụng Index để ỗ trợ truy vấ h n 27

3.3 Replica Set 27

3.3.1 Giới thiệu v replica set 27 ề 3.3.2 C u trúc c a m t replica set 27 ấ  ộ 3.3.3 Các bước thiế ật l p m t replica set 29 ộ

3.4 Phân tán dữ u 29 liệ

Trang 5

3.4.1 Giới thiệu v Sharding 29 ề

3.4.2 Một số định nghĩa 30

3.4.3 Phương pháp Sharding 31

3.4.4 Zone trong Sharded Cluster 32

3.4.5 Cách tri n khai m t Sharded Cluster 32 ể ộ 3.5 Sao lưu và khôi phục 34

3.5.1 Sao lưu cơ sở ữ liệ d u v i mongdump 34 ớ 3.5.2 Khôi phục cơ sở ữ liệ d u v i mongorestore 35 ớ 3.6 Nhập và xu ất dữ liệ u 36

3.6.1 Nhập d ữ liệu vào Collection 36

3.6.2 Xuất dữ liệu t m t Collection 38 ừ ộ 3.7 Một số tính năng khác trên MongoDB 40

CHƯƠNG 4: DEMO TÍNH NĂNG TRÊN MONGODB 41

4.1 K ịch b n demo 414.2 Các chức năng sẽ demo 43

4.3 K ết qu demo 43ả CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 53

5.1 K ết luận 53

5.1.1 Ưu điểm 53

5.1.2 Nhược điểm 53

5.2 Hướng phát tri n 53

Trang 6

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

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ạ ệp CSVi t 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

Trang 7

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ở ữ liệu rangerShop dkè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 Hình 4.9: Kết quả ph n hả ồ a backend khi yêu ci 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ở ữ li u rangerShop 51 d ệ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ở ữ liệ d u rangerShop t bừ ản sao lưu 51 Hình 4.17: Kết quả khôi phục lại cơ sở ữ liệu b ng mongorestore 52 d Hình 4.18: File JSON ca các collection trong cơ sở d ữ liệu rangerShop 52

Trang 8

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ở ữ liệ d 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ở ữ liệ d u không quan h ệ(NoSQL), MongoDB không dựa trên cấu trc cơ sở ữ liệ d u quan hệ giống như bảng

mà sẽ lưu trữ và truy xuấ ữ liệu d ng documentt d ở ạ Đị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ề ảng theo hướng đối tượng dùng lưu trữ ữ liện t d u có c u ấtrúc phức tạp Không như các hệ qu n tr cả ị ơ sở ữ liệu khác lưu trữ ở d ng b ng, d ạ ảMongoDB lưu dữ ệu vào collection theo hướ li 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 đ

Trang 9

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ử ụng để dlư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 các thao tác với dữ liệu với cơ sở ữ liệu đ, trong mongosh dùng lệnh use <tên cơ sở d

dữ liệu>

Để tạo một cơ sở ữ liệu m i d ớ trong mongod, trong trường hợp cơ sở ữ liệu dkhông t n t i, MongoDB s tồ ạ ẽ ự động tạo cơ sở ữ liệ d 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 ớ trongmongosh MongoDB s tẽ ạo cơ sở ữ liệ d 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ở ữ liệ d 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ệ ớ MongoDB t v i như nhập xu t, ấsao lưu, khôi phục dữ liệu (mongodump và mongorestore),…

Trang 10

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ệ ấ a hệ qu n tr t c ả ị cơ sở ữ liệu và các m u truy xu d  ất dữ

liệu Khi thiết kế mô hình d ữ ệu, c n ph i luôn cân nhli ầ ả c về ệc sử ụ vi d ng d ữ ệu litrong ứ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 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 đổ ấu tri c c a c 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ỗ document i 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 ữ u d liệ

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 ữ liệu đượ D 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

Trang 11

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ở

- 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 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ộ ữ ệu “contact” d li

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 document a

Ví d ụ dưới đây sử ụ d ng một toá ử $jsonSchema để thiết lập c c quy tn t á c x c á

thực đối với vi c thêm dệ ữ ệu vli ào Collection “students”

Trang 12

Hình 2.2: Ví d t ụ hiế  t l p x c thc b ng JSON schema

Bng việc sử ụng đị d 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ớ ác trười c ng d ữ

liệu như: các trường nào là bt buộc, kiểu d ữ ệu cli a mỗi trường, gi á ị min/max, các trthô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 t ụ hiế  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

Trang 13

Xét ví d xây dụ ựng sơ đồ ố m i quan h mệ ột – ột giữ m a sinh viên và địa chỉ a csinh 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ớ ữ liệu sinh viên, th với việc dùng tham chi u si d ế ẽ đ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ữ ệu “SinhVien” như sau:li

district: "Thu Duc",

ward: “Linh Trung”

}

}

b) Quan hệ một – nhi ều s d ng nh ng d u  ụ  ữ liệ

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ể a một dữ liệ c u n m trong m ột

dữ liệu khác Tiế ụp t c với ví ụ ở trên, ta x d é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á ối ưu hơn làp t nhng các th c thự ể ca

dữ liệu địa chỉ v o trong d à ữ liệu sinh viên

district: "Thu Duc",

ward: “Linh Trung”

Trang 14

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ặ ạ ữ liệu c a môn hp l i d  ọc, gây lãng phí t i nguyên hà ệ thống Để tránh việc lưu trữ ặ ại dữ liệu c a môn h l p l  ọ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ữ ột m m ảng rấ ớn: t l

// MonHoc

{

_id: "mon_hoc_1",

name: "Quan ly thong tin",

students: [“sv_uit_1”, “sv_uit_2”, “sv_uit_3” …]

Trang 15

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: [] }

{ _id: "CoSoDuLieu", child: ["MongoDB", "PostgreSQL"] }

{ _id: "NgonNguLapTrinh", child: [] }

{ _id: "CongNgheThongTin", child: ["CoSoDuLieu", "NgonNguLapTrinh"] } { _id: "Sach", child: ["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,"}

Trang 16

{_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 u ữ liệ

C ph p á db.collection.insertOne() được sử dụng để thêm m t document v o ộ àCollection

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() v ktrả ề ế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  á

db.collection.insertMany() v à truyền v o mà ột mảng gồm các document

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” à trả ề sau khi thêm dữ liệ, v v u th nh công à

Trang 17

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ộ ố àm cật s h p nhật, chỉnh sửa dữ liệu v i tùy chọn ớ

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 {}

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

<field>:<value>, thể hiện dưới định d ng JSON vạ à truyền v o hà àm

Trang 18

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(<filter>, <update>, <options>)

- db.collection.updateMany(<filter>, <update>, <options>)

- db.collection.replaceOne(<filter>, <update>, <options>)

Trong đ, <filter> là điều kiện lọc document để thực hiện cập nhật, <update>

là c ph p c p nh t d á ậ ậ ữ liệu, với <options> à ml ộ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” và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”

Trang 19

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

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

Trang 20

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 ệ : Sử d ng ndb.collection.deleteMany(),

với tham số truyền v o th hià ể ện điều kiện để m kiế t 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

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í ụ a dữ ệu sinh viên đầu tiên niên kha 2020 d , x li

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

Trang 21

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 để v mtrả ề ột k t quế ả duy nhấ ; tPhân tích sự thay đổ a dữ liệi c 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

2.3.1 Aggregation Pipeline

Aggregation Pipeline bao gồm nhiều giai đoạn xử lý tà ệu: i li

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

Trang 22

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

db.orders.mapReduce(

function() { emit( this.cust_id, this.amount ); },

function(key, value) { return Array.sum( values) },

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 để t gọ r 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ạ map mapReducen có thể trả ề ết quả a thao tác dưới dạ v k c ng document hoặc có th ghi kể ết quả vào Collection

Trang 23

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ở ữ liệu, MongoDB cung cấp các tính dnă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 người dùng (Authentication) a

- 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 ở 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ở ữ liệu MongoDB cung c p 3 lo d ấ ạ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, ự

Trang 24

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ở ữ li u muốn được xác thực để truy c p d ệ ậ

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

- 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ớ mongod c n thii ầ ế ập t l

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

{ role: "userAdminAnyDatabase", db: "admin" },

{ role: "readWriteAnyDatabase", db: "admin" }

]})

- Bước 4: Bật chế độ ểm soát ngườ ki i truy c p c a mongod M file config ậ  ởmongod.conf và chỉnh sửa phần security thêm authorization: enabled

-

Trang 25

- 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 ự ả ừ ạ

- 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ả ớ ạo i t

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 Accesự s 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ở ữ li u d ệ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

Trang 26

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

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ở ữ liệu: dbAdmin, dbOwner, userAdmin d

- Các role cho người quản tr ị Cluster: Cơ sở ữ liệu admin c định nghĩa thêm dcác role để quản tr toàn bị ộ h thống thay vì mệ ột cơ sở ữ liệ d 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ở ữ liệu trừ local và config: d

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ộ ệ thố h ng: system

b) Role do ngưi dùng địnhnghĩ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ở ữ liệ d 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().

Trang 27

3.1.2.4 Thay đổi m t kh u và d u tùy chậ ẩ ữ liệ ỉ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 ẩ ữ ệu tùy chli ỉ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ở ữ liệ d 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ở ữ liệu c d ụ 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ọ

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 ữ ệu đang đượli c truyền đi MongoDB hỗ ợ TLS / SSL (Transport trLayer Security/Secure Sockets Layer) để mã hóa t t cả lưu lượng mạng ca ấ

Trang 28

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 u ệ ữ liệ

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ữ ới tính năng Encryption at Rest v(mã hóa ở trạng thái nghỉ a c) c a công c ụ lưu trữ WiredTiger, hoặ ử d ng mã hóa c s ụ

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ở ữ liệu, cho phép theo dõi dquyền truy cập và thay đổi cấu hnh cơ sở ữ liệ d 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ở ữ liệ d 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

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ệ ứng d ng cây nht, ụ ị 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 kt quả được

Ngày đăng: 17/08/2023, 10:32

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w