2. 1. NoSQL
NoSQL là một khái niệm chỉ về một lớp các hệ cơ sở dữ liệu không sử dụng mô
hình quan hệ. (RDBMS).
NoSQL ra đời năm 1998 bởi Carlo Strozzi
Vào năm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ
NoSQL khi Johan Oskarsson của Last.fm muốn tổ chức một hội thảo về cơ sở dữ
liệu nguồn mở phân tán.
Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới:
phân tán (distributed) + không ràng buộc (non-relational).
3. 1.2. Đặc điểm
• NoSQL lưu trữ dữ liệu của mình theo dạng cặp giá trị “key – value”.
• Sử dụng số lượng lớn các node để lưu trữ thông tin – Mô hình phân tán
dưới sự kiểm soát phần mềm
• Chấp nhận dữ liệu bị trùng lặp
• Một truy vấn sẽ được gửi tới nhiều máy cùng lúc
• Phi quan hệ – không có ràng buộc nào cho việc nhất quán dữ liệu
• Tính nhất quán không theo thời gian thực: Sau mỗi thay đổi CSDL, không
cần tác động ngay đến tất cả các CSDL liên quan mà được lan truyền theo
thời gian.
4. 1.3. Các dạng NoSQL cơ bản
Key – value data stores: Dữ liệu lưu dưới dạng cặp key – value. Giá trị được truy xuất thông qua key.
Ví dụ : Redis, Dynomite, Project Voldemort.
Thường cho : Content caching Applications
Column-based – Tabular: Cơ sở dữ liệu tổ chức dưới dạng các bảng. Gần giống với mô hình
RDBMS. Tuy nhiên, Chúng lưu dữ liệu bởi các cột chứ không phải bằng các dòng. Nó khá thích hợp
với để hiển thị bằng các phần mềm quản lý kho dữ liệu
Ví dụ : Apache Hbase, Apache Cassandra, Hypertable
Thường cho : các hệ phân tán file
Document-based: Dữ liệu (bán cấu trúc hay semi-structured) được lưu trữ và tổ chức dưới dạng một
tập hợp các document. Các document này linh hoạt, mỗi document có một tập nhiều trường.
Ví dụ : Apache CouchDB và MongoDB
Thường cho : Web applications
Graph-based data-stores: Những CSDL này áp dụng lý thuyết đồ thị trong khoa học máy tính để lưu
trữ và truy xuất dữ liệu. Chúng tập trung vào tính rời rạc giữa các phần dữ liệu. Các phần tử đơn vị dữ
liệu được biểu thị như một nút và liên kết với các thành phần khác bằng các cạnh.
Ví dụ : Neo4j, InfiniteGraph, DEX
Thường cho : Social networking, Hệ trợ giúp
5. 2. MongoDB
MongoDB là một mã nguồn mở và là một tập tài liệu dùng cơ chế NoSQL
để truy vấn
Được viết bởi ngôn ngữ C++.
Lưu trữ dữ liệu dưới dạng JSON
Hoạt động trên khái niệm collection và document
6. 2.1 Khái niệm các thành phần lưu trữ
Database là gì?
• Database là một Ô chứa dữ liệu ở mức vật lý (physical), mỗi database sẽ có nhiều
collection và được thiết lập lưu trữ ở một nơi trong máy chủ máy tính. Một máy chủ
MongoDB thường có thể tạo nhiều cơ sở dữ liệu.
Collection là gì?
• Collection trong MongoDB là nhóm các tài liệu (document), nó tương đương với một
bảng (table) trong CSDL thông thường nên mỗi collection sẽ thuộc về một database duy
nhất, không có ràng buộc Relationship
• mỗi collection có thể chứa nhiều thể loại khác nhau không giống như table trong hệ quản
trị mysql là các field cố định.
Document là gì?
• Document trong MongoDB có cấu trúc tương tự như kiểu dữ liệu JSON, nghĩa là sẽ có
các cặp (key => giá trị)
• Document ta có thể hiểu nó giống như các record dữ liệu trong MYSQL, tuy nhiên nó có
sự khác biệt là các cặp (key => value) có thể không giống nhau ở mỗi document.
7. 2.2 So sánh giữa RDBMS và MongoDB
RDBMS MongoDB
Database Database
Table Collection
Tuple/Row Document
column Field
Table Join Embedded Documents
Primary Key Primary Key (mặc định là _id)
8. 2.3 Ví dụ về cách lưu trữ trong MongoDB
{
_id: ObjectId(7df78ad8902c)
title: 'Tìm hiểu mongodb',
description: 'MongoDB sử dụng khái niệm NO-SQL',
comments: [
{
user:'user1',
message: 'First comment',
dateCreated: new Date(2011,1,20,2,15),
like: 0
},
{
user:'user2',
message: 'Second comment',
dateCreated: new Date(2011,1,25,7,45),
like: 5
}
]
}
key _id là do hệ thống tự tạo ra một field
như vậy làm khóa chính
Đây là cấu trúc của một mẫu document
trong MongoDB, như vậy khi có thêm
comment thì ta sẽ thêm nó vào phần
comment của tin.
9. 2.4 Khi nào sử dụng MongoDB
Nếu website của bạn có tính chất INSERT cao, bởi vì mặc định MongoDB
có sẵn cơ chế ghi với tốc độ cao và an toàn.
Website của bạn ở dạng thời gian thực nhiều, nghĩa là nhiều người thao tác
với ứng dung. Nếu trong quá trình load bị lỗi tại một điểm nào đó thì nó sẽ
bỏ qua phần đó nên sẽ an toàn.
Website bạn có nhiều dữ liệu quá, giả sử web bạn có đến 10 triệu records
thì đó là cơn ác mộng với MYSQL. Bởi vì MongoDB có khả năng tìm kiến
thông tin liên quan cũng khá nhanh nên trường hợp này nên dùng nó.
Máy chủ không có hệ quản trị CSDL, trường hợp này thường bạn sẽ sử
dụng SQL LIFE hoặc là MongoDB.