Tải bản đầy đủ (.doc) (94 trang)

HỆ QUẢN TRỊ cơ sở dữ LIỆU NOSQL và ỨNG DỤNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.05 MB, 94 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI

PHẠM MINH SƠN

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
NOSQL VÀ ỨNG DỤNG

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

HÀ NỘI, 2015


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI

PHẠM MINH SƠN

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
NOSQL VÀ ỨNG DỤNG
Chuyên ngành: Hệ thống thông tin
Mã số: 60.480.104

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

GIẢNG VIÊN HƯỚNG DẪN: PGS.TS PHẠM THỌ HOÀN

HÀ NỘI, 2015


LỜI CẢM ƠN


Chúng em xin gửi lời cảm ơn sâu sắc đến thầy Phạm Thọ Hoàn, đã giúp đỡ, tạo
điều kiện cho nhóm hoàn thành tốt luận văn tốt nghiệp này. Thầy đã tận tình hướng dẫn
và đưa ra những nhận xét vô cùng quý giá để đề tài ngày càng hoàn thiện hơn. Những
góp ý của thầy giúp cho chúng em tiếp cận, hiểu rõ và giải quyết vấn đề dễ dàng hơn.
Đồng thời, chúng em cũng xin bày tỏ lòng biết ơn đến quý thầy, cô Trường Đại
Học Sư Phạm Hà Nội, đặc biệt là các thầy, cô khoa Công nghệ Thông Tin đã tận tình
truyền đạt kiến thức, kinh nghiệm cho em từ những ngày đầu học tập tại trường. Sự
nhiệt tình của các thầy, cô đã giúp cho chúng em có kiến thức nền tảng vững chắc cũng
như kinh nghiệm thực tiễn quý báu để chúng em có thể hoàn thành tốt các nhiệm vụ
học tập, làm việc và nghiên cứu.
Bên cạnh đó, em cũng gửi lời cảm ơn đến gia đình, các anh, chị, bạn bè đã động
viên, giúp đỡ chúng em rất nhiều trong quá trình học tập cũng như trong cuộc sống.
Hà Nội, ngày 15 tháng 10 năm 2015
Học viên thực hiện

Phạm Minh Sơn

1


MỤC LỤC
LỜI CẢM ƠN................................................................................................1
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI..............................................................6
0.1 VẤN ĐỀ TÌM HIỂU:...........................................................................................6
Sơ đồ 1: Hiệu suất hoạt động SQL và MONGODB.................................................8
0.2 MỤC TIÊU ĐỀ TÀI:............................................................................................8

CHƯƠNG II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU QUAN HỆ VÀ NOSQL 10
1. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU:.....................................................................10
Mô hình tổ chức dữ liệu trong CSDL quan hệ.......................................................12

Sơ đồ 2: Tổ chức dữ liệu trong CSDL quan hệ.....................................................12
2. THAO TÁC VỚI DỮ LIỆU:..............................................................................12
II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU NOSQL......................................................18
2.1 Thuật ngữ NoSQL............................................................................................18
Bảng 1: Bảng tương quan giữa RDBMS và NoSQL..............................................20
2.5. Phân loại NoSQL...........................................................................................23
2.6. Các thao tác dữ liệu trên Document Store.......................................................24
a, MongoDB............................................................................................................24
b, CouchDB.............................................................................................................25
c, RavenDB..............................................................................................................26
d. Cassandra.............................................................................................................27
3. SO SÁNH GIỮA NOSQL VÀ RDBMS............................................................42
Sơ đồ 3: Các đối tượng và các mối quan hệ của các đối tượng............................45
Sơ đồ 4: Sơ đồ về lớp của các đối tượng................................................................46
2


CHƯƠNG 3;................................................................................................57
THIẾT KẾT MỘT ỨNG DỤNG TRÊN HỆ QUAN TRỊ............................57
CƠ SỞ DỮ LIỆU NOSQL...........................................................................57
1. Giới thiệu về hệ thống quản lý blog....................................................................57
2. Phân tích yêu cầu.................................................................................................58
3. Thực hiện bằng cách sử dụng MongoDB...........................................................58
a, Phân rã chức năng blog:......................................................................................62
Sơ đồ 6: Thiết kế mô hình 3 tầng: Clients – Web server – Database server..........64
Sơ đồ 7: Use case trong trường hợp chưa đăng nhập.............................................65
Sơ đồ 8: Use case của Member...............................................................................66
Bảng 3: Mô tả Usecase đăng nhập..........................................................................67
Bảng 4: Mô tả Usecase đăng ký..............................................................................68
Bảng 5: Mô tả Usecase tìm kiếm............................................................................68

Bảng 6: Mô tả Usecase xem topic...........................................................................69
Bảng 7: Mô tả Usecase đăng bình luận...................................................................70
Bảng 8: Mô tả Usecase đăng topic..........................................................................70
Bảng 9: Mô tả Usecase xoá Topic..........................................................................71
Sơ đồ 9: Sequence diagram của chức năng Login..................................................72
Sơ đồ 10: Sequence diagram thực hiện chức năng Register..................................74
Sơ đồ 11: Sequence diagram của chức năng đăng bình luận.................................75
Sơ đồ 12: Sequence diagram của chức năng tìm kiếm...........................................76
Bảng 10: Danh sách màn hình................................................................................83

KẾT LUẬN CHƯƠNG III...........................................................................90
3


