Đồ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ạngdocument, sử dụng tối đa indexes… Trong
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI
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
Trang 3LỜ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ữnggó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 ĐạiHọ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ìnhtruyề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ũngnhư 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ọctậ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è đã độngviê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
Trang 4MỤC LỤC
LỜI CẢM ƠN 1
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI 20
1 VẤN ĐỀ TÌM HIỂU: 20
Sơ đồ 1: Hiệu suất hoạt động SQL và MONGODB 21
2 MỤC TIÊU ĐỀ TÀI: 21
CHƯƠNG II HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU QUAN HỆ VÀ NOSQL 23
1 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU: 23
1.1 Định nghĩa hệ quản trị CSDL quan hệ 23
1.2 Các khái niệm cơ bản trong CSSL quan hệ: 23
Mô hình tổ chức dữ liệu trong CSDL quan hệ 25
2 THAO TÁC VỚI DỮ LIỆU: 25
2.1 Các lệnh định nghĩa dữ liệu: 25
2.2 Các lệnh cập nhật dữ liệu: 27
2.3 Kiểm soát dữ liệu: 28
2.4 Truy vấn dữ liệu: 28
II HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU NOSQL 31
2.1 Thuật ngữ NoSQL 31
2.2 Một số khái niệm cơ bản trong NoSQL: 32
2.3 Một số đặc điểm của CSDL NoSQL 33
2.4 Kiến trúc của cơ sở dữ liệu NoSQL 34
2.5 Phân loại NoSQL 36
2.6 Các thao tác dữ liệu trên Document Store 37
Trang 52.6.1 Một số hệ cơ sở dữ liệu NoSQL document database 38
a, MongoDB 38
b, CouchDB 38
c, RavenDB 40
d Cassandra 41
2.6.2 Hệ quản trị cơ sở dữ liệu MongoDB 44
d, Thiết kế lược đồ 45
e, Nhúng hay Tham chiếu 46
f, Lựa chọn chỉ mục 47
g, Chỉ mục 48
h, Sao chép 51
i, Truy vấn 54
3 SO SÁNH GIỮA NOSQL VÀ RDBMS 55
3.1 Tiếp cận theo hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) 56
3.2 Những thách thức đối với RDBMS 60
3.3 Cách tiếp cận đối với NoSQL 61
3.4 So sánh giữa cơ sở dữ liệu NOSQL và RDBMS 64
a, Ưu điểm: 64
b, Nhược điểm: 65
c, So sánh: 66
Kết luận chương II 69
CHƯƠNG 3; 70
Trang 6THIẾT KẾT MỘT ỨNG DỤNG TRÊN HỆ QUAN TRỊ 70
CƠ SỞ DỮ LIỆU NOSQL 70
1 Giới thiệu về hệ thống quản lý blog 70
2 Phân tích yêu cầu 70
3 Thực hiện bằng cách sử dụng MongoDB 71
3.1 Tính năng và hạn chế 71
3.2: Cài đặt 72
3.3 Thiết kế cơ sở dữ liệu: 74
a, Phân rã chức năng blog: 74
b, Ý tưởng thiết kế: 75
c, Phân tích, thiết kế hệ thống: 76
d, Mô tả Use case 79
e, Sequence diagram 84
3.3.4 Cách tổ chức dữ liệu và thao tác dữ liệu 88
3.5 Thiết kế giao diện: 95
Kết luận chương 3 102
KẾT LUẬN LUẬN VĂN 103
TÀI LIỆU THAM KHẢO 104
Trang 7DANH MỤC BẢNG VÀ SƠ ĐỒ
Sơ đồ 1: Hiệu suất hoạt động SQL và MONGODB 10
Sơ đồ 2: Tổ chức dữ liệu trong CSDL quan hệ 14
Bảng 1: Bảng tương quan giữa RDBMS và NoSQL 22
Sơ đồ 3: Các đối tượng và các mối quan hệ của các đối tượng 46
Sơ đồ 4: Sơ đồ về lớp của các đối tượng 47
Sơ đồ 6: Thiết kế mô hình 3 tầng: Clients – Web server – Database server 65
Sơ đồ 7: Use case trong trường hợp chưa đăng nhập 66
Sơ đồ 8: Use case của Member 67
Bảng 3: Mô tả Usecase đăng nhập 68
Bảng 4: Mô tả Usecase đăng ký 69
Bảng 5: Mô tả Usecase tìm kiếm 70
Bảng 6: Mô tả Usecase xem topic 70
Bảng 7: Mô tả Usecase đăng bình luận 71
Bảng 8: Mô tả Usecase đăng topic 72
Bảng 9: Mô tả Usecase xoá Topic 72
Sơ đồ 9: Sequence diagram của chức năng Login 73
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 84
Trang 8DANH MỤC HÌNH ẢNH
Hình 1: Ví dụ cơ bản về Key/ value 24
Hình 2: Thiết kế hệ thống database Master -Slave 25
Hình 3: MongoDB 27
Hình 4: CouchDB 28
Hình 5: RavenDB 29
Hình 6: Kiến trúc client-server 29
Hình 7: Cassandra 30
Hình 8: Hadoop 31
Hình 9 Minh họa bộ sưu tập 35
Hình 10 Mô hình Master – Slave hai nút 41
Hình 11 Mô hình Master – Slave bốn nút 41
Hình 12 Mô hình Replica Sets hai nút 42
Hình 13 Replica Sets – Bầu chọn master mới 42
Hình 14 Server chính trở thành server cấp 2 42
Bảng 2: Một số so sánh giữa RDBM và NoSQL 57
Hình 15: Thư mục cài đặt Mongodb 61
Hình 16: Cấu hình khởi động Mongodb 62
Hình 17: Cài đặt thành công Mongodb 63
Sơ đồ 5: Sơ đồ phân rã chức năng của Member 64
Hình 18 Màn hình giao diện chính 85
Hình 19: Màn hình đăng ký: 86
Trang 9Hình 20: Màn hình đăng nhập: 87
Hình 21: Màn hình tạo mới bài viết 88
Hình 22: Màn hình danh sách bài viết 89
Hình 2.3: Màn hình bài viết và tất cả các bình luận: 90
Trang 11CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI 1.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ămthì 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ànhnhiề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ệnnay 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ácgiả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ệchiệ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ườngkhô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àngbuộ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ựcthi 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ínhsẵ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ệucực lớn Tuy nhiên để đạt được điều đó thì NoSQL đã bỏ qua thông dịch trong SQLcù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ấnSQL 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ạngdocument, sử dụng tối đa indexes… Trong các đặc tính đó, dữ liệu phi quan hệ là mộtyế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à
Trang 12thiế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:
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ácnhau Đ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ầnphả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ầnthiế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
1.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âunghiê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
Trang 13- 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ôngphù 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ệuNoSQL So sánh giữa việc sử dụng cơ sở dữ liệu RDBMS và cơ sở dữ liệu NoSQL trêncù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ạngRDBMS để 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ôiquyết định xây dựng một website blog cho phép các người dùng có thể chia sẻ, thảoluận về những bài viết của mình
Trang 14CHƯƠNG II HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU QUAN HỆ VÀ NOSQL
2 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áchhiệ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ộtcá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ềmcho 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 duynhấ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 trongbả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ựcthể.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 địnhbở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
Trang 15theo 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 trongmộ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 duynhấ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ướctrong 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ữacá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 haymộ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ộtbảng khác được gọi là khoá ngoài
Trang 16Mô 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ếtsứ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ệuquan 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
Trang 17- Ý 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 <Tên bảng>(<Danh sách: Tên_cột Kiểu_cột>
<Điều_kiện_kiểm_soát_dl>)
1 CREATE 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)
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)
Trang 18ALTER 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>
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
b) Cú pháp:
Trang 19DELETE 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] <Danh sách các cột [AS <Bí danh>]>
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
Trang 20 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:
Select MaSV, MaMH, DiemL1, DiemL2 From DIEM
Trang 21Having 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 độngtrê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)
Trang 22Ví 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.DiemFrom Tam a, THISINH b Wherea.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ớicá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ăngkhô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 trongcá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ụnghơ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
Trang 23Thế hệ database kế tiếp là một thế hệ cơ sở dữ liệu non-relational (không ràngbuộc), distributed (phân tán), open source, horizontal scalable (khả năng mở rộng theochiề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ệutrong 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ứngthấ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, eventualconsistency (nhất quán cuối) và/hoặc transactions(giao dịch) hạn chế trên các thànhphầ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ạngdị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ánphâ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ệmlà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àntoà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
Trang 24Columns Fields
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ùngtrê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ảorằng các truy xuất sau đó thấy ngay được sự thay đổi Sau một khoảng thời gian lantruyề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ântá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ànhphầ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ậplệ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, scalehorizontally sẽ thúc đẩy các công nghệ lưu trữ mới phát triển giống như object storagedevices (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
Trang 25 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ìnhgồm 2 loại khóa: khóa chính và khóa phụ (primary key + foreign key) để ràng buộc dữ liệunhằ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ệmkhô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ềumá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ứckhắ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 theophươ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ạngthá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ượnglớ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ếttrong khi các Social Network Services (dịch vụ mạng xã hội) lại có một lượng dữ liệucự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ợpvớ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ặpgiá trị key-value Khái niệm node được sử dụng trong quản lý dữ liệu phân tán
Trang 26Hì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ầutruy 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ũngkhô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 2hoặc nhiều database như sơ đồ dưới đây:
Hình 2: Thiết kế hệ thống database Master -Slave
Trang 27Một database nhỏ (master database) đảm bảo vào ra liên tục, khi đạt tới ngưỡngthờ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ăngcường hiệu suất I/O - một trong những nguyên nhân chính khiến performance trở nênké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 ( database.org), chia làm các loại:
http://nosql Wide Column Store / Column Families: Hệ cơ sở dữ liệu cho phép truy xuấtngẫ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àngpetabytes 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êubiể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ị 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ự
key-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ưutrữ 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…
Trang 28- Object Databases: Versant, db4o, Objectivity, Starcounter, Perst,VelocityDB, HSS Database, ZoDB, …
- Grid & Cloud Database Solutions: Gigaspaces, Infinispan, Queplix,Hazelcast
- XML Databases: EMC Document xDB, eXist, Sedna, BaseX, Qizx, …Tuy cùng mang những đặc điểm chung của NoSQL nhưng mỗi CSDL NoSQL cũng cónhững đặc điểm riêng, và vì thế thường được dùng cho những dự án khác nhau
2.6 Các thao tác dữ liệu trên Document Store
Nhưng chúng ta đã đề cập ở phần trên, hiện nay có khoảng hơn 150 loại CSDLNoSQL Trong luận văn của chúng ta chỉ đi sâu tìm hiểu về cơ sở dữ liệu documentstore, đây là loại CSDL thiết kế cơ sở hướng tài liệu và thuận tiện cho việc lưu trữ tàiliệu Hiện nay rất nhiều triển khai của document database thành công, đã và đang được
sử dụng phổ biến trên thế giới như: MongoDB, CouchDB, RavenDB… mỗi loại có ưukhuyết điểm riêng cũng như có trường hợp sử dụng riêng Trong phần này chúng ta sẽ
đi tìm hiểu một số hệ CSDL theo document store, tập trung đi sâu nghiên vào một hệquản trị CSDL đó là MongoDB để xem xét các tổ chức dữ liệu, các thao tác dữ liệu trên
nó MongoDB là một cơ sở dữ liệu cơ bản, đáng tin cậy và dễ dùng, từ đó ta có thể hiễu
rõ được việc quản trị dữ liệu trên MongoDB nói riêng hay document store và NoSQLnói chung
2.6.1 Một số hệ cơ sở dữ liệu NoSQL document database
a, MongoDB
Mongo là một cơ sở dữ liệu NoSQL nguồn mở, hiệu năng cao, có tính mở rộngcao và được viết bằng C++ Mongo dùng cách lưu trữ BSON (Json được biên dịch) vớigiấy phép AGPL.Thay vì lưu trữ dữ liệu theo các bảng như cơ sở dữ liệu truyền thống,MongoDB lưu trữ cấu trúc dữ liệu thành các văn bản dựa JSON với mô hình động (gọi
đó là BSON) khiến cho việc tích hợp dữ liệu cho các ứng dụng trở nên dễ dàng vànhanh hơn.Với mục tiêu là kết hợp các điểm mạnh của mô hình key-value (nhanh màtính mở rộng cao) với mô hình dữ liệu quan hệ (giàu chức năng)
Trang 29MongoDB được sử dụng tốt nhất với nhu cầu cần truy vấn động, nếu chúng tamuốn định nghĩa chỉ mục mà không cần các hàm map/reduce Đặc biệt nếu chúng tacần tốc độ nhanh cho một cơ sở dữ liệu lớn vì MongoDB ngoài tốc độ đọc nhanh ra thìtốc độ ghi của nó rất nhanh.
b, CouchDB
Được viết bằng Erlang với mục tiêu là tạo ra một cơ sở dữ liệu bền vững, chịulỗi cao, dễ dàng trong việc sử dụng Dùng cách lưu trữ thông thường là JSON với giấyphép Apache 2.0
Với CouchDB thì mỗi một cơ sở dữ liệu là một tập các document riêng biệt Mỗidocument tự bảo quản chính nó và tự nó bao gồm mô hình của nó (các trường dữ liệu,loại của mỗi trường) Mỗi một ứng dụng có thể thực thi rất nhiều cơ sở dữ liệu, ví dụnhư chúng ta dùng một cơ sở dữ liệu để lưu thông tin người dùng điện thoại và cái cònlại là lưu trên máy chủ Trên mỗi document còn bao gồm các thông tin về phiên bản, dễdàng đồng bộ các dữ liệu với nhau khi cơ sở dữ liệu bị mất kết nối một thời gian giữacác thiết bị
Trang 30Hình 4: CouchDB
Các đặc điểm chính của CouchDB:
Lưu trữ theo hướng tài liệu (document storage)
Sử dụng ngữ nghĩa ACID: Cho phép điều khiển việc đồng bộ việc ghi và đọccường độ rất cao mà không lo bị xung đột
Sử dụng Map/Reduce và các chỉ mục: Mỗi view được tạo ra bởi một hàmjavascript mà thực thi cả 2 hành động map và reduce Hàm đó khiến cho các documentkết hợp với nhau thành một giá trị đơn nhất và trả về kết quả đó
Kiến trúc phân tán có nhân bản: CouchDB được thiết kế với khả năng nhân bản
2 chiều với các dữ liệu offline Tức là ta có thể chỉnh sửa dữ liệu offline và sau đó đồng
bộ chúng sau khi có kết nối trở lại
REST API: Tất cả dữ liệu đều có một địa chỉ duy nhất được lấy qua HTTP.Giao thức REST sử dụng các phương thức của HTTP như GET, POST, PUT vàDELETE với 4 chức năng cơ bản (Tạo, đọc, ghi, xóa, sửa)
Built for Offline: Có khả năng nhân bản dữ liệu cho từng thiết bị và tự độngđồng bộ dữ liệu khi thiết bị hoạt động trở lại
c, RavenDB
Trang 31Hình 6: Kiến trúc client-server
Các đặc điểm chính của RavenDB:
Mặc định an toàn dữ liệu: Hỗ trợ ACID (Atomicity, Consistency, Isolation,Durability), No locking, Automatic batching, client/server chatter projection
Net client API: hỗ trợ tốt cho việc lập trình trên nền tảng NET
REST API: Tất cả dữ liệu đều có một địa chỉ duy nhất được lấy qua HTTP.Giao thức REST sử dụng các phương thức của HTTP như GET, POST, PUT vàDELETE
Dễ dàng triển khai ứng dụng một cách nhanh chóng
Kiến trúc phân tán: mở rộng ứng dụng một cách dễ dàng bằng cách sử dụng tínhnăng mạnh mẽ của RavenDB cho việc mở rộng là Sharding và Replication Có thể kếthợp cả hai tính năng này trong cùng ứng dụng Có hỗ trợ multi-database
Hỗ trợ nhiều gói tiện ích hữu dụng như: Versioning, Expiration,IndexReplication, Authorization, Authentication Chúng ta có thể tự viết các gói mởrộng cho RavenDB bằng cách sử dụng Triggers và Responders
Trang 32d Cassandra
Ngày nay, các dịch vụ trên internet phải xử lý một khối lượng dữ liệu rất lớn.Hầu hết dữ liệu sẽ được lưu trữ phân tán trên nhiều máy chủ khác nhau Vì vậy, các hệquản trị cơ sở dữ liệu quan hệ (RDBMS) tỏ ra không còn phù hợp với các dịch vụ nhưthế này nữa Người ta bắt đầu nghĩ tới việc phát triển các DBMS mới phù hợp để quản
lí các khối lượng dữ liệu phân tán này Các DBMS này thường được gọi là NoSQL (Notonly SQL) Một đại diện nổi bật của các NoSQL là Cassandra
Hình 7: Cassandra
Cassandra là một quản trị hệ cơ sở dữ liệu phân tán mã nguồn mở được thiết kế
để sử lý một khối lượng lớn dữ liệu giàn trải trên nhiều node mà vẫn đảm bảo tính sẵnsàng cao (Highly Availability), khả năng mở rộng hay thu giảm số node linh hoạt(Elastic Scalability) và chấp nhận một số sai sót (Fault Tolerant) Nó được phát triểnbởi Facebook và vẫn còn tiếp tục phát triển và sử dụng cho mạng xã hội lớn nhất thớigiới này Năm 2008, Facebook chuyển nó cho cộng đồng mã nguồn mỡ và đượcApache tiếp tục phát triển đến ngày hôm nay Cassandra được coi là sự kết hợp củaAmazon’s Dynamo và Google’s BigTable
Trang 33Tính phân tán: khả năng phân chia dữ liệu thành nhiều phần đặt trên nhiềunode khác nhau trong khi người dùng vẫn thấy được dữ liệu này là một khối hợp nhất.
Tính co giãn (Elastic Scalability)
Khả năng của hệ thống có thể mở rộng số node trong cluster để có thể phục vụmột số lượng request đến nhiều và thu giảm số node khi số lượng request đến ít
Tính hướng cột (Column-Oriented)
Các RDBMS hướng dòng (row-oriented) phải định nghĩa trước các cột (column)trong các bảng (table) Đối với Cassandra các bạn không phải làm điều đó, đơn giản làthêm vào bao nhiêu cột cũng được tùy theo nhu cầu của bạn
Tính sẵn sàng cao (Highly Availability)
Dữ liệu được chia làm nhiều bản sao lưu ở nhiều node nên khi client thực hiệntác vụ đọc/ghi thì Cassandra có thể đáp ứng ngay lập tức bằng cách thực hiện trên bảnsao gần nhất hoặc trên tất cả các bản sao (phụ thuộc vào thông số ConsitencyLevel doclient thiết lập)
Chấp nhận sai (Fault Tolerant)
Dữ liệu của bạn đẽ được sao chép thành nhiều bản trên các node của cluster Nếuchẳng may một node nào đó bị hỏng, bạn vẫn có thể truy xuất dữ liệu của bạn trên cácnode khác
e, Hadoop
Hình 8: Hadoop
Dự án Hadoop của Apache có hai thành phần cốt lõi, kho lưu trữ tệp gọi làHadoop Distributed File System (HDFS - Hệ thống tệp phân tán Hadoop) và khungcông tác lập trình gọi là MapReduce Có một số dự án hỗ trợ để sử dụng HDFS và
Trang 34MapReduce Các định nghĩa dưới đây nhằm cung cấp cho bạn những thông tin cơ bản
để sử dụng nó:
- HDFS: Nếu bạn muốn có hơn 4000 máy tính làm việc với dữ liệu của bạn, thìtốt hơn bạn nên phổ biến dữ liệu của bạn trên hơn 4000 máy tính đó HDFS thực hiệnđiều này cho bạn HDFS có một vài bộ phận dịch chuyển Các Datanode (nút dữ liệu)lưu trữ dữ liệu của bạn và Namenode (nút tên) theo dõi nơi lưu trữ các thứ
- MapReduce: Đây là mô hình lập trình cho Hadoop Có hai giai đoạn, khôngngạc nhiên khi được gọi là Map và Reduce Một quá trình mà hệ thống thực hiện sắpxếp và chuyển các kết quả đầu ra của map tới các đầu vào của các bộ rút gọn) giữa haigiai đoạn Map và Reduce
- Hadoop Streaming: Một tiện ích để tạo nên mã MapReduce bằng bất kỳ ngônngữ nào: C, Perl, Python, C++, Bash, v.v Các ví dụ bao gồm một trình mapper Python
và chúng ta thấy bên cạnh đó là một trình reducer AWK
- Hive và Hue: Nếu bạn thích SQL, bạn sẽ rất vui khi biết rằng bạn có thể viếtSQL và yêu cầu Hive chuyển đổi nó thành một tác vụ MapReduce
- Pig: Một môi trường lập trình mức cao hơn để viết mã MapReduce
- Sqoop: Cung cấp việc truyền dữ liệu hai chiều giữa Hadoop và cơ sở dữ liệuquan hệ thông dụng hơn và được yêu thích hơn đối với nhiều người sử dụng
- Oozie: Quản lý luồng công việc Hadoop
- HBase: Một kho lưu trữ key-value có thể mở rộng quy mô rất lớn
- FlumeNG: Trình nạp thời gian thực để tạo luồng dữ liệu của bạn vào Hadoop
Nó lưu trữ dữ liệu trong HDFS và HBase
- Whirr: Cung cấp dám mây cho Hadoop Bạn có thể khởi động một hệ thống màchúng ta chỉ trong vài phút với một tệp cấu hình rất ngắn
- Mahout: Máy học dành cho Hadoop Được sử dụng cho các công việc chínhnhư sau đó là các phân tích dự báo và phân tích nâng cao khác
- Fuse: Làm cho hệ thống HDFS trông như một hệ thống tệp thông thường, do
đó bạn có thể sử dụng lệnh ls, cd, rm và những lệnh khác với dữ liệu HDFS
- Zookeeper: Được sử dụng để quản lý đồng bộ cho hệ thống
Trang 352.6.2 Hệ quản trị cơ sở dữ liệu MongoDB
Trước khi đi vào tìm hiểu kỹ hơn về MongoDB, chúng ta làm quen với một sốkhái niệm cơ bản và đặc điểm chính của MongoDB:
- Các đặc điểm chính của MongoDB::
Các truy vấn Ad hoc: Mongo hỗ trợ việc tìm theo trường dữ liệu, khoảng kếtquả tìm và tìm theo cú pháp Các truy vấn có thể trả về các trường được qui định trongdocument và cũng có thể bao gồm các hàm Javascript mà người dùng chưa định nghĩa
Đánh chỉ mục: Bất cứ một trường dữ liệu nào trong MongoDB đều được đánhchỉ mục (giống như chỉ mục bên RMDBs)
Nhân bản: Mongo hỗ trợ nhân bản kiểu Master-slave Một master có thể điềukhiển việc đọc và ghi Một slave tạo bản sao dữ liệu từ master và chỉ được sử dụng choviệc đọc và backup (không có quyền ghi) Slave có khả năng chọn ra một master mớinếu master cũ bị hỏng
Cân bằng tải: Mongo mở rộng theo chiều ngang bằng cách sử dụng sharding.Các lập trình viên chọn các khóa chia sẻ nhằm xác định dữ liệu sẽ được phân tán nhưthế nào Dữ liệu sẽ được tách thành các khoảng dựa vào khóa và phân tán dọc theo cácShard
Lưu trữ file: Mongo lưu trữ bằng file hệ thống, rất tốt cho việc cân bằng tải vànhân bản dữ liệu Trong các hệ thống nhiều máy, các file được phân phối và được saochép ra rất nhiều lần giữa các máy một cách trong suốt Do đó rất hiệu quả trong việctạo ra một hệ thống cân bằng tải và dung lỗi tốt
- Các khái niệm cơ bản trong CSDL MongoDB:
a, Văn bản
Văn bản là một khái niệm quan trọng trong MongoDB Văn bản bao gồm tập hợpcác khóa với các giá trị tương ứng
Ví dụ: {"greeting" : "Hello, world!"}
Văn bản trên gồm một khóa là “greeting”, với giá trị là “Hello, world!” Các vănbản có thể chứa nhiều cặp khóa/giá trị
Ví dụ: {"greeting" : "Hello, world!", "foo" : 3}
Một số lưu ý:
Trang 361 Các cặp khóa/ giá trị trong văn bản được sắp xếp Văn bản trên sẽ khácvới văn bản sau
{"foo" : 3, "greeting" : "Hello, world!"}
2 Khóa trong văn bản là một chuỗi
3 MongoDB phân biệt chữ hoa chữ thường
4 Văn bản trong MongoDB không được chứa những khóa giống nhau Ví
dụ văn bản sau là không hợp lệ:
{"greeting" : "Hello, world!", "greeting" : "Hello, MongoDB!"}
Ví dụ các văn bản sau có thể cùng được lưu trong một bộ sưu tập:
{"greeting" : "Hello, world!"}
{"foo" : 5}
Bộ sưu tập được xác định bởi tên của nó là một chuỗi UTF-8
c, Các đặc trưng của MongoDB:
Lưu trữ hướng văn bản: Văn bản theo phong cách JSON với những lược đồđộng đơn giản
Hỗ trợ chỉ mục đầy đủ: chỉ mục trên bất kỳ các thuộc tính
Tính sao lặp và tính sẵn sàng cao: mở rộng
Auto-sharding: mở rộng theo chiều ngang mà không ảnh hưởng đến chức năng
Truy vấn: đa dạng, truy vấn dựa trên văn bản
Cập nhật nhanh:
Map/Reduce
GridFS: lưu trữ file với bất kỳ kích cỡ nào mà không làm phức tạp ngăn xếp
Hỗ trợ thương mại: hỗ trợ doanh nghiệp, đào tào, tư vấn
Trang 37d, Thiết kế lược đồ
Với MongoDB, chúng ta ít phải “chuẩn hóa” hơn so với khi làm việc với lược đồquan hệ vì trong MongoDB không có khái niệm liên kết (join) Nói chung, với mỗi đốitượng (object) mức cao nhất, ta sẽ có một bộ sưu tập (collection) dữ liệu
Một bộ sưu tập không phải cho tất cả các lớp (class), thay vào đó, các đối tượng sẽđược nhúng vào đó
Hình 2.1 minh họa có 2 bộ sưu tập: students và courses Các văn bản student đượcnhúng văn bản address và văn bản score Trong đó, văn bản Score được tham chiếu đếnCourses
INCLUDEPICTURE
"http://www.mongodb.org/download/attachments/131465/reference.jpg?
version=1&modificationDate=1253899724083" \* MERGEFORMATINET
Hình 9 Minh họa bộ sưu tập
So sánh với lược đồ quan hệ: ta cần lưu Score vào bảng riêng và dùng khóa ngoàiliên kết với Student
Trang 38e, Nhúng hay Tham chiếu
Một câu hỏi quan trọng trong thiết kế lược đồ Mongo là: “Đối tượng này có cầnmột bộ sưu tập của riêng nó không hay nên nhúng vào trong các đối tượng trong các bộsưu tập khác?” Trong cơ sở dữ liệu quan hệ, mỗi tiểu mục có thể trở thành một bảngriêng biệt Trong Mongo, nó không được khuyến cáo, việc nhúng các đối tượng hiệuquả hơn nhiều Chúng ta cũng có thể đặt ra câu hỏi “Tại sao tôi không muốn nhúng đốitượng này?”
Tại sao tham chiếu lại chậm Ta xem ví dụ sau Chúng ta có một đối tượngStudent và cần thực hiện:
Các đối tượng miêu tả chi tiết các mục thường được nhúng
Các đối tượng mà theo mô hình đối tượng có chứa quan hệ nói chung nên đượcnhúng
Quan hệ nhiều – nhiều thường được tham chiếu
Các bộ sưu tập chỉ với một vài đối tượng có thể tồn tại một cách an toàn giốngnhư bộ sưu tập riêng lẻ, được lưu trữ nhanh chóng trong bộ nhớ máy chủ ứng dụng
Các đối tượng nhúng khó khăn để tham chiếu hơn là các đối tượng mức cao
Sẽ khó khăn hơn để có một cái nhìn mức hệ thống đối với các đối tượngnhúng Ví dụ: Sẽ dễ thực hiện truy vấn tìm 100 sinh viên có điểm cao nhất hơn nếuScore không bị nhúng
Nếu dữ liệu được nhúng lớn, có thể đạt đến giới hạn kích thước của một đốitượng
Trang 39 Nếu hiệu suất là quan trọng, hãy nhúng.
Một số ví dụ
Hệ thống Blog: Posts cần có bộ sưu tập riêng Post Author có thể có bộ sưu tậpriêng hoặc nếu đơn giản chỉ là địa chỉ mail của tác giả thì cho thành một trường trongPosts Comments được nhúng trong Posts
f, Lựa chọn chỉ mục
Một khía cạnh thứ hai khi thiết kế lược đồ là việc lựa chọn chỉ mục Việc đánh chỉmục làm cho việc thực hiện truy vấn nhanh hơn Một truy vấn bình thường cần vàiphút, có thể được thực hiện ngay lập tức với việc sử dụng chỉ mục
Trong MongoDB:
Trường _id được đánh chỉ mục tự động
Những trường mà theo đó các khóa được tìm kiếm nên được đánh chỉ mục
Những trường sắp xếp nói chung nên được đánh chỉ mục
Lưu ý rằng việc thêm vào chỉ mục chỉ làm chậm quá trình ghi vào bộ sưu tập màkhông làm chậm quá trình đọc Vì vậy, sử dụng nhiều chỉ mục với những bộ sưu tập màtỉ lệ read/write cao Với những bộ sưu tập mà ghi nhiều hơn đọc, sử dụng chỉ mục là rấttốn kém
g, Chỉ mục
Chỉ mục làm tăng hiệu suất truy vấn lên rất nhiều Điều quan trọng là nghĩ xem xéttất cả các loại truy vấn cần trong ứng dụng để xác định những chỉ mục liên quan Khi đãxác định xong, việc tạo ra các chỉ mục trong MongoDB là khá dễ dàng
Các khái niệm cơ bản
Chỉ mục là một cấu trúc dữ liệu, thu thập thông tin về giá trị của các trường trongcác văn bản của một bộ sưu tập Cấu trúc dữ liệu này được sử dụng trong tối ưu truyvấn Mongo để sắp xếp nhanh các văn bản trong một bộ sưu tập
Chúng ta có thể khởi tạo chỉ mục bằng cách gọi hàm ensureIndex() và cungcấp một văn bản với một hoặc nhiều khóa để đánh chỉ mục Ví dụ đánh chỉ mục chotrường name trong students
db.students.ensureIndex({name:1});
Hàm ensureIndex() chỉ khởi tạo chỉ mục nếu nó chưa tồn tại Để kiểm tra việc tồn
Trang 40Khi một bộ sưu tập được đánh chỉ mục trên một khóa nào đó, truy cập ngẫu nhiêntrên biểu thức truy vấn có chứa khóa đó sẽ được thực hiện rất nhanh Nếu không đượcđánh chỉ mục, MongoDB phải soát tất cả các văn bản để kiểm tra giá trị của khóa đótrong truy vấn.
Chỉ mục mặc định
Một chỉ mục luôn luôn được tạo ra là _id Chỉ mục này là đặc biệt và không thể bịxóa Chỉ mục _id là duy nhất cho các khóa của nó
Các khóa nhúng
Với MongoDB chúng ta thậm chí có thể đánh chỉ mục trên các khóa bên trong vănbản nhúng Ví dụ
db.students.ensureIndex({"address.city": 1})
Văn bản như là khóa
Các trường được đánh chỉ mục có thể là bất kỳ loại nào, bao gồm cả văn bản
Mảng
Khi giá trị của trường được đánh chỉ mục của văn bản là một mảng MongoDBđánh chỉ mục mỗi phần tử của mảng đó
Chỉ mục hỗn hợp các khóa
Ngoài chỉ mục khóa đơn, MongoDB còn hỗ trợ đánh chỉ mục hỗn hợp nhiều khóa.Giống như đánh chỉ mục cơ bản, chúng ta sử dụng hàm ensureIndex() để khởi tạochỉ mục
Nếu chúng ta có một chỉ mục hỗn hợp trên nhiều trường, chúng ta có thể sử dụng
nó để truy vấn trên các tập hợp con đầu của các trường đó Ví dụ ta có chỉ mục trên (a,
b, c), ta có thể sử dụng nó để truy vấn trên (a), (a, b), (a, b, c)
Chỉ mục thưa thớt
Chỉ mục thưa thớt là chỉ mục mà chỉ bao gồm các văn bản có trường được đánhchỉ mục Bất kỳ văn bản nào bị thiếu trường đánh chỉ mục thưa thớt đều không được