NoSQL, viết tắt của non relational, hoặc theo cách hiểu khác thì có nghĩa là Not only SQL (không chỉ là SQL). NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị khóa và hệ thống lưu trữ phân tán. Hệ CSDL này có thể lưu trữ, xử lý từ lượng rất nhỏ đến hàng petabytes dữ liệu với khả năng chịu tải, chịu lỗi cao nhưng chỉ đòi hỏi về tài nguyên phần cứng thấp. NoSQL thiết kế đơn giản, nhẹ, gọn hơn so với RDBMs, thiết kế đặc biệt tối ưu về hiệu suất, tác vụ đọc ghi, ít đòi hỏi về phần cứng mạnh và đồng nhất, dễ dàng thêm bớt các node không ảnh hưởng tới toàn hệ thống,…
Trang 1GVHD: Nguyễn Huy Khánh
Sinh viên thực hiện:
- Nguyễn Mạnh Hùng _1141363
- Nguyễn Phước Duy _1142016
- Nguyễn Anh Khoa _1141375
Trang 2MỤC LỤC
-
-A_Báo cáo chi tiết nội dung tìm hiểu 3
I Giới thiệu NoSQL 3
II Đặc điểm NoSQL 3
III Lợi ích của NoSQL 4
IV Những hạn chế của NoSQL 5
V Giới thiệu MongoDB 7
VI Hướng dẫn cài đặt MongoDB 9
VII Làm Việc với MongoDB 15
1) Trên Command line 15
a Liệt kê các CSDL hiện hành 15
b Chọn CSDL sử dụng và xem CSDL đó có bao nhiêu bảng 15
c Hiển thị dữ liệu từ CSDL 16
d Thêm dòng vào cơ sở dữ liệu hiện hành 16
e Cập nhật một dòng trong cơ sở dữ liệu hiện hành 17
f Xóa một dòng trên cơ sở dữ liệu hiện hành 17
2) Trên Visual studio C# 18
a Kết nối đến Server 18
b Tạo cơ sở dữ liệu (Tên CSDL, các bảng) 18
c Thêm vào CSDL (insert) 18
d Sửa các dòng trên CSDL (update) 19
e Xóa các dòng trên CSDL (Delete) 19
Trang 3VIII So sánh MongoDB với cơ sở dữ liệu quan hệ 20
IX Viết các ứng dụng nhỏ minh họa 21
Ứng dụng 21
B_Bảng điểm tự đánh giá 24
Trang 4A_Báo cáo chi tiết nội dung tìm hiểu
I Giới thiệu NoSQL
- NoSQL, viết tắt của non - relational, hoặc theo cách hiểu khác thì có nghĩa là Not
only SQL (không chỉ là SQL) NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặpgiá trị - khóa và hệ thống lưu trữ phân tán
- Hệ CSDL này có thể lưu trữ, xử lý từ lượng rất nhỏ đến hàng petabytes dữ liệu với
khả năng chịu tải, chịu lỗi cao nhưng chỉ đòi hỏi về tài nguyên phần cứng thấp.NoSQL thiết kế đơn giản, nhẹ, gọn hơn so với RDBMs, thiết kế đặc biệt tối ưu vềhiệu suất, tác vụ đọc - ghi, ít đòi hỏi về phần cứng mạnh và đồng nhất, dễ dàng thêmbớt các node không ảnh hưởng tới toàn hệ thống,…
- 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 Với các hệ thống phân tán, việclưu trữ có chấp nhận trùng lặp dữ liệu Một request truy vấn tới data có thể gửi tớinhiề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ớitoàn bộ hệ thống Để đảm bảo tính real time trong các hệ thống xử lý lượng lớn, thôngthường người ta sẽ tách biệt database ra làm 2 hoặc nhiều database Một database nhỏđả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)
II Đặc điểm NoSQL
- Phi quan hệ (hay không ràng buộc): 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óaphụ (primary key + foreign key) để ràng buộc dữ liệu nhằm thể hiện tính nhất
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
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
Trang 5mỗi phép ghi Một hệ thống phân tán chấp nhận những ảnh hưởng theo phươngthứ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ạitrạ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.
vụ tốt khi phình dữ liệu
III Lợi ích của NoSQL
Trang 6o Các hệ quản trị cơ sở dữ liệu NoSQL là Cassandra, CouchDB, Hbase,
MongoDB và Redis
- Phù hợp với các công nghệ mới như công nghệ đám mây:
o NoSQL và đám mây là một sự trùng khớp tự nhiên Các máy chủ ngày nay làkhông đắt và có thể dễ dàng mở rộng phạm vi được theo yêu cầu có sử dụng
dựa vào ảo hóa Liên kết yếu của ảo hóa là sự thực thi của I/O, với bộ nhớ vàCPU các các kết nối mạnh
tiên - vì thế ngăn ngừa được sự thực thi không ổn định của I/O Và vì NoSQLlưu trữ dữ liệu thường thúc đẩy được tính mở rộng phạm vi theo chiều ngangthông qua việc ngăn chia, chúng có khả năng tận dụng được việc cung cấpmềm dẻo của đám mây
- Được các hãng lớn tin dùng như: Các công ty như Amazon, BBC, Facebook và
Google dựa vào các cơ sở dữ liệu NoSQL
IV Những hạn chế của NoSQL
- Nguồn mở vì thế có thể sẽ hỗ trợ không đồng đều cho các doanh nghiệp:
Sybase đưa ra sự hỗ trợ tốt nổi tiếng cho các khách hàng doanh nghiệp cỡ vừa,thì các doanh nghiệp nhỏ hơn, thường là các nhà cung cấp nguồn mở mớithành lập không thể được mong đợi cung cấp được sự hỗ trợ có thể so sánhđược
o Nhà cung cấp nguồn mở trung bình thiếu sự tiếp cận toàn cầu, các dịch vụ hỗ
- Chưa đủ chín chắn cho các doanh nghiệp:
NoSQL vẫn đối mặt với một vấn đề về sự tin cậy chính với nhiều doanh
Trang 7nghiệp Điểm sống còn đối với sự thiếu của NoSQL về độ chín muồi và cácvấn đề về tính không ổn định có thể, trong khi trích ra tính chín muồi, giàu
- Hạn chế về tri thức nghiệp vụ:
các cơ sở dữ liệu NoSQL Liệu các cơ sở dữ liệu này có thể cung cấp dạng
Cần bao nhiêu sự tinh thông về lập trình cần có để tiến hành những truy vấn
và phân tích hiện đại?
đeo bám tới các công cụ BI thường được sử dụng, trong khi những yêu cầu vàphân tích hiện đại đơn giản nhất có liên quan khác nhiều tới sự tinh thông vềlập trình Tuy vậy, các giải pháp là sẵn sàng Quest Software, ví dụ, đã tạo raToad cho các cơ sở dữ liệu đám mây, mà nó phân phối các khả năng truy vấnhiện đại tới một số cơ sở dữ liệu NoSQL
- Thiếu sự tinh thông:
người quản trị mà biết công nghệ này - là cho khó khăn cho các công ty tìm
những người đủ tư cách
- Những vấn đề về sự tương thích:
ít theo cách thức của các tiêu chuẩn Mỗi cơ sở dữ liệu NoSQL có các giaodiện lập trình ứng dụng API riêng của mình, các giao diện truy vấn độc nhất vônhị, và những sự riêng biệt Sự thiếu hụt các tiêu chuẩn có nghĩa là nó không
Trang 8có khả năng để chuyển một cách đơn giản từ một nhà cung cấp này sang mộtnhà cung cấp khác.
Trang 9V Giới thiệu MongoDB
lưu trữ dữ liệu trong bảng được thực hiện trong các cơ sở dữ liệu quan hệ "cổđiển" thì MongoDB lưu trữ dữ liệu theo cấu trúc JSON với "schemas" (MongoDBgọi với định dạng là BSON), làm cho dễ dàng hơn và nhanh hơn quá trình tươngtác với dữ liệu trong các loại ứng dụng nhất định
một cơ sở dữ liệu phong phú tính năng trưởng thành và sẵn sàng để sử dụng
Để xem các đặc trưng chính của MongoDB vào trang chính:
Trang 10cao với mô hình dữ liệu quan hệ giàu chức năng
- Mục tiêu chính của Mongo là giữ lại các thuộc tính thân thiện của SQL Do đó cáccâu truy vấn khá giống với SQL nên MongoDB khá thích hợp cho các lập trìnhviên đã quen với ngôn ngữ truy vấn SQL MongoDB có một khối lượng tính nănglớn và hiệu năng cao.Với các loại dữ liệu phong phú, nhiều truy vấn và việc giảmthời gian phát triển trong việc mô hình hóa các đối tượng
- MongoDB được sử dụng tốt nhất với nhu cầu cần truy vấn động, nếu ta muốn định
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
- Các đặc điểm chính của mongoDB là:
và tìm theo cú pháp Các truy vấn có thể trả về các trường được qui định 16
chưa định nghĩa
o Đánh chỉ mục: Bất cứ một trường nào trong MongoDB đều được đánh chỉ
mục (giống như chỉ mục bên RMDBs)
thể điều khiển việc đọc và ghi Một slave tạo bản sao sữ liệu từ master và chỉ
chọn ra một master mới nếu master cũ bị hỏng
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ântá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ântán dọc theo các Shard
Trang 11o 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á hệ thống nhiều máy, các file được phân phối vàđược sao ra rất nhiều lần giữa các máy một cách trong suốt Do đó rất hiệuquả trong việc tạo ra một hệ thống cân bằng tải
VI Hướng dẫn cài đặt MongoDB
- Tải MongoDB tại http://www.mongodb.org/downloads
Trang 12- Sau khi tải xong copy và giải nén Ở đây chọn ổ c:\mongodb\bin
- Vào c:\mongodb\bin sẽ nhìn thấy các file của MongoDB cung cấp cho ta
Trang 13- Bước tiếp theo tiến hành tạo 1 thư mục để chứ các csdl của MongoDB.
Ở đây ta tạo tiếp ở ổ C:\mongodb
Tạo thư mục tên là "db" bên trong "data"
Trang 14- Bước tiếp theo rất quan trọng và sẽ là file mà ta phải chạy nó để MongoDB có thể hoạt động Ta tạo ở một trình soạn thảo bất ký bất kỳ như "notepad" của win và copy nội dung sau:
dạng đuôi mở rộng là bat
C:\mongodb\bin\mongod.exe dbpath=C:/mongodb/data/db
PAUSE
Trang 15- Sau khi xong thì ta chạy file.bat mà ta vừa tạo đó lên Xuất hiện màn hình Consolenhư hình dưới đây là ta đã cài đặt thành công.
- Lưu ý : Đây là tập tin chạy dùng để kết nối cơ sở dữ liệu Ta không được tắt nó đi trong quá trình kết nối
Trang 16- Tạo biến môi trường: Phải chuột tại My Computer -> Properties -> Advanced and Settings -> chọn tag Advanced -> chọn Environment variables -> Chọn Path dưới
System variable -> ghi thêm vào c:\mongodb\bin
Trang 17- Để kiểm tra ta mở 1 cửa sổ Console khác để thực hiện tạo 1 cơ sở dữ liệu test.
nối thành công
Trang 18VII Làm Việc với MongoDB
- Các khái niệm mới 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 từ khóa - giá trị được dùng để lưu trữ dữ liệu trong NoSQL
Cursor - tạm dịch là con trỏ Chúng ta sẽ sử dụng cursor để lấy dữ liệu từ
database
1) Trên Command line
a Liệt kê các CSDL hiện hành
Show dbs
b Chọn CSDL sử dụng và xem CSDL đó có bao nhiêu bảng
Use dbs
Ví dụ: use QLHocSinh_NoSQL
Ở đây CSDL QLHocSinh có 2 bảng là bảng HocSinh và bảng Lop
Trang 19- Có thể tham khảo thêm ở command line: Gõ db.help()
c Hiển thị dữ liệu từ CSDL
db.TenCSDL.find()
Ví dụ: db.QLHocSinh_NoSQL.find(); db.QLHocSinh.Lop.find();
Hiển thị dữ liệu bên trong bảng HocSinh và bảng Lop
- Ngoài ra còn nhiều kiểu để ta có thể lấy dữ liệu từ CSDL ra như:
query: {}, sort: {}, ‘new’:false] } )
- Có thể tham khảo thêm ở command line: gõ db.mycoll.help()
d Thêm dòng vào cơ sở dữ liệu hiện hành
db.TenBang.insert()
Ví dụ: Thêm vào bảng Lop một lớp nữa là “10A1”
Gõ: db.Lop.insert( {TenLop:”10A1”} )
Trang 20Có thể dùng cách khác để insert dử liệu như sau:
e Cập nhật một dòng trong cơ sở dữ liệu hiện hành
db.TenBang.update( {_id: ‘…’, ‘TenThuocTinhThayDoi’ : ’TenCu’}, {$set: {‘TenThuocTinhThayDoi’ : ’Ten Moi’} }, {upsert:true} )
Ví dụ: Thay đổi Lớp “10A1” thành lớp “11A2”
Gõ: db.Lop.update( {_id : ‘50f789a355b3042d7e23a0’, ‘TenLop’ :
‘10A1’} {$set: {‘TenLop’:’11A2’}}, {upsert:true } )
f Xóa một dòng trên cơ sở dữ liệu hiện hành
db.TenBang.remove( {TenCotCanXoa : ’TenCanXoa’} )
Ví dụ: Xóa Lớp “10A1” trong bảng Lop
Gõ: db.Lop.remove( {TenLop : ‘10A1’} )
Trang 21- Có thể tham khảo thêm ở http://docs.mongodb.org/manual/reference/method/
2) Trên Visual studio C#
a Kết nối đến Server
- Import thư viện
- Kết nối tới Server
Mongo mongo = new Mongo ();
mongo.Connect();
b Tạo cơ sở dữ liệu (Tên CSDL, các bảng)
Mongo mongo = new Mongo ();
mongo.Connect();
var db = mongo.GetDatabase( "QLHocSinh_NoSQL" ); //Tên CSDL được tạo ra IMongoCollection collHocsinh = db.GetCollection( "HocSinh" ); //Tạo
ba 'ng HocSinh
document có 1 giá trị _id riêng MongoDB sẽ tự động tạo nó cho bạn nếubạn không làm việc đó Field _id mặc định sẽ được tạo index
c Thêm vào CSDL (insert)
Trang 22var db = mongo.GetDatabase( "QLHocSinh_NoSQL" ); //Tên CSDL được tạo ra IMongoCollection collHocsinh = db.GetCollection( "HocSinh" ); //Tạo
ba 'ng HocSinh
Document docHocSinh = new Document ();
docHocSinh[ "_id" ] = hocsinh.strMaHS;
docHocSinh[ "TenHS" ] = hocsinh.strTenHS;
docHocSinh[ "GioiTinh" ] = hocsinh.strGioiTinh;
docHocSinh[ "NgaySinh" ] = hocsinh.dtNgaySinh;
docHocSinh[ "NoiSinh" ] = hocsinh.strNoiSinh;
docHocSinh[ "SoDienThoai" ] = hocsinh.strSoDienThoai;
docHocSinh[ "Email" ] = hocsinh.strEmail;
docHocSinh[ "TenLop" ] = hocsinh.strTenLop;
collHocsinh.Insert(docHocSinh); //Thêm học sinh
d Sửa các dòng trên CSDL (update)
Mongo mongo = new Mongo ();
mongo.Connect();
var db = mongo.GetDatabase( "QLHocSinh_NoSQL" ); //Tên CSDL được tạo ra IMongoCollection collHocsinh = db.GetCollection( "HocSinh" ); //Tạo
ba 'ng HocSinh
Document docHocSinh = new Document ();
docHocSinh[ "_id" ] = hocsinh.strMaHS;
docHocSinh[ "TenHS" ] = hocsinh.strTenHS;
docHocSinh[ "GioiTinh" ] = hocsinh.strGioiTinh;
docHocSinh[ "NgaySinh" ] = hocsinh.dtNgaySinh;
docHocSinh[ "NoiSinh" ] = hocsinh.strNoiSinh;
docHocSinh[ "SoDienThoai" ] = hocsinh.strSoDienThoai;
docHocSinh[ "Email" ] = hocsinh.strEmail;
docHocSinh[ "TenLop" ] = hocsinh.strTenLop;
collHocsinh.Update(docHocSinh); //Cập nhật học sinh
e Xóa các dòng trên CSDL (Delete)
Document docHocSinh = new Document ();
docHocSinh[ "_id" ] = "a1" ;
collHocsinh.Delete(docHocSinh);
Trang 24VIII So sánh MongoDB với cơ sở dữ liệu quan hệ
Biểu đồ gây tranh cải vể việc MongoDB chèn dữ liệu nhanh hơn SQL Sever tới hơn 100 lần
MongoDB
Trang 25IX Viết các ứng dụng nhỏ minh họa
Ứng dụng: Quản lý học sinh cấp 3
Chương trình bao gồm các chức năng:
Xem danh sách sinh viên theo lớp hiện tại
Trang 26 Thêm sinh viên vào lớp học hiện tại
Chỉnh sửa sinh viên trong lớp học hiện tại
Trang 27 Xóa sinh viên khỏi lớp học hiện tại
Trang 28B_Bảng điểm tự đánh giá