KẾT LUẬN LUẬN VĂN............................................................................91
TÀI LIỆU THAM KHẢO............................................................................92
9. />
DANH MỤC BẢNG VÀ SƠ ĐỒ
Sơ đồ 1: Hiệu suất hoạt động SQL và MONGODB.......................................8
Sơ đồ 2: Tổ chức dữ liệu trong CSDL quan hệ............................................12
Bảng 1: Bảng tương quan giữa RDBMS và NoSQL....................................20
Sơ đồ 3: Các đối tượng và các mối quan hệ của các đối tượng...................45
Sơ đồ 4: Sơ đồ về lớp của các đối tượng.......................................................46
Sơ đồ 6: Thiết kế mô hình 3 tầng: Clients – Web server – Database server. 64
Sơ đồ 7: Use case trong trường hợp chưa đăng nhập....................................65
Sơ đồ 8: Use case của Member.....................................................................66
Bảng 3: Mô tả Usecase đăng nhập................................................................67
Bảng 4: Mô tả Usecase đăng ký....................................................................68
Bảng 5: Mô tả Usecase tìm kiếm..................................................................68
Bảng 6: Mô tả Usecase xem topic.................................................................69

Bảng 7: Mô tả Usecase đăng bình luận.........................................................70
Bảng 8: Mô tả Usecase đăng topic................................................................70
Bảng 9: Mô tả Usecase xoá Topic.................................................................71
Sơ đồ 9: Sequence diagram của chức năng Login........................................72
Sơ đồ 10: Sequence diagram thực hiện chức năng Register.........................74

4


Sơ đồ 11: Sequence diagram của chức năng đăng bình luận........................75
Sơ đồ 12: Sequence diagram của chức năng tìm kiếm..................................76
Bảng 10: Danh sách màn hình.......................................................................83

DANH MỤC HÌNH ẢNH
Hình 1: Ví dụ cơ bản về Key/ value..............................................................22
Hình 2: Thiết kế hệ thống database Master -Slave........................................22
Hình 3: MongoDB.........................................................................................25
Hình 4: CouchDB..........................................................................................26
Hình 5: RavenDB..........................................................................................26
Hình 6: Kiến trúc client-server......................................................................27
Hình 7: Cassandra.........................................................................................28
Hình 8: Hadoop ............................................................................................29
Hình 9. Minh họa bộ sưu tập.........................................................................33
Hình 10. Mô hình Master – Slave hai nút.....................................................39
Hình 11. Mô hình Master – Slave bốn nút....................................................39
Hình 12. Mô hình Replica Sets hai nút.........................................................40
Hình 13. Replica Sets – Bầu chọn master mới..............................................40
Hình 14. Server chính trở thành server cấp 2................................................41
Bảng 2: Một số so sánh giữa RDBM và NoSQL..........................................56
Hình 15: Thư mục cài đặt Mongodb............................................................60

Hình 16: Cấu hình khởi động Mongodb.......................................................61
Hình 17: Cài đặt thành công Mongodb

...............................62

Sơ đồ 5: Sơ đồ phân rã chức năng của Member............................................63
Hình 18 Màn hình giao diện chính................................................................84
Hình 19: Màn hình đăng ký:.........................................................................85
Hình 20: Màn hình đăng nhập:......................................................................86
Hình 21: Màn hình tạo mới bài viết.............................................................87
Hình 22: Màn hình danh sách bài viết...........................................................88
5


Hình 2.3: Màn hình bài viết và tất cả các bình luận:.....................................89

CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI
0.1 VẤN ĐỀ TÌM HIỂU:
Ngày nay với kỹ nguyên công nghệ bùng nổ, thành công của Internet đã khiến cho
số lượng người dùng truy cập vào cùng một hệ thống ngày càng tăng. Điển hình như
Facebook một tháng phục vụ hơn 1000 tỉ truy cập và hơn 800 triệu lượt khách ghé thăm
thì ta mới hình dung được sự bùng nổ của thông tin như thế nào. Để giải quyết vấn đề
bùng nổ như trên thì chúng ta đã mở rộng các hệ thống máy chủ siêu lớn, phân thành
6


nhiều cụm đặt khắp nơi trên thế giới. Nhưng với tốc độ phát triển theo cấp số như hiện
nay thì việc tăng số lượng máy chủ thôi vẫn chưa đủ. Ta cần xem xét và nâng cấp các
giải pháp lưu trữ cho tương lai.
Hệ thống máy chủ cơ sở dữ liệu đòi hỏi phải rất mạnh mẽ nếu không máy chủ sẽ

