Tạo và cấu hình cơ sở dữ liệu

Một phần của tài liệu TIỂU LUẬN kết THÚC học PHẦN đề tài tìm HIỂU về hệ QUẢN TRỊ cơ sở dữ LIỆU MONGODB (Trang 29)

1. Tạo cơ sở dữ liệu

Cú pháp:

>use <tên database>

Lệnh use được sử dụng để trỏ đến một database cụ thể mà bạn muốn kết nối tới. Nếu database được gọi chưa tồn tại thì lệnh use sẽ tự động tạo một database mới trong hệ thống để trỏ tới.

Để xem các database có trong hệ thống, ta dùng câu lệnh:

>Show database Hoặc

>Show dbs

Nếu một database chưa có collections nào thì khi gọi lệnh SHOW, database đó sẽ không được hiển thị.

Ví dụ, đầu tiên ta có các database trong hệ thống như sau:

Sau đó ta tiến hành thêm một database tên mydata và được kết quả như hình dưới:

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

20

Có thể thấy, lúc này database mydata vừa tạo không được hiển thị do database này không chứa collection nào. Ta tiến hành thêm hai collection là book và user vào database mydata và được kết quả như sau:

5. Xóa database

Khi muốn xóa một database, đầu tiên ta phải dùng lệnh use để chọn database cần xóa, sau đó sử dụng lệnh drop để xóa như sau:

>USE <tên database> >Db.dropDatabase()

Giả sử ta muốn xóa database mydata vừa tạo ở bước trên, ta thực hiện như sau:

Như vậy, database mydata đã được xóa và trong hệ thống chỉ còn 3 database lúc đầu. AI. Sao lưu dữ liệu

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

21

kiểu mẫu dữ liệu JSON bằng việc thêm các thông tin cần thiết khác như loại dữ liệu, thứ tự field cũng như hỗ trợ encoding và decoding với các ngôn ngữ khác nhau. Do đó, khi backup và restore thường sử dụng file “BSON”.

Để sao lưu dữ liệu, ta sử dụng lệnh mongodump để tạo ra các file backup. Lệnh này sẽ kết xuất tất cả dữ liệu của Server vào trong dump directory. Mongo có nhiều tùy chọn sẵn có cho bạn lựa chọn để giới hạn lượng dữ liệu hoặc tạo file backup của Remote Server.

Cú pháp:

>mongodump

Lệnh này sẽ kết nối với Server đang chạy tại 127.0.0.1 và cổng 27017 và backup toàn bộ dữ liệu của Server tới thư mục /bin/dump. Kết quả của lệnh này như sau:

Một số tùy chọn sẵn có được sử dụng với lệnh mongodump được thể hiện ở bảng saui:

22

MongoDB còn cho phép người dùng một số tính năng như: - Đặt lịch backup

- Kết hợp output thư mục theo ngày tháng

- Nén thư mục chứa Cơ sở dữ liệu MongoDB vừa được backup ra

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

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

Để phục hồi dữ liệu đã sao lưu trong MongoDB, ta sử dụng lệnh mongorestore. Cú pháp:

>mongorestore

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

Khi chạy lệnh này, hệ thống sẽ tự động phục hồi tất cả các dữ liệu đã được sao lưu trước đó từ thư mục sao lưu.

Kết quả của lệnh này như sau:

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

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

I. Bộ sưu tập (Collection)2. Tạo Collection 2. Tạo Collection

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

23

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

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

Trong đó, options là các tùy chọn kèm theo như kích thước, khả năng index,... được thể hiện ở bảng sau:

Bảng 5 Các tùy chọn cấu hình cho Collection Nguồn: MongoDB Documentation

Tham số capped size max autoIndexId usePowerOf2Sizes noPadding storageEngine validator validationLevel validationAction

indexOptionDefaults viewOn

pipeline

collation writeConcer

Tương tự như xem các databases trong hệ thống ,để xem các collections có trong database, ta sử dụng câu lệnh:

>Show collections

Ví dụ, trong database shopping đã tạo ở trên , ta tạo một collection tên “car” như sau:

Các collections ban đầu của database shopping

Thực hiện lệnh create tạo collection “Car” Xuất hiện collection car trong danh sách collecions

Ta cũng có thể tạo collection theo một cách khác. Đó chính là insert một tài liệu (document) và collection vào database. Khi đó, collection được insert dữ liệu vào chưa tồn tại, hệ thống sẽ tự động tạo collection mới để insert vào.

25

Ví dụ ta thêm một document với các dữ liệu như sau vào collection sneaker trong khi chưa có collection này trong hệ thống:

Để xóa collection không cần dùng tới nữa , ta sử dụng lệnh drop(). Cú pháp:

>db.<tên collection>.drop()

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

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

26

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

3. Các thao tác CRUD

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

Thao tác Cú pháp

Insert >db.<tên

collection>.insertOne()

>db.<tên

collection>.insertMany()

Read >db.<tên collection>.find()

Update >db.<tên collection>.updateOne() >db.<tên collection>.updateMany() Delete >db.<tên collection>.deleteMany()

