Mô hình CSDL NoSQL
và Ứng dụng
Giảng viên : Nguyễn Hà Nam
Trình bày : Nguyễn Thành Trung
Nguyễn Minh Hà
Hà Nội, 29/02/2012
1/48
Nội dung
•
Giới thiệu NoSQL
•
Các vấn đề liên quan
•
NoSQL
•
Demo mô hình NoSQL
•
Nhận xét và đánh giá
•
Hỏi và đáp
2/48
Giới thiệu NoSQL
•
Bài toán
•
Làm sao đáp ứng nhu cầu dữ liệu ngày càng tăng?
•
Lịch sử phát triển
•
Năm 1988, Carlo Strozzi đưa ra tên gọi NoSQL
•
Năm 2009, Eric Evans giới thiệu lại NoSQL
•
Năm 2011, UnQL
3/48
Các vấn đề liên quan
•
Điện toán đám mây
•
Cloud Database
4/48
Điện toán đám mây
Là một dịch vụ hơn là một sản phẩm !!!
5/48
Điện toán đám mây
•
Cấu trúc gồm 2 phần
6/48
Điện toán đám mây
•
Phân thành các tầng
Tầng dịch vụ
Tầng hệ thống
Tầng cơ sở hạ
tầng
7/48
Cloud Database
•
Chạy trên nền tảng điện toán đám mây
•
Hai mô hình triển khai
•
Dùng cơ chế máy ảo
•
Dùng như một dịch vụ
•
Sử dụng hai mô hình dữ liệu
•
SQL
•
NoSQL
8/48
Cloud Database
Virtual Machine Deployment Database as a Service
SQL Data Model
Oracle Database
[1][9]
IBM DB2
[10]
Ingres (database)
[11]
PostgreSQL
[12]
MySQL
[13]
Amazon Relational Database Service (MySQL)
Microsoft SQL Azure (MS SQL)
[14]
Heroku PostgreSQL as a Service (shared and
dedicated database options)
[15]
Xeround Cloud Database - MySQL front-end
[2]
EnterpriseDB Postgres Plus Cloud Database
[16]
NoSQL Data Model
CouchDB on Amazon EC2
[17]
Hadoop on Amazon EC2
[18]
Apache Cassandra on Amazon EC2
[19]
Neo4J on Amazon EC2
[20]
or Microsoft Azure
[21]
MongoDB on Amazon EC2
[22]
or Microsoft Azure
[23]
Amazon SimpleDB
Database.com by SalesForce
[24]
Google App Engine Datastore
CouchDB Hosted Database
[25]
MongoDB Database as a Service (several
options)
[26]
9/48
NoSQL
•
Định nghĩa
•
Kiến trúc
•
Tính chất
•
Phân loại
10/48
Định nghĩa
“Cơ sở dữ liệu thế hệ tiếp theo chủ yếu giải
quyết một trong số các điểm: là một cơ sở dữ
liệu không có ràng buộc, phân tán, mã nguồn
mở, và có khả năng mở rộng theo chiều ngang
có thể lưu trữ, xử lý một lượng rất nhỏ cho tới
hàng petabytes dữ liệu trong hệ thống có thể
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”
11/48
Kiến trúc
•
Không đánh chỉ mục, phân trang, phân
luồng dữ liệu đa phương tiện
•
Được dùng cho lượng dữ liệu lớn, cập
nhật liên tục
•
Giảm thiểu phép tính toán liên quan I/O
kết hợp xử lý theo lô
12/48
Kiến trúc
•
Lưu trữ dữ liệu theo cặp giá trị key/value
•
Sử dụng khái niệm “Node” trong quản lý dữ
liệu phân tán
•
Một request dữ liệu được gửi đến nhiều máy
một lúc
•
Một database nhỏ đảm bảo tính vào ra liên
tục, khi đạt tới ngưỡng thời gian hoặc dung
lượng thì gộp lại thành database lớn hơn
13/48
Tính chất
•
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 nào đó bị chết cũng không ảnh hưởng
tới toàn bộ hệ thống.
•
Atomicity
–
Độc lập trạng thái dữ liệu trong các hành động
14/48
Tính chất
•
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.
15/48
Tính chất
•
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.
•
Modeling flexibility
–
Key-Value pairs, Hierarchical data (dữ liệu cấu trúc),
Graphs.
•
Query Flexibility
–
Multi-Gets, Range queries (load một tập giá trị dựa vào
một dãy các khóa).
16/48
Tính chất
So sánh giữa MongoDB và SQL Server 2008
17/48
Phân loại
•
Có rất nhiều tiêu chí phân loại như:
–
Interfaces, Logical Data Models, Data Distribution
Model, Data Persistence
•
Logical Data Model
–
Wide Column Store / Column Families
–
Document Store Internal
–
Key-Value Store
–
Graph Database
18/48
Wide Column Store / Column
Families
•
Hệ cơ sở dữ liệu phân tán cho phép truy xuất ngẫu
nhiên/tức thời với khả năng lưu trữ một lượng cực
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
•
Ứng dụng sử dụng cấu trúc lưu trữ dạng cột:
Hadoop/HBase – Apache, BigTable – Google,
Cassandra - Facebook/Apache, Hypertable - Zvents
Inc/Baidu, Cloudera, SciDB, Mnesia, Tablets,…
19/48
Wide Column Store / Column
Families
Một ví dụ về cơ sở dữ liệu quan
hệ
Khi dữ liệu tăng theo thời gian
20/48
Wide Column Store / Column
Families
•
Column – Family
–
Không phải là một cột là mà một tập hợp các cột
(co thể có quan hệ logic với nhau) nhóm lại thành
một bó
–
Các thành viên của cùng một Column – Family thì
được lưu trữ vật lý cùng nhau
•
Ví dụ về column-family trên gồm: name,
location và preference
21/48
Wide Column Store / Column
Families
•
Column – Family
–
Chứa bất kỳ số cột, và mỗi cột có thể chứa bất kỳ
một loại dữ liệu nào (có thể hiểu như là một mảng
các bytes dữ liệu)
–
Mỗi hàng chỉ lưu các giá trị hợp lệ (là các giá trị
khác Null)
22/48
Wide Column Store / Column
Families
Ví dụ về mô hình RDBMs sẽ có dạng Column-Family như trên
23/48
Wide Column Store / Column
Families
•
Trong lưu trữ vật lý
–
Dữ liệu dạng cột được thiết kế để có thể dễ dàng thay đổi
kích thược hoặc thêm hàng triệu các cột hoặc hàng tỷ các
hàng dữ liệu mới.
–
Một bảng có thể được kéo dài trên nhiều máy tính.
–
Một row-key duy nhất để xác định một hàng trong dữ liệu
dạng cột.
–
Các hàng được sắp xếp và chia thành từng bó, chứa các giá
trị liền nhau như là sự phát triển của dữ liệu
24/48
Wide Column Store / Column
Families
Tổ chức trong Lưu trữ vật lý
25/48