ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
NGUYỄN HỮU LỘC
NGHIÊN CỨU CƠ SỞ DỮ LIỆU NOSQL VÀ CHUYỂN ĐỔI
LƯỢC ĐỒ CƠ SỞ DỮ LIỆU QUAN HỆ SANG NOSQL
LUẬN VĂN THẠC SĨ NGÀNH KHOA HỌC MÁY TÍNH
Mã số: 60 48 01.01
NGƯỜI HƯỚNG DẪN KHOA HỌC:
TS. NGUYỄN ĐÌNH THUÂN
THÀNH PHỐ HỒ CHÍ MINH - 2015
LỜI CAM ĐOAN
Tôi xin cam đoan:
1. Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn
trực tiếp của Thầy Nguyễn Đình Thuân.
2. Mọi tham khảo trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên
công trình, thời gian công bố.
Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo tôi xin chịu hoàn toàn trách
nhiệm.
Tp Hồ Chí Minh, ngày 15 tháng 10 năm 2015
Học viên
Nguyễn Hữu Lộc
LỜI CẢM ƠN
Em chân thành cảm ơn Thầy Nguyễn Đình Thuân – Đại học Công nghệ
Thông tin – Đại Học Quốc gia Thành Phố Hồ Chí Minh đã khuyến khích, động
viên, hướng dẫn và hỗ trợ em hoàn thành luận văn này.
Em cũng gửi lời cám ơn đến quý Thầy Cô trường Đại học Công nghệ Thông
tin - Đại Học Quốc gia Thành Phố Hồ Chí Minh đã cung cấp kiến thức và tạo điều
kiện tốt nhất để em hoàn thành luận văn này.
Con cảm ơn Cha Mẹ và gia đình đã tạo điều kiện tốt nhất cho con học tập và
hoàn thành luận văn.
Hữu Lộc.
MỤC LỤC
MỤC LỤC ...................................................................................................................1
DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT .................................................5
DANH MỤC CÁC THUẬT NGỮ .............................................................................6
DANH MỤC CÁC BẢNG..........................................................................................7
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ .....................................................................8
MỞ ĐẦU ...................................................................................................................10
Chương 1. TỔNG QUAN .........................................................................................12
1.1. Tình hình chuyển đổi từ cơ sở dữ liệu quan hệ vào NoSQL .............................12
1.2. Mục tiêu, nội dung, phương pháp nghiên cứu ...................................................13
Chương 2. GIỚI THIỆU CƠ SỞ DỮ LIỆU NOSQL, MONGODB VÀ DỮ LIỆU
MẪU TPC-H .............................................................................................................14
2.1. Giới thiệu NoSQL ..............................................................................................14
2.1.1. Đặc điểm nổi bật của NoSQL.................................................................15
2.1.2. Phân loại cơ sở dữ liệu NoSQL ..............................................................15
2.1.2.1 Cơ sở dữ liệu cặp khóa/giá trị ......................................................15
2.1.2.2. Cơ sở dữ liệu cột .........................................................................16
2.1.2.3. Cơ sở dữ liệu tài liệu ...................................................................18
2.1.2.4. Cơ sở dữ liệu đồ thị ....................................................................20
2.2. Giới thiệu MongoDB .........................................................................................23
2.2.1. Các khái niệm cơ bản: ............................................................................23
2.2.1.1. Khóa-giá trị .................................................................................23
2.2.1.2. Trường ........................................................................................23
2.2.1.3. Tài liệu ........................................................................................23
2.2.1.4. Bộ sưu tập ...................................................................................25
2.2.2. Các thao tác cơ bản trong MongoDB .....................................................25
2.2.2.1. Tạo cơ sở dữ liệu: .......................................................................25
1
2.2.2.2. Xóa cơ sở dữ liệu ........................................................................26
2.2.2.3. Tạo bộ sưu tập ............................................................................26
2.2.2.4. Xóa bộ sưu tập ............................................................................26
2.2.2.5. Thao tác thêm tài liệu .................................................................27
2.2.2.6. Thao tác xóa tài liệu ....................................................................27
2.2.2.7. Thao tác cập nhật tài liệu ............................................................27
2.2.2.8. Thao tác truy vấn ........................................................................28
2.2.3. Đánh giá ưu điểm, nhược điểm khi chuyển sang MongoDB .................29
2.2.3.1. Những ưu điểm khi chuyển đổi sang MongoDB ........................29
2.2.3.2. Những nhược điểm khi chuyển đổi sang MongoDB ..................29
2.3 Giới thiệu dữ liệu mẫu TPC-H ............................................................................30
2.3.1. Giới thiệu ................................................................................................30
2.3.2. Lược đồ quan hệ: ....................................................................................33
2.3.3 Đặc tả các bảng ........................................................................................33
2.3.4 Tạo dữ liệu mẫu TPC-H trong SQL Server 2008 ....................................39
Chương 3. CHUYỂN ĐỔI LƯỢC ĐỒ CƠ SỞ DỮ LIỆU SQL SERVER SANG
MONGODB ..............................................................................................................40
3.1. Một số nền tảng ánh xạ lược đồ .........................................................................40
3.2. Các bước chuyển đổi ..........................................................................................41
3.2.1. Xác định mục tiêu, lên kế hoạch ............................................................41
3.2.2. Thiết kế lược đồ ......................................................................................41
3.2.2.1. Định nghĩa mô hình dữ liệu ........................................................42
3.2.2.2. Xây dựng mô hình quan hệ.........................................................43
3.2.3. Chuyển đổi dữ liệu .................................................................................46
3.2.4. Vận hành, bảo mật dữ liệu......................................................................47
Chương 4. MẢNH LƯU TRỮ TRONG MONGODB .............................................48
4.1 Mô hình phân tán ................................................................................................48
4.2. Giới thiệu Mảnh lưu trữ .....................................................................................48
4.2.1. Mảnh lưu trữ là gì? .................................................................................48
4.2.2. Mục đích của mảnh lưu trữ? ...................................................................48
2
4.3. Tổng quan về mảnh lưu trữ trong MongoDB ....................................................50
4.3.1. Giới thiệu: ...............................................................................................50
4.3.1.1 Shards (mảnh): .............................................................................51
4.3.1.2. Query routers: .............................................................................52
4.3.1.3. Máy chủ cấu hình: ......................................................................52
4.3.2. Các yêu cầu khi dùng mảnh lưu trữ: ......................................................53
4.3.2.1. Yêu cầu về sharded cluster: ........................................................53
4.3.2.2. Yêu cầu về số lượng dữ liệu: ......................................................53
4.3.3. Kiến trúc sharded cluster thử nghiệm (Sharded cluster Test
Architecture): ....................................................................................................53
4.3.4. Khóa mảnh: ............................................................................................54
4.4. Triển khai mảnh lưu trữ trong MongoDB ..........................................................55
4.4.1. Chuẩn bị: ................................................................................................55
4.4.2. Cài đặt:....................................................................................................56
4.4.3. Một số lưu ý: ..........................................................................................60
Chương 5. CÀI ĐẶT .................................................................................................62
5.1. Chuyển đổi lược đồ SQL Server sang MongoDB .............................................62
5.1.1. Xác định mục tiêu, lên kế hoạch ............................................................62
5.1.2. Thiết kế lược đồ ......................................................................................63
5.1.3. Chuyển đổi dữ liệu .................................................................................64
5.1.4. Vận hành, bảo mật dữ liệu......................................................................66
5.2. Đánh giá .............................................................................................................66
5.2.1. Môi trường thử nghiệm: .........................................................................67
5.2.2. Công cụ so sánh tốc độ: ..........................................................................67
5.2.3. Câu truy vấn mẫu ...................................................................................68
5.2.4. Kết quả (tính theo đơn vị: mili-giây (ms)): ............................................69
Chương 6. KẾT LUẬN VÀ KHUYẾN NGHỊ .........................................................70
6.1. Nội dung đã làm được ........................................................................................71
6.2. Hướng phát triển ................................................................................................71
TÀI LIỆU THAM KHẢO .........................................................................................72
3
PHỤ LỤC CÁC CÔNG TRÌNH NGHIÊN CỨU LIÊN QUAN NỘI DUNG LUẬN
VĂN ..........................................................................................................................72
4
DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
ACID
Atomicity, Consistency, Isolation, and Durability
BSON
Binary JavaScript Object Notation
ETL
Extract Transform Load
JDBC
Java Database Connectivity
JSON
JavaScript Object Notation
NoSQL
‘Not Only’ SQL
TPC
Transaction Processing Performance Council
TPC-H
TPC Benchmark™H
5
DANH MỤC CÁC THUẬT NGỮ
API
Giao diện lập trình ứng dụng
Chunk
Đoạn dữ liệu
Collection
Bộ sưu tập
Column
Cột
Column Family
Cơ sở dữ liệu cột
Config Server
Máy chủ cấu hình
Cursor
Con trỏ
Cluster
Cụm
Database
Cơ sở dữ liệu
Document
Tài liệu
Field
Trường
Grap Database
Cơ sở dữ liệu đồ thị
Key – Value Store
Cơ sở dữ liệu cặp khóa/giá trị
Node
Nút
Record
Mẫu tin
Replicate
Nhân bản
Router
Bộ định tuyến
Super column
Siêu cột
Sharding
Mảnh lưu trữ
Schema – free
Lược đồ tự do
Shard
Mảnh dữ liệu
6
DANH MỤC CÁC BẢNG
Bảng 2.1. Ví dụ cấu trúc tài liệu .......................................................................19
Bảng 2.2. So sánh một số loại cơ sở dữ liệu NoSQL .......................................23
Bảng 2.3. Part layout ........................................................................................33
Bảng 2.4. Supplier table layout ........................................................................34
Bảng 2.5. Partsupp table layout ........................................................................34
Bảng 2.6. Customer table layout ......................................................................35
Bảng 2.7. Orders table layout ...........................................................................35
Bảng 2.8. Lineitem table layout .......................................................................36
Bảng 2.9. Nation table layout ...........................................................................38
Bảng 2.10. Region table layout ........................................................................38
Bảng 3.1. Ánh xạ các khái niệm giữa SQL Server và MongoDB....................42
Bảng 4.1. Thông tin cấu hình mảnh lưu trữ .....................................................56
Bảng 5.1. Dữ liệu SQL .....................................................................................66
Bảng 5.2. Dữ liệu MongoDB ...........................................................................66
Bảng 5.3. Câu truy vấn mẫu .............................................................................68
Bảng 5.4. Thời gian truy vấn dữ liệu của Server Server và MongoDB (có
mảnh lưu trữ) ....................................................................................................69
Bảng 6.1. Tổng hợp các đối tượng chuyển đổi ................................................70
7
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Hình 2.1. Cơ sở dữ liệu cặp khóa/giá trị .................................................................16
Hình 2.2. Cơ sở dữ liệu cột .......................................................................................17
Hình 2.3. Siêu cột ......................................................................................................18
Hình 2.4. Cơ sở dữ liệu đồ thị ...................................................................................20
Hình 2.5. Ví dụ về các nút trong một cơ sở dữ liệu đồ thị ........................................21
Hình 2.6. Sơ đồ thiết kế hệ thống cơ sở dữ liệu Master -Slave ................................22
Hình 2.7. Full Members [13].....................................................................................30
Hình 2.8. Associate Members [13] ...........................................................................30
Hình 2.9. The TPC-H Business Environment ...........................................................32
Hình 2.10. Lược đồ TPC-H .......................................................................................33
Hình 2.11. Lược đồ cơ sở dữ liệu TPC-H trong SQL Server 2008 ..........................39
Hình 3.1. Các bước chuyển đổi .................................................................................41
Hình 3.2. Ví dụ cấu trúc nhúng văn bản ...................................................................44
Hình 3.3. Ví dụ cấu trúc tham chiếu văn bản ............................................................45
Hình 4.1. Mô hình mảnh dữ liệu [7] .........................................................................49
Hình 4.2. Mô hình mảnh lưu trữ trong MongoDB [7] ..............................................50
Hình 4.3. Mảnh chính [7] ..........................................................................................51
Hình 4.4. Mô hình cài đặt thử nghiệm mảnh lưu trữ trong MongoDB [7] ...............54
Hình 4.5. Sự phân bố các tài liệu theo đoạn dữ liệu [7]............................................54
Hình 4.6. Mô hình phân tán dữ liệu mảnh lưu trữ ....................................................55
Hình 4.7. Ứng dụng tạo dữ liệu cho bộ sưu tập LINEITEM ....................................59
Hình 4.8. Kết quả trên Mongos .................................................................................59
Hình 4.9. Kết quả trên mảnh 1 ..................................................................................60
Hình 4.10. Kết quả trên mảnh 2 ................................................................................60
8
Hình 5.1. Lược đồ TPC-H trong SQL Server ...........................................................62
Hình 5.2. Mô hình chuyển đổi ..................................................................................62
Hình 5.3. Lược đồ TPC-H trong MongoDB .............................................................64
Hình 5.4. Giao diện ứng dụng chuyển dữ liệu SQL sang MongoDB .......................64
Hình 5.5. Giao diện công cụ so sánh tốc độ truy vấn dữ liệu trong SQL Server và
MongoDB ..................................................................................................................67
Hình 5.6. Biểu đồ so sánh tốc độ truy vấn SQL Server và MongoDB .....................69
9
MỞ ĐẦU
Yêu cầu xử lý một lượng lớn dữ liệu là thách thức đối với Hệ quản trị cơ sở
dữ liệu quan hệ và NoSQL được xem như là một giải pháp hữu hiệu hiện nay.
NoSQL được tạo ra không phải để cạnh tranh với cơ sở dữ liệu quan hệ mà là để
đảm nhiệm những việc mà cơ sở dữ liệu quan hệ chưa làm tốt. NoSQL được xem
như thế hệ cơ sở dữ liệu kế tiếp của cơ sở dữ liệu quan hệ. NoSQL là một hệ cơ sở
dữ liệu không ràng buộc, phân tán, mã nguồn mở, có khả năng mở rộng theo chiều
ngang. Vì vậy, tôi chọn thực hiện đề tài Nghiên cứu cơ sở dữ liệu NoSQL và chuyển
đổi lược đồ cơ sở dữ liệu quan hệ sang NoSQL.
Trong các hệ cơ sở dữ liệu NoSQL thì MongoDB hiện đang phát triển khá
mạnh. MongoDB là một cơ sở dữ liệu hướng tài liệu, mã nguồn mở, cung cấp hiệu
suất cao, tính sẵn sàng cao, và mở rộng quy mô tự động [3]. Trong luận văn này,
thực hiện chuyển đổi lược đồ cơ sở dữ liệu SQL Server sang MongoDB với dữ liệu
mẫu là TPC-H. TPC-H liên quan đến các hệ hỗ trợ quyết định: kiểm tra dữ liệu lớn;
thực hiện các truy vấn trả lời cho các câu hỏi trong lĩnh vực kinh doanh.
Bỏ qua các yếu tố trước khi chuyển đổi bao gồm các khía cạnh giá cả của các
giải pháp và chi phí khả năng mở rộng, trọng tâm của luận văn này là sự chuyển đổi
sơ đồ. Mục tiêu chính là thiết kế, thực hiện, kiểm tra các khả năng, những hạn chế,
và thiếu sót khi chuyển đổi lược đồ cơ sở dữ liệu quan hệ (cụ thể là SQL Server)
sang lược đồ cơ sở dữ liệu NoSQL (MongoDB) có xem xét tính năng mảnh lưu trữ
trong MongoDB.
Luận văn được trình bày thành 6 chương:
Chương 1. Tổng quan: trình bày tình hình nghiên cứu trong và ngoài nước, xác định
mục tiêu đề tài, nội dung và phương pháp nghiên cứu.
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H.
Chương 3. Chuyển đổi lược đồ cơ sở dữ liệu SQL Server sang MongoDB: trình bày
cơ sở lý thuyết để chuyển đổi lược đồ SQL Server sang MongoDB.
10
Chương 4. Mảnh lưu trữ trong MongoDB: trình bày các khái niệm, đặc điểm, lý
thuyết cài đặt của mảnh lưu trữ trong MongoDB.
Chương 5. Cài đặt: xây dựng ứng dụng C# chuyển đổi và đánh giá hiệu suất khi
chuyển đổi lược đồ SQL Server sang MongoDB.
Chương 6. Đánh giá, kết luận.
11
Chương 1. Tổng quan
Chương 1. TỔNG QUAN
1.1. Tình hình chuyển đổi từ cơ sở dữ liệu quan hệ vào NoSQL
Thực tế là đã có nhiều công ty chuyển đổi dữ liệu quan hệ của họ sang
NoSQL. Hầu hết là chuyển đổi ở mức vật lý như là bảng, dòng, cột. Ở đây, xin trích
dẫn một số trường hợp trong số đó.
Netflix, nhà cung cấp dịch vụ phim ảnh và chương trình truyền hình trực
tuyến, chuyển đổi từ Oracle sang Amazon Web Services (AWS) SimpleDB và
Simple Storage Service (S3) vì AWS hứa hẹn là sản phẩm có tính sẵn sàng tốt hơn
và khả năng mở rộng trong một khoảng thời gian tương đối ngắn [12]. Trước khi
chuyển đổi, họ chỉ có một trung tâm dữ liệu và đối mặt với nhiều vấn đề. Thay vì
xây dựng thêm nhiều trung tâm, họ quyết định chuyển dữ liệu sang AWS.
eBay đã áp dụng Cassandra trong dự án Socail Signal, một dự án liên quan
đến chức năng thích/sở hữu/muốn trên các trang sản phẩm của eBay. Họ đã tổng
hợp các kinh nghiệm thực tế và gợi ý một số mô hình hiệu quả khi di chuyển dữ liệu
vào Cassandra [5].
Foursquare, mạng xã hội địa điểm, khởi đầu với dữ liệu MySQL, sau đó
chuyển sang PostgreSQL. Đối mặt với các thách thức tới từ việc dữ liệu phát triển
nhanh chóng, họ đã xem xét nhiều chọn lựa và quyết định chọn MongoDB được lưu
trên Amazon Web Services.
Wireclub, một cộng đồng trực tuyến với hơn 5 triệu người dùng. Mỗi ngày
Wireclub phục vụ hơn một triệu lượt xem cơ sở dữ liệu chuyên sâu và hàng chục
dịch vụ của hàng triệu cuộc gọi giao diện lập trình ứng dụng (API). Người dùng của
họ trao đổi hơn 1,2 triệu tin nhắn mỗi ngày. Wireclub tập trung vào việc cung cấp
các công cụ cho sự tương tác thời gian thực do đó đã quyết định chuyển dữ liệu từ
Microsoft SQL Server (cơ sở dữ liệu quan hệ truyền thống) sang MongoDB (cơ sở
dữ liệu NoSQL hướng tài liệu). Sau khi chuyển đổi, Wireclub đưa ra các kinh
nghiệm như sau: MongoDB có nhiều lợi thế về tốc độ xử lý, miễn phí, lược đồ
động,.. Tuy nhiên, ta cũng có một số thành phần sẽ không thể di chuyển sang
MongoDB [6].
12
Chương 1. Tổng quan
Mặc dù đã có nhiều công trình liên quan đến nội dung của đề tài này, tuy
nhiên điểm hạn chế là không có các tiêu chuẩn nào cho việc thực hiện chuyển đổi.
Hiện tại, việc chuyển đổi này chưa thực sự rõ ràng và chủ yếu dựa vào các phương
pháp heuristic, ví dụ như dựa vào kinh nghiệm của các nhà phát triển hoặc là những
phán đoán trực giác [2]. Việc chuyển đổi từ cơ sở dữ liệu quan hệ sang cơ sở dữ liệu
NoSQL là một quá trình rất khó để thực hiện một cách tự động.
1.2. Mục tiêu, nội dung, phương pháp nghiên cứu
Mục tiêu của luận văn là:
Tìm hiểu cơ sở dữ liệu NoSQL và minh họa bằng MongoDB
Xem xét tính năng mảnh lưu trữ trong MongoDB
Đặc tả, thiết kế, cài đặt một phương thức cho việc chuyển đổi lược đồ
cơ sở dữ liệu quan hệ sang cơ sở dữ liệu NoSQL.
Xây dựng ứng dụng chuyển đổi, đánh giá các ưu điểm và hạn chế khi
chuyển đổi
Nội dung chính là thiết kế và thực hiện chuyển đổi lược đồ cơ sở dữ liệu
SQL Server sang lược đồ cơ sở dữ liệu MongoDB. Kiểm tra các khả năng, những
hạn chế, và thiếu sót khi di chuyển, xác định xem các yếu tố nào trong lược đồ cơ
sở dữ liệu SQL Server có thể được chuyển đổi trực tiếp, yếu tố nào không thể
chuyển đổi và sự khác biệt tương ứng giữa hai loại cơ sở dữ liệu là gì?
Trước khi chuyển đổi, ta tìm hiểu qua về cơ sở dữ liệu NoSQL, MongoDB
và dữ liệu mẫu TPC-H. Dựa trên kinh nghiệm của các công ty đã thực hiện chuyển
đổi; tài liệu hỗ trợ của MongoDB cùng nhiều tài liệu khác, xây dựng một phương
thức chuyển đổi. Tiếp theo, tiến hành chuyển đổi lược đồ SQL Server sang
MongoDB. Dựa vào kết quả đạt được, luận văn sẽ phân tích, so sánh, rút ra các bài
học kinh nghiệm; đề xuất các hướng nghiên cứu tiếp theo nhằm đạt hiệu quả cao
nhất của đề tài.
13
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Chương 2. GIỚI THIỆU CƠ SỞ DỮ LIỆU NOSQL, MONGODB VÀ
DỮ LIỆU MẪU TPC-H
2.1. Giới thiệu NoSQL
NoSQL là một xu hướng cơ sở dữ liệu mà 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. NoSQL có nghĩa là NonRelational (NoRel) - không ràng buộc. Tuy nhiên, thuật ngữ đó ít phổ biến hơn và
ngày nay người ta thường dịch NoSQL thành Not Only SQL - Không chỉ SQL [1].
NoSQL ra đời năm 1998 bởi Carlo Strozzi khi ông lập mới một hệ cơ sở dữ
liệu quan hệ mã nguồn mở nhanh và nhẹ, không liên quan đến SQL. Vào năm 2009,
Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ NoSQL trong một hội
thảo về cơ sở dữ liệu nguồn mở phân tán [9].
NoSQL được xem như hệ cơ sở dữ liệu kế tiếp của cơ sở dữ liệu quan hệ, là hệ
cơ sở dữ liệu không ràng buộc, phân tán, mã nguồn mở, có 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 cao với những đòi hỏi về tài nguyên phần cứng
thấp.
Khi làm việc với NoSQL ta sẽ gặp một số khái niệm sau:
Trường (field): tương đương với khái niệm cột (column) trong SQL
Tài liệu (document): thay thế khái niệm dòng (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 tài
liệu chứa số trường không cố định trong khi 1 dòng thì số cột (column) là
định sẵn trước.
Bộ sưu tập (collection): tương đương với khái niệm bảng (table) trong
SQL. Một bộ sưu tập là tập hợp các tài liệu. Điều đặc biệt là một bộ sưu
tập có thể chứa các tài liệu 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ỏ. Chúng ta sẽ sử dụng con trỏ để lấy dữ liệu từ
cơ sở dữ liệu.
14
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
2.1.1. Đặc điểm nổi bật của NoSQL
Khả năng mở rộng : gần như không có giới hạn cho dữ liệu và người
dùng hệ thống.
Tính sẵn sàng: Vì chấp nhận sự trùng lặp trong lưu trữ dữ liệu nên nếu
một nút bị chết sẽ không ảnh hưởng tới toàn bộ hệ thống.
Tính nguyên tố: Độc lập trạng thái dữ liệu trong các thao tác.
Tính nhất quán: Chấp nhận tính nhất quán yếu, cập nhật mới không đảm
bảo các truy xuất sau đó thấy đượ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.
Tính bền vững: Dữ liệu có thể tồn tại trong bộ nhớ máy tính, nhưng cũng
đồng thời được lưu trữ tại đĩa cứng.
Triển khai linh hoạt: Hệ thống sẽ tư động nhận biết việc bổ sung thêm
hay loại bỏ các nút. Hệ thống không đòi hỏi cấu hình phần cứng mạnh,
đồng nhất.
Mô hình hóa linh hoạt: cặp dữ liệu khóa-giá trị, dữ liệu cấu trúc phân cấp,
đồ thị.
Truy vấn linh hoạt: tải một tập giá trị dựa vào tập khóa.
Khả năng mở rộng theo chiều ngang: Bình thường, với các hệ quản trị cơ
sở dữ liệu quan hệ, khi mà dữ liệu quá lớn phương pháp tăng khả năng
lưu trữ là sẽ phải mở rộng (nâng cấp máy chủ), còn đối với NoSQL thì
chỉ cần bổ sung thêm máy chủ khác vì hệ thống hỗ trợ lưu trữ phân tán
trên nhiều máy.
2.1.2. Phân loại cơ sở dữ liệu NoSQL
Cơ sở dữ liệu NoSQL được phân loại theo cách mà nó lưu trữ dữ liệu và gồm có
4 loại chính:
2.1.2.1 Cơ sở dữ liệu cặp khóa/giá trị
Cơ sở dữ liệu NoSQL đơn giản nhất chính là cơ sở dữ liệu cặp khóa/giá trị
(key/value stores). Nó đơn giản nhất là vì những giao diện lập trình ứng dụng của
nó đơn giản, những triển khai thực tế của NoSQL thường rất phức tạp.
15
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Hình 2.1. Cơ sở dữ liệu cặp khóa/giá trị
Với cơ sở dữ liệu cặp khóa/giá trị thì việc truy xuất, xóa, cập nhật giá trị thực
(value) đều thông qua khóa tương ứng. Giá trị được lưu dưới dạng BLOB (Binary
large object). Xây dựng một cơ sở dữ liệu cặp khóa/giá trị rất đơn giản và mở rộng
chúng cũng rất dễ dàng. Cơ sở dữ liệu cặp khóa/giá trị có hiệu suất rất tốt bởi vì mô
hình truy cập dữ liệu được tối ưu hóa tối đa. Cơ sở dữ liệu cặp khóa/giá trị là cơ sở
cho tất cả những loại cơ sở dữ liệu NOSQL khác.
Cơ sở dữ liệu cặp khóa/giá trị rất hữu ích khi chúng ta cần truy cập dữ liệu
theo khóa. Ví dụ như chúng ta cần lưu trữ thông tin phiên giao dịch hoặc thông tin
giỏ hàng của người dùng thì cơ sở dữ liệu cặp khóa/giá trị là một sự lựa chọn hợp
lý bởi vì nhờ vào id của người dùng chúng ta có thể nhanh chóng lấy được các
thông tin liên quan trong phiên giao dịch hoặc giỏ hàng của người dùng đó. Giỏ
mua hàng của Amazon chạy trên cơ sở dữ liệu cặp khóa/giá trị (Amazon Dynamo).
Vì thế có thể thấy rằng cơ sở dữ liệu cặp khóa/giá trị có khả năng mở rộng cao.
Amazon Dynamo Paper là một ví dụ tốt nhất về kiểu dữ liệu cặp khóa/giá trị. Rhino
DHT có khả năng mở rộng, chuyển đổi dự phòng, không cấu hình, là dạng cơ sở dữ
liệu cặp khóa/giá trị trên nền tảng .Net.
2.1.2.2. Cơ sở dữ liệu cột
Cơ sở dữ liệu cột là 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ảng ghi và mỗi bảng ghi có thể chứa hàng
triệu cột. Một triển khai từ vài trăm cho tới hàng nghìn nút dẫn đến khả năng lưu trữ
hàng Petabytes dữ liệu nhưng vẫn đảm bảo hiệu suất cao.
16
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Cơ sở dữ liệu cột được biết đến nhiều nhất thông qua sự triển khai BigTable
của Google. Nhìn bên ngoài vào nó giống với cơ sở dữ liệu quan hệ nhưng thực sự
thì có sự khác biệt rất lớn từ bên trong. Một trong những khác biệt đó chính là việc
lưu trữ dữ liệu theo cột (trong cơ sở dữ liệu cột) so với việc lưu trữ dữ liệu theo
dòng (trong cơ sở dữ liệu quan hệ). Sự khác biệt lớn nhất chính là bản chất của nó.
Chúng ta không thể áp dụng cùng một giải pháp mà chúng ta sử dụng trong cơ sở
dữ liệu quan hệ vào trong cơ sở dữ liệu cột. Đó là bởi vì cơ sở dữ liệu cột phi quan
hệ. Các khái niệm sau đây rất quan trọng để hiểu được cơ sở dữ liệu cột làm việc
như thế nào:
-
Quan hệ cột (column family)
-
Siêu cột (super column)
-
Cột (column)
Quan hệ cột: Một quan hệ cột là cách thức dữ liệu được lưu trữ trên đĩa cứng.
Tất cả dữ liệu trong một cột sẽ được lưu trên cùng một file. Một quan hệ cột có thể
chứa siêu cột hoặc cột.
Hình 2.2. Cơ sở dữ liệu cột
17
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Siêu cột: Một siêu cột có thể được dùng như một kiểu từ điển (dictionary).
Nó là một cột có thể chứa những cột khác (mà không phải là siêu cột).
Hình 2.3. Siêu cột
Cột: Một cột là một bộ gồm tên, giá trị và dấu thời gian (thông thường chỉ
quan tâm tới khóa-giá trị).
2.1.2.3. Cơ sở dữ liệu tài liệu
Khái niệm trung tâm của cơ sở dữ liệu tài liệu (document database) là khái
niệm “tài liệu”. Về cơ bản thì cơ sở dữ liệu tài liệu là một cơ sở dữ liệu cặp khóa/giá
trịvới giá trị nằm trong một định dạng được biết đến (known format). Mỗi loại cơ sở
dữ liệu tài liệu được triển khai khác nhau ở phần cài đặt chi tiết nhưng tất cả các tài
liệu đều được đóng gói và mã hóa dữ liệu trong một số định dạng tiêu chuẩn hoặc
mã hóa. Một số kiểu mã hóa được sử dụng bao gồm XML, YAML, JSON, và
BSON, cũng như kiểu nhị phân như PDF và các tài liệu Microsoft Office (MS
Word, Excel …). Trên thực tế, tất cả cơ sở dữ liệu tài liệu đều sử dụng JSON(hoặc
BSON) hoặc XML.
Các tài liệu bên trong một cơ sở dữ liệu tài liệu thì tương tự nhau, nó gần
giống với khái niệm “mẫu tin” hay “dòng” trong cơ sở dữ liệu quan hệ truyền thống
nhưng nó ít cứng nhắc hơn. Các tài liệu không bắt buộc phải tuân theo một lược đồ
tiêu chuẩn, cũng không cần phải có tất cả các thuộc tính, khóa tương tự nhau. Xem
ví dụ dưới đây:
18
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Bảng 2.1. Ví dụ cấu trúc tài liệu
Document 1
Document 2
{
{
FirstName:"Bob",
FirstName:"Jonathan",
Address:"5 Oak St.",
Address:"15 Wanamassa Point Road",
Hobby:"sailing"
Children:[
}
{Name:"Michael",Age:10},
{Name:"Jennifer", Age:8},
{Name:"Samantha", Age:5},
{Name:"Elena", Age:2}
]
}
Cả hai tài liệu trên có một số thông tin tương tự và một số thông tin khác nhau.
Không giống như một cơ sở dữ liệu quan hệ truyền thống, nơi mỗi dòng có cùng
một tập hợp trường dữ liệu và các trường dữ liệu này nếu không sử dụng thì có thể
được lưu trữ rỗng, còn trong cơ sở dữ liệu tài liệu thì không có trường dữ liệu rỗng
trong tài liệu. Hệ thống này cho phép thông tin mới được thêm vào mà không cần
phải khai báo rõ ràng.
Các tài liệu được đánh dấu trong cơ sở dữ liệu tài liệu thông qua một khóa duy
nhất đại diện cho tài liệu đó. Thông thường, khóa này là một chuỗi đơn giản. Trong
một số trường hợp, chuỗi này có thể là một đường dẫn. Chúng ta có thể sử dụng
khóa này để lấy tài liệu từ cơ sở dữ liệu. Thông thường, cơ sở dữ liệu vẫn lưu lại
một chỉ số (index) trong khóa của tài liệu để tài liệu có thể được tìm kiếm nhanh
chóng. Ngoài ra, cơ sở dữ liệu sẽ cung cấp một giao diện lập trình ứng dụng hoặc
ngôn ngữ truy vấn cho phép bạn lấy các tài liệu dựa trên nội dung. Ví dụ, chúng ta
muốn truy vấn lấy những tài liệu mà những tài liệu đó có tập trường dữ liệu nhất
định với những giá trị nhất định.
19
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Các cơ sở dữ liệu tài liệu phổ biến là: BaseX, ArangoDB, Clusterpoint,
Couchbase Server, CouchDB, eXist, FleetDB, Jackrabbit, Lotus Notes, MarkLogic,
MongoDB, MUMPSDatabase, OrientDB, Apache Cassandra, Redis, Rocket U2,
RavenDB [10]…. Lưu ý: hầu hết XML database đều là triển khai của cơ sở dữ liệu
tài liệu. Một số XML database trong danh sách các cơ sở dữ liệu tài liệu phổ biến là:
BaseX, eXist, MarkLogic, Sedna.
2.1.2.4. Cơ sở dữ liệu đồ thị
Cơ sở dữ liệu đồ thị (Graph Database) 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 đồ thị như cạnh, nút, các thuộc tính.
Hình 2.4. Cơ sở dữ liệu đồ thị
Chúng ta có thể nghĩ cơ sở dữ liệu đồ thị như một cơ sở dữ liệu tài liệu với các
kiểu tài liệu đặc biệt và các mối quan hệ. Một ví dụ điển hình đó chính là mạng xã
hội, có thể xem hình bên dưới:
20
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
Hình 2.5. Ví dụ về các nút trong một cơ sở dữ liệu đồ thị
Trong ví dụ trên ta có 4 tài liệu và 3 mối quan hệ. Mối quan hệ trong cơ sở dữ
liệu đồ thị thì có ý nghĩa nhiều hơn con trỏ đơn thuần. Một mối quan hệ có thể một
chiều hoặc hai chiều nhưng quan trọng hơn là mối quan hệ được phân loại. Một
người có thể liên kết với người khác theo nhiều cách, có thể là khách hàng, có thể là
người trong gia đình…Mối quan hệ tự bản thân nó có thể mang thông tin. Trong ví
dụ trên ta chỉ đơn giản lưu lại lại loại quan hệ và mức độ gần gũi (bạn bè, người
trong gia đình, người yêu…).
Với cơ sở dữ liệu đồ thị, chúng ta có thể thực hiện các hoạt động đồ thị. Một
thao tác cơ bản nhất là traversal (điểm giao nhau). Ví dụ như nếu ta muốn biết
những người bạn của ta trong thị trấn để cùng đi ăn uống thì đơn giản. Nhưng còn
bạn bè gián tiếp thì sao, làm sao ta biết được họ. Sử dụng cơ sở dữ liệu đồ thị chúng
ta có thể định nghĩa truy vấn sau:
new GraphDatabaseQuery
{
SourceNode = ayende,
MaxDepth = 3,
RelationsToFollow
=
new[]{"As
21
Known
As",
"Family",
Chương 2. Giới thiệu cơ sở dữ liệu NoSQL, MongoDB và dữ liệu mẫu TPC-H
"Friend", "Romantic", "Ex"},
Where = node => node.Location == ayende.Location,
SearchOrder = SearchOrder.BreadthFirst
}.Execute();
Chúng ta có thể thực hiện những truy vấn phức tạp hơn như lọc trên các thuộc
tính quan hệ, xem xét trọng lượng của người đó... Cơ sở dữ liệu đồ thị thường được
sử dụng để giải quyết các vấn đề về mạng. Trong thực tế, hầu hết các trang web
mạng xã hội đều sử dụng một số hình thức của cơ sở dữ liệu đồ thị để làm những
việc mà chúng ta đã biết như: kết bạn, bạn của bạn…
Một vấn đề đối với việc mở rộng cơ sở dữ liệu đồ thị là rất khó để tìm thấy
một đồ thị con độc lập, có nghĩa là rất khó để ta phân tán cơ sở dữ liệu đồ thị thành
nhiều mảnh. Có rất nhiều nỗ lực nghiên cứu cho việc này nhưng chưa có bất kỳ giải
pháp nào đáng tin cậy được đưa ra.
Một số sản phẩm tiêu biểu của cơ sở dữ liệu đồ thị là: Neo4J, Sones,
AllegroGraph, Core Data, DEX, FlockDB, InfoGrid, OpenLink Virtuoso,...
Hình 2.6. Sơ đồ thiết kế hệ thống cơ sở dữ liệu Master -Slave
Một cơ sở dữ liệu 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, cơ sở dữ liệu nhỏ sẽ được gộp vào cơ sở dữ liệu
lớn có thiết kế tối ưu cho phép đọc (read operation, slave database). Mô hình đó cho
22