>db.<tên

collection>.deleteOne() 4. Một số toán tử so sánh

Bảng 7. Các toán tử so sánh trong MongoDB. Nguồn:viblo.asia

Name $eq $gt $gte $in $lt $lte $ne $nin AI. Khung nhìn

Khung nhìn (view) trong MongoDB là một đối tượng có thể truy vấn, có nội dung được xác định bởi một câu truy vấn tổng hợp trên các collection hoặc các views khác. MongoDB không hỗ trợ thao tác chỉnh sửa đối với các khung nhìn

1. Tạo khung nhìn

Để tạo một khung nhìn, ta có 2 cách để tạo :

- Sử dụng phương thức createCollection(). Cú pháp: db.createCollection( "<viewName>", { "viewOn" : "<source>", "pipeline" : [<pipeline>], "collation" : { <collation> } } ) - Sử dụng lệnh create. Cú pháp: db.createView( "<viewName>", "<source>", [<pipeline>], { "collation" : { <collation> } } ) 28

4. Các hạn chế trên khung nhìn

- Chỉ cho phép đọc: khung nhìn chỉ cho phép đọc, các thao tác chỉnh sửa trên khung nhìn đều sẽ gặp lỗi.

- Không thể thay đổi tên của khung nhìn

- Chỉ có thể chỉ định một Collation (đối chiếu) tại thời điểm khởi tạo. Nếu không được chỉ định, hệ thống sẽ tự động chỉ định Collation là đối chiếu nhị phân đơn giản. Nghĩa là khung nhìn không được kế thừa Collation mặc định của Collection.

- Khi sử dụng phương thức find(), khung nhìn không hỗ trợ các phép toán và phép chiếu như: $, $elemMatch, $slice, $meta.

5. Các thao tác được hỗ trợ trên khung nhìn:

Bên cạnh các hạn chế nêu trên, MongoDB hỗ trợ các thao tác sau trong khung nhìn, được thể hiện ở bảng sau [1]:

Bảng 8 Các thao tác trên view

Lệnh create collMod find distinct count BI. Chỉ mục

Như đã đề cập ở mục thành phần của MongoDB, chỉ mục (index) giúp việc truy vấn dữ liệu trở nên hiệu quả hơn. Nếu không có chỉ mục, MongoDB sẽ phải quét một lượng lớn dữ liệu để chọn ra các document kết nối với lệnh truy vấn.

Để tạo một chỉ mục, ta sử dụng phương thức ensureIndex() của MongoDB. Cú pháp: Trong đó:

>db.<tên collection>.ensureIndex({field: value})

- Field là tên trường cần tạo chỉ mục

- Value có giá trị là 1 để tạo chỉ mục theo thứ tự tăng dần hoặc -1 để tạo theo thứ tự giảm dần.

29

Phương thức ensureIndex() cho phép truyền nhiều trường khác nhau, các trường phân biệt nhau bởi dấu “,”. Phương thức này cũng cung cấp danh sách các tùy chọn được liệt kê trong bảng dưới đây

Bảng 9 Danh sách các tùy chọn để tạo chỉ mục2

Tham số background unique name dropDups sparse

2Tham khảo Hoclaptrinh.vn

30

expireAfterSeconds

v

weights

default_language

language_override

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

Trong MongoDB không có khái niệm tương đương với SP trong SQL nhưng nó cung cấp một tính năng có chức năng tương tự là Stored Javascript. Ta có thể lưu trữ một Javascript logic trong một collection đặc biệt và sử dụng lại khi cần thiết.

Giả sử, ta cần tạo một hàm để cộng hai số với hai tham số đầu vào và trả về tổng của chúng. Hàm này được viết trong javascript như sau:

function sum ( x , y ) { return x + y ; }

MongoDB cung cấp một collection đặc biệt trong mọi cơ sở dữ liệu tên là system.js – đây là nơi chứa các hàm Javascript tùy chỉnh của người dùng. Để thêm hàm mới vào collection này ta thực hiện như sau:

31

Cú pháp :

>db.system.js.save()

Áp dụng:

Ở đây, ta chuyển tên hàm vào field _id và chuyển thân hàm vào field value để dễ dàng gọi hàm sau này.

Lúc này, hàm đã được lưu trữ trong collection system.js . Giả sử ta có một collection chứa các document như sau:

Bây giờ, ta sẽ dùng hàm sum vừa tạo ở bước trên để kiểm tra xem các document thỏa mãn x+y = 8. Ta sẽ dùng bộ $where để kiểm tra điều kiện này như sau:

32

Ta cũng có thể xem lại danh sách các hàm đã được lưu trữ. Vì các hàm này đều được lưu trữ trong một system.js như một collection bình thường nên ta sử dụng phương thức find() để tìm tất cả các hàm được lưu trữ:

V. Ràng buộc

Do MongoDB là một cơ sở dữ liệu NoSQL nên trong hệ quản trị này không có các ràng buộc như khóa ngoại trong các cơ sở dữ liệu SQL. Tuy nhiên trong MongoDB cung cấp giá trị “_id” được tự động tạo cho mỗi document. Giá trị này là duy nhất và được xem như là primary key.