bị quá tải. Với các hệ thống với số lượng lên đến hàng triệu cho đến hàng tỉ thì việc
hiệu năng tốt là việc bắt buộc.Các hệ RDBMS hiện nay thì vấn đề hiệu năng thường
không tốt cho trường hợp này. Ngôn ngữ SQL là ngôn ngữ thông dịch với các ràng
buộc trong các bảng khiến cho hiệu năng thực sự của hệ thống cơ sở dữ liệu khi thực
thi là khá ì ạch với hệ thống lớn như kể rên. Chưa kể là với hệ thống lớn thì vấn đề
phân tán dữ liệu, tính toàn vẹn dữ liệu là việc rất quan trọng. NoSQL đáp ứng được tất
cả các yêu cầu này.Với tốc độ nhanh do không phải qua các câu truy vấn SQL, có tính
sẵn sàng, phân tán cao và độ ổn định tuyệt vời, NoSQL rất thích hợp cho các hệ thống
có số lượng lượt truy vấn lớn..
Mục tiêu mà NoSQL nhắm đến đó là hiệu suất hoạt động cao với số lượng dữ liệu
cực lớn. Tuy nhiên để đạt được điều đó thì NoSQL đã bỏ qua thông dịch trong SQL
cùng với những truy vấn rườm ra. Việc sử dụng các ràng buộc quan hệ cùng truy vấn
SQL có vẻ thân thiện và thích hợp với phần đông dữ liệu. Tuy nhiên, nếu dữ liệu quá
đơn giản, các thủ tục SQL sẽ không cần thiết (theo Curt Monash - một nhà phân tích cơ
sở dữ liệu, một blogger). Đồng thời NoSQL cũng có cách thiết kế dữ liệu khác với cơ
sở dữ liệu truyền thống như: tư tưởng thiết kế dữ liệu phi quan hệ, lưu trữ dữ liệu dạng
document, sử dụng tối đa indexes… Trong các đặc tính đó, dữ liệu phi quan hệ là một
yếu tố quan trọng góp phần làm nên thành công cho NoSQL. Dữ liệu phi quan hệ tức là
không tuân theo các dạng chuẩn hóa mà cơ sở dữ liệu RDBMS đặt ra. Thay vào đó, khi
thiết kế một cơ sở dữ kiệu NoSQL ta phải tuân theo một số quy tắc mới mà NoSQL đặt
ra để đạt được hiệu suất hoạt động cao.
Bảng dưới đây chỉ ra kết quả làm việc trên SQL và cơ sở dữ liệu MongoDB:

7


Sơ đồ 1: Hiệu suất hoạt động SQL và MONGODB
Chính sự khác biệt giữa 2 loại cơ sở dữ liệu này dẫn đến cách thiết kế cũng khác
nhau. Đa số các lập trình viên đều quen với mô hình quan hệ truyền thống, do đó cần
phải tìm hiểu kĩ cách thiết kế dữ liệu của NoSQL để đạt được hiệu suất mong muốn.

Đồng ý rằng RDBMS cung cấp một mô hình tuyệt vời để đảm bảo tính toàn vẹn
dữ liệu. Tuy nhiên, rất nhiều người lựa chọn NoSQL đã nói rằng chúng không quá cần
thiết cho nhu cầu của họ.
Như vậy, trong đề tài này chúng tôi sẽ tìm hiểu xem NoSQL đã giải quyết các vấn
đề trên như thế nào và áp dụng kiến thức tìm hiểu đó vào việc xây dựng một ứng dụng
sử dụng cơ sở dữ liệu dạng NoSQL.
0.2 MỤC TIÊU ĐỀ TÀI:
- Sơ lược lại hệ quản trị cơ sỡ dữ liệu quan hệ RDBMS.
- Tìm hiểu NoSQL, kiến trúc, phân loại và tìm hiểu một số CSDL NoSQL, đi sâu
nghiên cứu về MongoDB để có cái nhìn tổng quan về NoSQL đồng thời biết được cách
mà NoSQL đã giải quyết được vấn đề hiệu suất cao với lượng dữ liệu lớn như thế nào.
- Tìm hiểu trường hợp áp dụng cơ sở dữ liệu dạng NoSQL, trường hợp nào không
phù hợp với NoSQL. Phân tích làm rõ ưu khuyết điểm của việc áp dụng cơ sở dữ liệu

8


NoSQL. So sánh giữa việc sử dụng cơ sở dữ liệu RDBMS và cơ sở dữ liệu NoSQL trên
cùng một ứng dụng.
- So sánh hiệu suất giữa một cơ sở dữ liệu dạng NoSQL và cơ sở dữ liệu dạng
RDBMS để làm rõ hiệu suất hoạt động của NoSQL.
- Sử dụng các kiến thức về NoSQL để xây dựng một ứng dụng sử dụng cơ sở dữ
liệu dạng NoSQL đồng thời để tổng hợp lại kiến thức đã học trước đây. Ở đây chúng tôi
quyết định xây dựng một website blog cho phép các người dùng có thể chia sẻ, thảo
luận về những bài viết của mình.

9


CHƯƠNG II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU QUAN HỆ VÀ NOSQL

1. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU:
1.1 Định nghĩa hệ quản trị CSDL quan hệ.
CSDL (Database): Là một tập hợp có tổ chức bao gồm các dữ liệu có liên quan luận
lý với nhau và được dùng chung. Các CSDL được dùng để lưu trữ dữ liệu một cách
hiệu quả và có tổ chức sao cho quản lý được nhanh chóng và dễ dàng.
Mô hình CSDL dữ liệu quan hệ được Codd đề xuất năm 1970 và đến nay trở thành
mô hình được sử dụng phổ biến trong các hệ quản trị cơ sở dữ liệu thương mại. Nói một
cách đơn giản, một cơ sở dữ liệu quan hệ là một cơ sở dữ liệu trong đó tất cả dữ liệu
được tổ chức trong các bảng có mối quan hệ với nhau.
Hệ quản trị CSDL (Database Management System - DBMS): là một bộ phần mềm
cho phép người sử dụng định nghĩa, tạo lập, bảo trì và điều khiển truy xuất vào CSDL.
Hệ quản trị CSDL (Relational Database Management System – RDBMS): là một
hệ quản trị CSDL mà được xây dựng dựa trên mô hình CSDL quan hệ.
1.2. Các khái niệm cơ bản trong CSSL quan hệ:
Table: Trong cơ sở dữ liệu quan hệ, bảng là đối tượng được sử dụng để tổ chức và
lưu trữ dữ liệu. Một cơ sở dữ liệu bao gồm nhiều bảng và mỗi bảng được xác định duy
nhất bởi tên bảng. Một bảng bao gồm một tập các dòng và các cột: mỗi một dòng trong
bảng biểu diễn cho một thực thể và mỗi một cột biểu diễn cho một tính chất của thực
thể.Như vậy, liên quan đến mỗi một bảng bao gồm các yếu tố sau
Tên của bảng: được sử dụng để xác định duy nhất mỗi bảng trong cơ sở dữ liệu.
Cấu trúc của bảng: Tập các cột trong bảng. Mỗi một cột trong bảng được xác định
bởi một tên cột và phải có một kiểu dữ liệu nào đó.
Row: Tổ hợp những giá trị của Column trong bảng. Một row còn được gọi là 1
record (bản ghi).
Column: Quy định một loại dữ liệu trong bảng. Ví dụ: loại dữ liệu tên phòng ban có
trong bảng phòng ban. Ta thể hiển thịcolumn này thông qua tên column và có thể kèm

10



theo một vài thông tin khác về column như kiểu dữ liệu, độ dài của dữ liệu.
Field: Giao của column và row. Field chính là nơi chứa dữ liệu. Nếu không có dữ
liệu trong field ta nói field có gia trị là NULL.
Khoá của bảng: Trong một cơ sở dữ liệu được thiết kế tốt, mỗi một bảng phải có
một hoặc một tập các cột mà giá trị dữ liệu của nó xác định duy nhất một dòng trong
một tập các dòng của bảng.
Tập một hoặc nhiều cột có tính chất này được gọi là khoá của bảng.Việc chọn khoá
của bảng có vai trò quan trọng trong việc thiết kế và cài đặt các cơ sởdữ liệu quan hệ.
Các dòng dữ liệu trong một bảng phải có giá trị khác nhau trên khoá. Một bảng có thể
có nhiều tập các cột khác nhau có tính chất của khoá (tức là giá trị của nó xác định duy
nhất một dòng dữ liệu trong bảng). Trong trường hợp này, khoá đượcchọn cho bảng
được gọi là khoá chính (primary key) và những khoá còn lại được gọi làkhoá phụ hay là
khoá dự tuyển (candidate key/unique key).
Mối quan hệ và khoá ngoài: Các bảng trong một cơ sở dữ liệu không tồn tại độc
lập mà có mối quan hệ mật thiết với nhau về mặt dữ liệu. Mối quan hệ này được thể
hiện thông qua ràng buộc giá trị dữ liệu xuất hiện ở bảng này phải có xuất hiện trước
trong một bảng khác. Mối quan hệ giữa các bảng trong cơ sở dữ liệu nhằm đàm bảo
được tính đúng đắn và hợp lệ của dữ liệu trong cơ sở dữ liệu.
Mối quan hệ giữa các bảng trong một cơ sở dữ liệu thể hiện đúng mối quan hệ giữa
các thực thể trong thế giới thực. .Khái niệm khoá ngoài (Foreign Key) trong cơ sở dữ
liệu quan hệ được sử dụng để biểu diễn mối quan hệ giữa các bảng dữ liệu. Một hay
một tập các cột trong một bảng mà giá trị của nó được xác định từ khóa chính của một
bảng khác được gọi là khoá ngoài.

11


Mô hình tổ chức dữ liệu trong CSDL quan hệ

Sơ đồ 2: Tổ chức dữ liệu trong CSDL quan hệ

Nhìn vào sơ đồ trên chúng ta thấy rằng, rằng buộc trên cơ sở dữ liêu quan hệ là hết
sức chặt chẽ, do đó khi quá mở rộng hệ thống sẽ gặp không ít khó khăn, ó thể làm phá
vỡ các rằng buộc quan hệ đó. Ngoài ra việc truy vấn dữ liệu giữa nhiều bảng nhưng vẫn
đòi hỏi đảm bảo các rằng buộc toàn vẹn đã tạo nên một thách thức mà hệ cơ dữ liệu
quan hệ cần nghiên cứu và xử lý.
2. THAO TÁC VỚI DỮ LIỆU:
2.1. Các lệnh định nghĩa dữ liệu:
2. 1.1. Lệnh CREATE
12


- Ý nghĩa: Lệnh CREATE dùng để tạo các đối tượng cơ sở dữ liệu như các bảng,
các view, các tệp chỉ số .v.v…
- Cú pháp:
0

CREATE

TABLE


bảng>(
sách:

Tên_cột

Kiểu_cột>


sách:

Tên_cột

Kiểu_cột>

<Điều_kiện_kiểm_soát_dl>)
1

CREATE

VIEW


View>(
<Điều_kiện_kiểm_soát_dl >) AS Q; với Q là một khối câu lệnh
SELECT định nghĩa khung nhìn (view).
2

CREATE [UNIQUE] INDEX <tên chỉ số> ON <Ten bảng>(Tên cột
[ASC|DESC])