Tuy nhiên, nếu ta muốn tạo ra các ràng buộc trên nhiều Field, ta có thể thực hiện điều này bằng cách tạo ra một collection có chức năng hoạt động như một Collection proxy. Collection này sẽ gồm các dữ liệu tham chiếu đến document gốc hay ObjectId của document này và unique key do ta tạo ra.

Ví dụ ta có một collection “user” như sau:

Trong collection này ta có thể thấy, bên cạnh _id ObjectId thì địa chỉ email cũng là một thuộc tính duy nhất. Như thế ta có thể dùng giá trị này để làm khóa duy nhất. Khi đó, Collection proxy sẽ có những dữ liệu sau

33

Trong MongoDB, ta sẽ dùng chỉ mục duy nhất (Unique Index) để hiện thực hóa điều này:

Một số lưu ý khi sử dụng unique key:

- Ứng dụng sử dụng cơ sở dữ liệu này phải có bắt lỗi khi chèn document và collection proxy và phải có tính nhất quán giữa các collection liên quan. - Nếu collection proxy yêu cầu phân đoạn thì ta phải thực hiện phân đoạn trên

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

- Để áp dụng tính duy nhất trên nhiều Field bằng proxy phân đoạn, ta phải có tập hợp các proxy cho mọi Field. Nếu tạo nhiều unique index trên một proxy thì sẽ không thể chia nhỏ các collection proxy để sử dụng.

VI. Bẫy lỗi (Trigger)

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

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

I. Quyền và vai trò (role) trong MongoDB

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

1. Các quyền và vai trò tích hợp có sẵn trong hệ thống

Trong MongoDB, các role có sẵn này được chia ra làm 4 nhóm role : a) Nhóm Database User Roles

34

Các role thuộc nhóm này được thiết lập riêng cho một database được chỉ định và chỉ cho phép người dùng thao tác trên dữ liệu chứ không cho phép tác động đến các user khác trong hệ thống. Các role này thường được phân quyền cho các client. Nhóm này bao gồm hai quyền như sau:

Bảng 10 Nhóm Database User Roles

Role Read

readWrite

b) Nhóm Database Administration Roles

Với nhóm role này, hệ thống sẽ cấp một số quyền quản trị nhất định trên một database được chỉ định cho user. Bao gồm các role như sau:

Bảng 11 Nhóm Database Administration Roles

Role dbAdmin

userAdmin

dbOwner

c) Nhóm All Database Roles

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

Bảng 12 Nhóm All Database Roles

Roles readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase d) Nhóm Supperuser Roles

Nhóm role này chỉ có duy nhất một role đó là Root. Đây là quyền cao nhất trong hệ quản trị cơ sở dữ liệu MongoDB. Với quyền này người dùng có thể thực hiện mọi thao tác trên hệ thống như cung cấp quyền truy cập ,quản trị cơ sở dữ liệu ,truy cập đến mọi

36

nguồn lực trong cơ sở dữ liệu... Do đó quyền này chỉ được phân cho người quản trị có quyền cao nhất trong hệ thống.

Ngoài các nhóm role phân quyền theo cấp database và cấp hệ thống như trên, MongoDB còn có các nhóm role như: Backup and Restoration Roles, Cluster Administration Roles,...

2. Tạo quyền và vai trò tùy chỉnh (Role)

Bên cạnh các role được tích hợp sẵn trong hệ thống, MongoDB cũng cho phép người dùng tự tạo ra các role tùy chỉnh và thiết lập các đặc quyền riêng phù hợp với mong muốn của họ. Một yêu cầu được đặt ra khi ta tạo một role mới đó là ta phải tạo role trong một database cụ thể. Vì trong MongoDB, hệ quản trị này sử dụng sự kết hợp giữa tên database và role để đảm bảo rằng mỗi role là duy nhất. Ngoại trừ các role được tạo trong database admin thì một role chỉ có thể bao gồm các đặc quyền áp dụng cho database của nó và chỉ có thể kế thừa từ các role khác trong database của nó. Nếu một role được tạo trong database admin, thì nó có thể bao gồm các đặc quyền áp dụng cho database này, bao gồm các quyền admin, quản lý cluster và có thể kế thừa từ các role khác trong tất cả các database trong hệ thống.

Để dễ dàng quản lý các role tùy chỉnh này, MongoDB lưu trữ thông tin của chúng trong một collection đặc biệt tên là system.roles thuộc database admin. Collection này không cho phép truy cập trực tiếp vài mà phải sử dụng các lệnh quản lý role để xem và chỉnh sửa.

Khi muốn tạo một role mới, ta sử dụng phương thức db.createRole(). Giả sử, ở đây ta

Một phần của tài liệu TIỂU LUẬN kết THÚC học PHẦN đề tài tìm HIỂU về hệ QUẢN TRỊ cơ sở dữ LIỆU MONGODB (Trang 29)

Tải bản đầy đủ (DOCX)

(52 trang)
w