- Một số kiểu dữ liệu: Integer - số nguyên; float- dấu phảy động; char - ký tự,
datetime- ngày tháng, boolean,…
- Ví dụ. Sử dụng câu lệnh CREATE.
CREATE TABLE S (S# Integer NOT NULL, SNAME Char(30),
STATUS Integer, CITY Char(50)) PRIMARY KEY (S#);
CREATE VIEW vieS (S# Integer NOT NULL, SNAME Char(30)) AS

SELECT S#, SNAME FROM S;
CREATE INDEX index1 ON SP(S# ASC, P# DESC)

2.1.2. Lệnh thay thế sửa đổi ALTER
- Ý nghĩa: Dùng để thay đổi cấu trúc lược đồ của các đối tượng CSDL.
- Cú pháp:
ALTER TABLE <Tên bảng> <Thực hiện các lệnh trên cột> Các lệnh
trên cột có thể là:


Xóa một cột: Delete <tên cột>



Thêm một cột: Add <Tên cột>



Thay đổi tên cột: Change column <Tên cột>To<Tên cột>



Xóa khóa chính: Drop PRIMARY KEY



Xóa khóa ngoại: Drop FOREIGN KEY




Thiết lập khóa chính: PRIMARY KEY (Tên cột)
Thiết lập khóa ngoại: FOREIGN KEY (Tên cột) REFERENCES TO
<tên bảng ngoài>

ALTER VIEW <Tên View>(<Danh sách: Tên_cột Kiểu_cột>
<Điều_kiện_kiểm_soát_dl >) AS Q; với Q là một khối câu lệnh
SELECT định nghĩa khung nhìn (view).

13


Ví dụ: Thay đổi cấu trúc của bảng NHANVIEN
ALTER TABLE NHANVIEN Add Quequan char(50);
ALTER TABLE NHANVIEN Delete Ngaysinh;

Xoá cấu trúc DROP
- Ý nghĩa: Dùng để xóa các đối tượng cơ sở dữ liệu như Table, View, Index…
- Cú pháp:
DROP TABLE <Tên bảng>
DROP VIEW <Tên view>
DROP INDEX <Tên index>

2.2. Các lệnh cập nhật dữ liệu:
2.2.1. Lệnh Insert
- Ý nghĩa: Dùng để chèn một hàng hoặc một số hàng cho bảng.
- Cú pháp:
INSERT INTO <Tên bảng> (Danh sách các cột) VALUES (Danh sách các giá
trị) hoặc
INSERT INTO <Tên bảng> (Danh sách các cột) (Các câu hỏi con);


Ví dụ: Chèn dữ liệu vào bảng S.
INSERT INTO S (S#, SNAME, STATUS)
VALUES (s1, Smith, 20, Paris);
INSERT INTO S
SELECT * FROM W WHERE CITY="Paris";

2.2.2. Lệnh Update
- Ý nghĩa: Dùng để sửa đổi dữ liệu.
- Cú pháp:
UPDATE <Tên bảng>
SET <Tên_cột_1=Biểu_thức_1, Tên_cột_2=Biểu_thức_2,… >S
[WHERE <điều kiện>]

Ví dụ: Sử dụng lệnh Update
UPDATE SINHVIEN SET TenSV="Nguyễn Thị Hạnh"
Where MaSV="20042390"
UPDATE HangHoa SET Dongia=Dongia*1.1
Where TenHH IS LIKE 'Bia %' and Dongia<3500

2.2.3. Lệnh Delete
a) Ý nghĩa: Xoá một số hàng trong bảng.
14


b) Cú pháp:
DELETE FROM <Tên bảng> WHERE <Điều kiện>

Ví dụ: Xoá tất cả các hàng trong bảng KETQUA có trường Diem<5
DELETE FROM KETQUA WHERE Diem<5;


2.3. Kiểm soát dữ liệu:
2.3.1. Trao quyền GRANT
- Ý nghĩa: Dùng để trao quyền cho một acount nào đó.
- Cú pháp:
GRANT <Quyền> ON <Tên bảng/ Tên View> TO <user>
[WITH GRANT OPITION]

Các quyền có thể trao là: All, Select, update, delete, insert, index, alter, read, write,…
User có thể là: Public, tên một user cụ thể,…
- Chú ý: Nếu được trao quyền với chỉ định WITH GRANT OPITION thì anh ta có
thể trao lại quyền ấy cho người khác.
Ví dụ: Trao quyền Select cho acount Lannt
GRANT Select ON SINHVIEN TO Lannt
WITH GRANT OPITION

2.3.2. Thu hồi quyền REVOTE
-

Ý nghĩa: Dùng để thu hồi quyền của một acount nào đó.

-

Cú pháp:

REVOTE <Quyền> ON <Tên bảng/ Tên View> FROM <user>

Ví dụ: Thu hồi quyền Select của acount Lannt
REVOTE Select ON SINHVIEN FROM Lannt;

2.4. Truy vấn dữ liệu:

Khối câu lệnh phổ dụng: SELECT - FROM – WHERE. Ta có thể sử dụng theo cú
pháp chung như sau:
SELECT [*| DISTINCT] FROM <Danh sách Tên bảng/Tên View>
[WHERE <Biểu thức điềukiện>]
[GROUP BY <Danh sách cột>]
[HAVING <Điều kiện>]
[ORDER BY <Tên cột/ Số thứ tự cột/Biểu thức> [ASC/DESC]]

2.4.1. Tìm kiếm theo câu hỏi đơn giản

15


- Tìm kiếm đơn giản:
• Nếu xuất hiện giá trị * nghĩa là xem toàn bộ các cột của bảng.
Select * From SINHVIEN;

• Nếu sử dụng DISTINCT thì sẽ lấy giá trị đại diện.
Select Distinct S#, P# From SP;
• Xử lý xâu: dùng toán tử [NOT] LIKE <Mẫu so sánh>
o Dùng dấu gạch dưới để thay cho một ký tự.
o Dùng dấu % để thay cho một dãy các ký tự tuỳ ý.
Ví dụ: Cho bảng hồ sơ sinh viên HOSOSV(MaSV, Hodem, TenSV, Ngaysinh,
MaLop). Hãy cho biết mã và họ tên sinh viên có hai chữ đầu là 'Ba'
Select MaSV, Hodem+TenSV as Hoten
From HOSOSV
Where TenSV like 'Ba%'

2.4.2. Sử dụng các hàm thư viện

Các hàm thư viện thực hiện các thao tác như thống kê dữ liệu, tính toán dữ liệu có
sẵn như:


Count(): Dùng để đếm các bảng ghi,



Max(): Trả về giá trị lớn nhất của một tập hợp các giá trị,



Min(): Trả về giá trị lớn nhất của một tập hợp các giá trị,



Sum(): Trả về tổng giá trị của một tập hợp các giá trị,



Avg():Trả về giá trị trung bình của một tập hợp các giá trị,

Ví dụ.: Cho bảng DIEM(MaSV, MaMH, DiemL1, DiemL2). Hãy xem sinh viên
có mã SV061001 đã tham gia thi bao nhiêu môn:
Select Count(MaMH) AS Tongso
From DIEM
Where MaSV='SV061001';




Tìm kiếm nhờ các mệnh đề


Sử dụng phân nhóm GROUP BY: Mệnh đề GROUP BY được sử dụng

để tạo hiệu quả sắp xếp và tính toán theo từng phân nhóm.
Ví dụ : Cho biết tình hình thi của từng sinh viên:

16


Select MaSV, MaMH, DiemL1, DiemL2
From DIEM
Group By MaSV

- Sử dụng HAVING: Mệnh đề HAVING dùng để đặt điều kiện lọc cho các phân
nhóm con.
Ví dụ:. Cho bảng mặt hàng đã được cung cấp SP(S#, P#, QTY). Tìm mã những
nhà cung cấp cung cấp ít nhất 2 mặt hàng:
Select S# From SP
Group By S#
Having Count(Distinct P#)>=2;

Chú ý: Having đi sau Group By để đặt điều kiện chọn lọc ra những phân nhóm
thoả mãn điều kiện sau Having. Nếu không có từ khoá Group By thì Having sẽ tác động
trên toàn bảng coi như một phân nhóm duy nhất.
- Sử dụng Order By: Được sử dụng để tạo hiệu quả sắp xếp dữ liệu. Ta có thể sắp
xếp theo chiều tăng (ASC) hoặc giảm (DESC).
+ Ta có thể tác động sắp xếp lại trên từng phân nhóm bởi Order By.
Ví dụ:. Cho biết tình hình thi lần 1 của mỗi sinh viên sao cho kết quả điểm thi

được sắp xếp giảm dần.
SELECT MaSV, MaMT, ĐiemL1
GROUP BY MaSV
ORDER BY Diem DESC

- Chú ý: Tương tự HAVING, nếu trước Order by không có Group By thì hiệu quả
sắp xếp dữ liệu sẽ tác động trên toàn bảng và bảng được coi như một phân nhóm chính.
2.4.4. Câu hỏi phức tạp
Khi thực hiện các truy vấn làm việc với dữ liệu từ 2 bảng trở nên thì điều kiện xử
lý phức tạp hơn.
- Tự kết nối:
Ví dụ: Kiểm tra bảng kết quả thi KETQUA(SoBD, MaMT, Diem) có bị nhập
trùng hay không? Nghĩa là nhập trùng MaSV, MaMT nhưng điểm thi lại khác nhau
(nhập 2 lần).
SELECT a.SoBD, a.MaMT, a.Diem, b.Diem
From KETQUA a, KETQUA b
Where (a.SoBD=b.SoBD) and (a.MaMT=b.MaMT) and (a.Diem>b.Diem)

17


• Kết nối nhiều bảng:

Ví dụ:. Cho biết kết quả thi môn Toán của các sinh viên.
CREATE VIEW MaToan AS
SELECT MaMT From MONTHI
Where TenMon='Toán'REATE VIEW TAM AS SELECT
a.SoBD, a.Diem
From KETQUA a, MaToan b
Where a.MaMT=b.MaMT;

SELECT a.SoBD, TenSV, a.Diem
From Tam a, THISINH b
Where a.SoBD=b.SoBD
CREATE VIEW MaToan AS
SELECT MaMT From MONTHI
Where TenMon='Toán'
REATE VIEW TAM AS SELECT
a.SoBD, a.Diem
From KETQUA a, MaToan b
Where a.MaMT=b.MaMT;
SELECT a.SoBD, TenSV, a.Diem

From Tam a, THISINH b Where
a.SoBD=b.SoBD

Nhận xét:
Trên đây chúng ta đã khái quát lại về hệ cơ sở dữ liệu quan hệ, ta thấy rằng với
cách tổ chức dữ liệu như trên, RDBMS tồn tại khá nhiều nhược điểm như có hiệu năng
không tốt. Mặt khác ngôn ngữ SQL là ngôn ngữ thông dịch với các ràng buộc trong
các bảng khiến cho hiệu năng thực sự của hệ thống cơ sở dữ liệu khi thực thi là khá ì
ạch nếu kết nối dữ liệu nhiều bảng lại hay khi dữ liệu trong một bảng là rất lớn.
II. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU NOSQL
2.1 Thuật ngữ NoSQL
NoSQL còn có nghĩa là không ràng buộc. Tuy nhiên, thuật ngữ đó ít phổ dụng
hơn và ngày nay người ta thường dịch NoSQL thành Not Only SQL - Không chỉ
SQL. NoSQL ám chỉ đến những cơ sở dữ liệu không dùng mô hình dữ liệu quan hệ để
quản lý dữ liệu trong lĩnh vực phần mềm.

18



Thế hệ database kế tiếp là một thế hệ cơ sở dữ liệu non-relational (không ràng
buộc), distributed (phân tán), open source, horizontal scalable (khả năng mở rộng theo
chiều ngang) có thể lưu trữ, xử lý từ một lượng rất nhỏ cho tới hàng petabytes dữ liệu
trong hệ thống có độ chịu tải, chịu lỗi cao với những đòi hỏi về tài nguyên phần cứng
thấp.
Một số đặc điểm nhận dạng cho thế hệ database mới này bao gồm: schema-free
(phi lược đồ), hỗ trợ mở rộng dễ dàng, API(giao diện ứng dụng) đơn giản, eventual
consistency (nhất quán cuối) và/hoặc transactions(giao dịch) hạn chế trên các thành
phần dữ liệu đơn lẻ, không giới hạn không gian dữ liệu,…
NoSQL storage đặc biệt phổ dụng trong thời kỳ Web 2.0 bùng nổ, nơi các mạng
dịch vụ dữ liệu cộng đồng cho phép người dùng tạo hàng tỷ nội dung trên web. Do đó,
dữ liệu lớn rất nhanh vượt qua giới hạn phần cứng và cần phải giải quyết bằng bài toán
phân tán. Nửa đầu năm 2009, người ta đã manh nha thuật ngữ NoSQL đánh dấu sự
trưởng thành của thế hệ database mới trong khi những sản phẩm phần mềm có thể đã
được phát triển từ trước đó rất lâu.
2.2 Một số khái niệm cơ bản trong NoSQL:
• Fields: tương đương với khái niệm Columns trong SQL
• Document: thay thế khái niệm row trong SQL. Đây cũng chính là khái niệm
làm nên sự khác biệt giữa NoSQL và SQL, 1 document chứa số cột (fields) không cố
định trong khi 1 row thì số cột (columns) là định sẵn trước.
• Collection: tương đương với khái niệm table trong SQL. Một collection là
tập hợp các document. Điều đặc biệt là một collection có thể chứa các document hoàn
toàn khác nhau.
• Key-value: cặp khóa - giá trị được dùng để lưu trữ dữ liệu trong NoSQL
• Cursor: tạm dịch là con trỏ. Ta sử dụng cursor để lấy dữ liệu từ database.
Trong các hệ cơ sở dữ liệu quan hệ, các cột được định nghĩa theo bảng còn với
hệ cơ sở dữ liệu không ràng buộc, các cột được định nghĩa ở mỗi document. Bởi thế,
các document quản lý gần như tất cả, các collection không cần quản lý chặt chẽ những
gì đang xảy ra trong nó nữa.

RDBMS

NoSQL
19


Columns
Row
Table
Query: SQL
Foreign keys
Schema

Fields
Document
Collection
Query: using API
Non Foreign keys
Free schema

Bảng 1: Bảng tương quan giữa RDBMS và NoSQL
2.3 Một số đặc điểm của CSDL NoSQL.
• High Scalability: Gần như không có một giới hạn cho dữ liệu và người dùng
trên hệ thống.
• High Availability: Do chấp nhận sự trùng lặp trong lưu trữ nên nếu một node
(commodity machine) nào đó bị chết cũng không ảnh hưởng tới toàn bộ hệ thống.
• Consistency: chấp nhận tính nhất quán yếu, cập nhật mới không đảm bảo
rằng các truy xuất sau đó thấy ngay được sự thay đổi. Sau một khoảng thời gian lan
truyền thì tính nhất quán cuối cùng của dữ liệu mới được đảm bảo.
• Durability: dữ liệu có thể tồn tại trong bộ nhớ máy tính nhưng đồng thời cũng

được lưu trữ lại đĩa cứng.
• Horizontal scalable (khả năng mở rộng chiều ngang): Khi dữ liệu lớn về
lượng, phương pháp tăng cường khả năng lưu trữ và xử lý là dùng nhiều máy tính phân
tán. Phân tán dữ liệu được hỗ trợ bởi phần mềm tức cơ sở dữ liệu. Trong khi giá thành
phần cứng ngày càng giảm, tốc độ xử lý, bộ nhớ ngày càng tăng thì horizontal scalable
là một lựa chọn đúng đắn. 0mạnh hơn nhiều so với vi xử lý RISC truyền thống đơn lẻ.
Mô hình này tiếp tục được hỗ trợ bởi các công nghệ kết nối Myrinet và InfiniBand. Từ
đó chúng ta có thể quản lý, bảo trì từ xa, xây dựng batch procession (xử lý đồng loạt tập
lệnh) tốt hơn. Do những đòi hỏi về tốc độ xử lý I/O cao, lượng cực lớn dữ liệu,...scale
horizontally sẽ thúc đẩy các công nghệ lưu trữ mới phát triển giống như object storage
devices (OSD).
• Deployment Flexibility: việc bổ sung thêm/loại bỏ các node, hệ thống sẽ tự
động nhận biết để lưu trữ mà không cần phải can thiệp bằng tay. Hệ thống cũng không
đòi hỏi cấu hình phần cứng mạnh, đồng nhất.

20


• Phi quan hệ (hay không ràng buộc): relational - ràng buộc - thuật ngữ sử dụng
đến các mối quan hệ giữa các bảng trong cơ sở dữ liệu quan hệ (RDBM) sử dụng mô hình
gồm 2 loại khóa: khóa chính và khóa phụ (primary key + foreign key) để ràng buộc dữ liệu
nhằm thể hiện tính nhất quán dữ liệu từ các bảng khác nhau. Non-relational là khái niệm
không sử dụng các ràng buộc dữ liệu cho nhất quán dữ liệu.
• Lưu trữ phân tán: mô hình lưu trữ phân tán các tập tin hoặc dữ liệu ra nhiều
máy khác nhau trong mạng LAN hoặc Internet dưới sự kiểm soát của phần mềm.
• Nhất quán cuối: tính nhất quán của dữ liệu không cần phải đảm bảo ngay tức
khắc sau mỗi phép ghi. Một hệ thống phân tán chấp nhận những ảnh hưởng theo
phương thức lan truyền và sau một khoảng thời gian (không phải ngay tức khắc), thay
đổi sẽ đi đến mọi điểm trong hệ thống để cuối cùng dữ liệu trên hệ thống sẽ trở lại trạng
thái nhất quán.

• Triển khai đơn giản, dễ nâng cấp và mở rộng.
• Mô hình dữ liệu và truy vấn linh hoạt.
2.4. Kiến trúc của cơ sở dữ liệu NoSQL
Các RDBMS hiện tại đã bộc lộ những yếu kém như việc đánh chỉ mục một lượng
lớn dữ liệu, phân trang, hoặc phân phối luồng dữ liệu media (phim, ảnh, nhạc...). Cơ sở
dữ liệu quan hệ được thiết kế cho những mô hình dữ liệu nhỏ thường xuyên đọc viết
trong khi các Social Network Services (dịch vụ mạng xã hội) lại có một lượng dữ liệu
cực lớn và cập nhật liên tục do số lượng người dùng quá nhiều ở một thời điểm. Thiết
kế trên Distributed NoSQL giảm thiểu tối đa các phép tính toán, I/O liên quan kết hợp
với batch processing đủ đảm bảo được yêu cầu xử lý dữ liệu của các mạng dịch vụ dữ
liệu cộng đồng này. Facebook, Amazon là những ví dụ điển hình.
Về cơ bản, các thiết kế của NoSQL lựa chọn mô hình lưu trữ tập dữ liệu theo cặp
giá trị key-value. Khái niệm node được sử dụng trong quản lý dữ liệu phân tán.

21


Hình 1: Ví dụ cơ bản về Key/ value
Với các hệ thống phân tán, việc lưu trữ chấp nhận trùng lặp dữ liệu. Một yêu cầu
truy vấn dữ liệu có thể gửi tới nhiều máy cùng lúc, khi một máy nào nó bị chết cũng
không ảnh hưởng nhiều tới toàn bộ hệ thống. Để đảm bảo tính thời gian thực trong các
hệ thống xử lý lượng lớn dữ liệu, thông thường người ta sẽ tách biệt database ra làm 2
hoặc nhiều database như sơ đồ dưới đây:

Hình 2: Thiết kế hệ thống database Master -Slave

22


Một database nhỏ (master database) đảm bảo vào ra liên tục, khi đạt tới ngưỡng

thời gian hoặc dung lượng, database nhỏ sẽ được gộp (merge) vào database lớn có thiết
kế tối ưu cho phép đọc (read operation, slave database). Mô hình đó cho phép tăng
cường hiệu suất I/O - một trong những nguyên nhân chính khiến performance trở nên
kém.

2.5. Phân loại NoSQL
Tính đến thời điểm hiện tại có 150 loại cơ sở dữ liệu NoSql (), chia làm các loại:
-

Wide Column Store / Column Families: Hệ cơ sở dữ liệu cho phép truy xuất

ngẫu nhiên/tức thời với khả năng lưu trức một lượng lớn dữ liệu có cấu trúc. Dữ liệu có
thể tồn tại dạng bảng với hàng tỷ bản ghi và mỗi bản ghi có thể chứa hàng triệu cột. Hệ
thống triển khai từ vài trăm cho đến hàng nghìn thiết bị dẫn đến khả năng lưu trữ hàng
petabytes nhưng vẫn đảm bảo hiệu năng cao. Một số sản phẩm thông dụng:
Hadoop/Hbase - Apache, Bigtable - Google, Cassandra - Facebook, Hypertable - Baidu,
Accumulo, Amazon SimpleDB, Cloundata, Clouera, …
-

Document Store: Thực chất là các cơ sở dữ liệu hướng tài liệu, một thiết kế

riêng biệt cho việc lưu trữ tài liệu. Các cài đặt có thể là giả lập tương tác trên các cở sở
dữ liệu quan hệ, cơ sở dữ liệu đối tượng hay key-value store. Một số sản phẩm tiêu
biểu: MongoDB, Elasticsearch, Couchbase Server, CouchDB, RethinkDB, ..
-

Key Value / Tuple Store: Mô hình lưu trữ dữ liệu dưới dạng cặp giá trị key-

value trong đó việc truy suất, xóa, cập nhật giá trị thực thông qua key tương ứng.Với sự
hỗ trợ của các kĩ thuật Btree, B+Tree, Hash,… dữ liệu có thể tồn tại trên RAM hoặc ổ

cứng, phân tán hoặc không phân tán. Hầu hết cá NoSql Database đều là key-value store.
Các sản phẩm thông dụng: DynamoDB, MongoDB, Riak, Redis…
-

Graph Databases: Là một dạng cơ sở dữ liệu được thiết kế riêng cho việc

lưu trữ thông tin đồ họa như cạnh, nút hay thuộc tính. Một số sản phẩm tiêu biểu như:
Neo4j, Infinite Graph, InfoGrid, HyperGraphDB, Dex, GraphBase…
-

Multimodel

Databases:

Datomic,

OrentDB,

ArangoDB,

FatDB,

AlchemyDB…

23


×