Tải bản đầy đủ (.doc) (34 trang)

TIỂU LUẬN MÔN CƠ SƠ DỮ LIỆU NÂNG CAO Mô hình CSDL NoSQL và Ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (949.98 KB, 34 trang )

Cơ sở dữ liệu nâng cao
Giới thiệu chủ đề
1
NoSQL và Ứng
dụng
Bài tập môn CSDL Nâng cao
Nhóm 16: Nguyễn Thành Trung
Nguyễn Minh Hà
Hà Nội, 2012
Cơ sở dữ liệu nâng cao
Mục lục
Mục lục
I.Giới thiệu chủ đề 1
1.Bài toán 1
2.Lịch sử 1
II.Các vấn đề liên quan 2
1.Điện toán đám mây 2
1.1Giới thiệu 2
1.2Kiến trúc 3
2.Could Database 4
2.2Data Model 5
III. NoSQL 7
1.Định nghĩa 7
2.Kiến trúc 7
3.Tích chất 7
4.Phân loại 9
4.1Tổng quan 9
4.2Logical Data Models 10
IV.Demo mô hình NoSQL 22
1.Giới thiệu MongoDB 22
2.Đặc điểm của MongoDB 23


3.Cài đặt Mongo DB và driver kết nối với PHP, cách sử dụng MongoDB Shell Script 24
4.Demo module web xây dựng bằng php với mongo DB 25
V.Nhận xét và đánh giá 29
2
Cơ sở dữ liệu nâng cao
Giới thiệu chủ đề
I. Giới thiệu chủ đề
1. Bài toán
Trong những năm gần đây, cùng với sự phát triển mạnh của công nghệ nhu cầu sử dụng
các dịch vụ, chia sẻ thông tin trên mạng tăng mạnh mẽ. Cùng với đó là nhu cầu lưu trữ dữ liệu
với kích thước khổng lồ và dường như mô hình cơ sở dữ liệu quan hệ (RMDBs) không còn đáp
ứng được nhu cầu về lưu trữ thông tin. Yêu cầu đặt ra là phải xây dựng một mô hình lưu trữ cơ
sở dữ liệu đáp ứng được các yêu cầu như lưu trữ dữ liệu với kích thước lớn (lên đến hàng
petabytes), truy cập nhanh, dễ dàng mở rộng quy mô, .v.v. Như một tất yếu, mô hình điện toán
đám mây ra đời có thể đáp ứng các yêu cầu trên. Cốt lõi của mô hình điện toán đám mây, tạo ra
sự khác biệt giữa nó với mô hình cơ sở dữ liệu quan hệ chính là mô hình lưu trữ dữ liệu kiểu
mới: NoSQL.
NoSQL còn có nghĩa là Non-Relational (NoRel) - không ràng buộc. Tuy nhiên, thuật ngữ đó
ít phổ dụng hơn và ngày nay người ta thường dịch NoSQL thành "Not Only SQL" - Không chỉ
SQL. NoSQL ý 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.
2. Lịch sử
Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụng làm tên gọi chung cho
các cơ sở dữ liệu quan hệ mã nguồn mở nhỏ (Lightweight open source relational database)
nhưng không sử dụng SQL cho truy vấn. 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. Thuật
ngữ NoSQL đánh dấu bước phát triển của thế hệ cơ sở dữ liệu mới: phân tán không ràng buộc –
distributed non-relational.
1
Các vấn đề liên quan

Cơ sở dữ liệu nâng cao
II. Các vấn đề liên quan
1. Điện toán đám mây
1.1 Giới thiệu
Điện toán đám mây là một dẫn xuất của điện toán như một dịch vụ hơn là một sản phẩm,
bằng cách chia sẻ nguồn tài nguyên, phần mềm và thông tin được cung cấp từ một tập hợp các
máy tính hoặc một số thiết bị khác trên mạng máy tính (điển hình là mạng Internet).Điện toán
đám mây như một thành phần thương mại cho công nghệ; cung cấp sự tính toán, phần mềm, truy
nhập hay lưu trữ dữ liệu mà người dùng cuối cùng không cần biết về vị trí địa lý hay cấu hình
của hệ thống. Giống như một mạng điện lưới, người dùng tiêu thụ điện mà không cần biết hoặc
hiểu các thành phần hoặc kiến trúc của dịch vụ đó.
Có thể hiểu điện toán đám mây là một mô hình dẫn xuất của mô hình dịch vụ công nghệ
thông tin dựa trên các giao thức trên Internet và đây là một mô hình đặc trưng cho khả năng mở
rộng và thường các nguồn dữ liệu là nguồn dữ liệu logic. Điện toán đám mây là một sản phẩm
phụ, kết quả của sự phát triển các nguồn dễ dàng truy cập từ xa bằng máy tính được cung cấp
trên Internet được truy cập bằng những công cụ dựa trên nền tảng Web-base hoặc người dùng có
thể truy cập sử dụng trình duyệt Web, ứng dụng cho phép người dùng sử dụng tài nguyên tương
tự như các ứng dụng được cài đặt trên máy tính người dùng. Điện toán đám mây cung cấp các
dịch vụ thông qua mạng Internet do đó dễ dàng được truy cập, sử dụng bằng trình duyệt Web,
hoặc các phần mềm cài đặt trên máy tính cá nhân, điện thoại và kết nối với các phần mềm dịch
vụ, dữ liệu được lưu trữ được cài đặt trên máy chủ.
2
Các vấn đề liên quan
Cơ sở dữ liệu nâng cao
1.2 Kiến trúc
Mô hình điện toán đám mây gồm có một mặt trước (front end) và một mặt sau (back
end). Hai thành phần này được kết nối thông qua một mạng, trong đa số trường hợp là Internet.
Phần mặt trước là phương tiện chuyên chở qua đó người dùng tương tác với hệ thống; phần mặt
sau chính là đám mây. Phần mặt trước gồm có một máy tính khách hoặc mạng máy tính của
doanh nghiệp và các ứng dụng được sử dụng để truy cập vào đám mây. Phần mặt sau cung cấp

các ứng dụng, các máy tính, các máy chủ và lưu trữ dữ liệu để tạo ra đám mây của các dịch vụ.
Khái niệm điện toán đám mây được xây dựng trên các tầng, mỗi tầng cung cấp một mức
chức năng riêng. Sự phân tầng này của các thành phần đám mây đã cung cấp một phương tiện
cho các tầng của điện toán đám mây để trở thành một loại hàng hóa như điện, dịch vụ điện thoại
hoặc khí tự nhiên. Hàng hóa mà điện toán đám mây bán là khả năng tính toán với chi phí và phí
tổn thấp hơn cho người dùng. Điện toán đám mây đã sẵn sàng để trở thành dịch vụ siêu tiện ích
tiếp theo.
Các tầng đám mây được cung cấp:
Tầng cơ sở hạ tầng là nền tảng của đám mây. Nó gồm có các tài sản vật lý — các máy
chủ, các thiết bị mạng, các ổ đĩa lưu trữ, .v.v. Cơ sở hạ tầng là một dịch vụ (IaaS) có các nhà
cung cấp như IBM® Cloud. Khi sử dụng IaaS bạn thực tế không kiểm soát cơ sở hạ tầng nằm
dưới, nhưng bạn có quyền kiểm soát các hệ điều hành, lưu trữ, triển khai các ứng dụng và ở một
mức độ hạn chế, có quyền kiểm soát việc lựa chọn các thành phần mạng. Dịch vụ in theo yêu cầu
(POD) là một ví dụ về các tổ chức có thể hưởng lợi từ IaaS. Mô hình POD được dựa trên việc
bán sản phẩm có khả năng tùy chỉnh. Các POD cho phép các cá nhân mở cửa hàng và bán thiết
kế của các sản phẩm. Các chủ cửa hàng có thể tải lên nhiều hay ít thiết kế tùy theo khả năng sáng
tạo của họ; có hàng ngàn lần tải lên. Với các khả năng lưu trữ đám mây, một POD có thể cung
cấp không gian lưu trữ không hạn chế.
Tầng giữa là nền tảng hệ thống. Nó cung cấp cơ sở hạ tầng của ứng dụng. Nền tảng hệ
thống là một dịch vụ (PaaS) cung cấp sự truy cập đến các hệ điều hành và các dịch vụ có liên
quan. Nó cung cấp một cách để triển khai các ứng dụng lên đám mây bằng cách sử dụng các
ngôn ngữ lập trình và các công cụ do nhà cung cấp hỗ trợ. Bạn không cần phải quản lý hoặc
kiểm soát cơ sở hạ tầng nằm dưới, nhưng bạn có quyền điều khiển các ứng dụng đã triển khai và
ở một mức độ nào có quyền điều khiển ứng dụng sử dụng các cấu hình môi trường trên máy tính
chủ. PaaS có các nhà cung cấp như là Elastic Compute Cloud (EC2) của Amazon. Nhà phần
mềm doanh nhân nhỏ là một hoạt động kinh doanh lý tưởng đối với PaaS. Với nền tảng hệ thống
đã chọn lọc kỹ, có thể tạo ra các sản phẩm đẳng cấp thế giới mà không thêm gánh nặng cho hệ
thống đang chạy trong công ty.
Tầng trên cùng là tầng ứng dụng, tầng mà hầu hết mọi người xem như là đám mây. Các
ứng dụng chạy ở đây và được cung cấp theo yêu cầu của những người dùng. Phần mềm là một

dịch vụ (SaaS) có các nhà cung cấp như Google Pack. Google Pack bao gồm các ứng dụng, các
công cụ có thể sử dụng được qua Internet, như Calendar, Gmail, Google Talk, Docs và nhiều hơn
nữa.
Điện toán đám mây thường bị lẫn lộn với điện toán lưới, điện toán theo yêu cầu hay điện
toán tự trị. Đâu là sự khác nhau giữa chúng: Điện toán lưới (grid computing) là một dạng của
điện toán phân tán, trong đó tồn tại một siêu máy tính ảo, là sự bao gồm một tập hợp các máy
tính đơn liên kết với nhau và hoạt động phối hợp để thực hiện các tác vụ cực lớn, tác vụ này có
thể được chia nhỏ để thực hiện song song trên những máy tính đơn của tập hợp máy tính đó.
Điện toán theo yêu cầu (utility computing) là khối tài nguyên máy tính như bộ nhớ, bộ xử lý
trong vai trò một dịch vụ riêng biệt và cụ thể tương tự với các công trình hạ tầng kỹ thuật truyền
3
Các vấn đề liên quan
Cơ sở dữ liệu nâng cao
thống chẳng hạn như điện lực hay mạng điện thoại. Điện toán tự trị là những hệ thống có khả
năng tự vận hành, quản lý và xử lý những vấn đề xảy ra trong quá trình vận hành. Điện toán đám
mây được nhìn nhận như là một bước phát triển tự nhiên tiếp theo từ những mô hình trên. Những
hệ thống điện toán đám mây hiện nay đều có khả năng tự trị và có khả năng xử lý những tác vụ
lớn như điện toán lưới, và riêng biệt cụ thể cho một yêu cầu nào đó như điện toán theo yêu cầu.
2. Could Database
Một cơ sở dữ liệu đám mây là một cơ sở dữ liệu chạy trên nền tảng là điện toán đám mây, ví dụ
như Amazon EC2, GoGrid và Rackspace.
Hình 1 – Cơ sở dữ liệu đám mây
2.1 Deployment Model
Có hai mô hình phổ biến để cài đặt: Người dùng có thể chạy cơ sở dữ liệu trên đám mây
độc lập, sử dụng những máy ảo; hoặc có thể trả phí để truy cập các dịch vụ cơ sở dữ liệu được
cung cấp bởi các nhà cung cấp dịch vụ cơ sở dữ liệu đám mây. Trong mô hình cơ sở dữ liệu đám
mây sử dụng hai dạng cơ sở dữ liệu chính là SQL-base (Dựa trên ngôn ngữ SQL) và sử dụng mô
hình dữ liệu NoSQL
Virtual Machine Image – nền tảng đám mây cho phép người dùng cài đặt các máy ảo trong một
khoảng thời gian giới hạn và có thể chạy các cơ sở dữ liệu trên các máy ảo đó. Người dùng có

thể tải lên các cài đặt cho máy ảo riêng cùng với cơ sở dữ liệu đã được cài đặt hoặc có thể sử
4
Các vấn đề liên quan
Cơ sở dữ liệu nâng cao
dụng các mấy ảo có sẵn bao gồm sự cài đặt tối ưu cho các cơ sở dữ liệu. Ví dụ như Oracle cung
cấp những máy ảo cài đặt sẵn cùng với cơ sở dữ liệu Oracle Database 11g Enterprise Edition on
Amazon EC2.
Trình giám sát máy ảo (VMM- virtual machine monitor) cung cấp phương tiện để sử
dụng đồng thời các tiện ích điện toán đám mây (xem Hình 2). VMM là một chương trình trên
một hệ thống máy tính chủ cho phép một máy tính hỗ trợ nhiều môi trường thi hành giống hệt
nhau. Từ quan điểm của người dùng, hệ thống này là một máy tính độc lập, hoàn toàn cách biệt
với những người dùng khác. Trong thực tế, người dùng đang được phục vụ bởi cùng một máy
tính. Một máy ảo là một hệ điều hành (OS) đang được quản lý bởi một chương trình điều khiển
nằm dưới cho phép nó xuất hiện giống như là nhiều hệ điều hành. Trong điện toán đám mây,
VMM cho phép những người dùng giám sát và do đó quản lý các khía cạnh của quá trình như là
truy cập dữ liệu, lưu trữ dữ liệu, mã hóa, đánh địa chỉ, cấu trúc liên kết và di chuyển tải công
việc.
Hình 2 – Trình giám sát máy ảo
Database as Service – một số nền tảng đám mây hướng tới lựa chọn sử dụng các cơ sở dữ
liệu như một dịch vụ mà không cần sử dụng các máy ảo. Trong cài đặt, các ứng dụng chủ không
phải cài đặt hoặc chứa dữ liệu trên nó. Thay vào đó, dịch vụ cung cấp dữ liệu được tạo ra chịu
trách nhiệm cho việc cài đặt và lưu trữ dữ liệu và các ứng dụng chủ sẽ truy cập, lấy dữ liệu hoặc
sử dụng sử liệu từ các dịch vụ cung cấp dữ liệu này. Ví dụ, Amazon Web Services cung cấp 2
dịch vụ dữ liệu như là một phần dịch vụ điện toán đám mây của mình, SimpleDB lưu trữ NoSQL
key-value và Amazon Relational Database Service là dịch vụ cơ sở dữ liệu nền tảng SQL cùng
với giao diện MySQL.
Lựa chọn thứ 3 là quản lý máy chủ cơ sở dữ liệu trên những đám mây, tại đây cơ sở dữ
liệu không quan niệm như dịch vụ mà nhà cung cấp dịch vụ đám mây cung cấp và quản lý như
một ứng dụng. Ví dụ, nhà cung cấp dịch vụ đám mây Rackspace hướng tới quản lý máy chủ cho
cơ sở dữ liệu MySQL.

2.2 Data Model
SQL Databases, như Oracle Database, Microso ft SQL Server và MySQL là một dạng cơ
sở dữ liệu chạy trên đám mây. SQL database rất khó để mở rộng kích thước, có nghĩa không phù
hợp với môi trường đám mây mặc dù dịch vụ cơ sở dữ liệu đám mây cơ bản dựa trên SQL đã
được nghiên cứu và cố gắng khắc phục nhược điểm này.
5
Các vấn đề liên quan
Cơ sở dữ liệu nâng cao
NoSQL Databases, như Apache Cassandra, CouchDB và MongoDB là dạng khác của cơ sở dữ
liệu cũng chạy trên nền tảng đám mây. Cơ sở dữ liệu NoSQL được xây dựng để phục vụ việc
đọc, viết hoặc tải dữ liệu lớn và có khả năng thay đổi kích thước hệ thống một cách dễ dàng và
phù hợp với nền tảng đám mây hơn. Tuy nhiên, hầu hết các ứng dụng hiện tại được xây dựng
xung quanh một mô hình dữ liệu SQL, do đó, làm việc với cơ sở dữ liệu NoSQL thường đòi hỏi
phải viết lại hoàn toàn mã ứng dụng.
Phân loại nhà cung cấp Cloud database
dựa trên giải pháp triển khai và mô hình dữ liệu
Virtual Machine Deployment Database as a Service
SQL Data Model
 Oracle Da tabase
[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]
6
Cơ sở dữ liệu nâng cao
NoSQL
III. NoSQL
1. Đị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 (non-relation), phân tán (distributed), mã nguồn mở (open-source), và
có khả năng mở rộng theo chiều ngang (horizontal scalable) 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.
Một số những đặc điểm nhận dạng cho cơ sở dữ liệu thế hệ mới này như: lược đồ tự do (schema
– free), hỗ trợ mở rộng dễ dàng, giao diện sử dụng (API) đơn giản, nhất quán, hạn chế trên các
thành phần dữ liệu đơn lẻ, không giới hạn không gian dữ liệu, .v.v. Mô hình NoSQL đặc biệt phổ

dụng trong thời kỳ Web 2.0 bùng nổ với số lượng người dùng trên các trang mạng xã hội lên tới
hàng triệu. Do đó, dữ liệu tăng rất nhanh về kích thước vượt qua giới hạn mà phần cứng có thể
đáp ứng và cần giải quyết bằng bài toán phân tán.
2. Kiến trúc
Các hệ quản trị cơ sở dữ liệu quan hệ (RDBMs) hiện tại đã bộc lộ những yếu kém như
việc đánh chỉ mục một lượng lớn dữ liệu, phân trang, hoặc phân phối luồng dữ liệu đa phương
tiện (phim, ảnh, nhạc, .v.v.). 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ết trong khi các Social Network Services lại có một lượng dữ liệu cự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ợp với xử lý theo lô đủ đả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. Các trang như mạng xã
hội - Facebook, thương mại điện tử - Amazon là những ví dụ điểm 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ặ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ệc lư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ới nhiề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ới toà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ông thườ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). Mô hình đó cho phép tăng cường hiệu suất I/O - một trong những nguyên nhân
chính khiến performance trở nên kém.
3. Tích chất
Các mô hình cơ sở dữ liệu NoSQL có một số các tính chất như sau:
 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.
7
Cơ sở dữ liệu nâng cao
NoSQL

 Atomicity: Độc lập data state trong các operation.
 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.
 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).
Không chỉ là "Database": CEO của Amazon, Werner Vogels đề cập đến hệ thống
Dynamo của họ đã gọi nó là một "Highly available key-value store"; Google gọi BigTable để
nhấn mạnh đây là "Distributed storage system for managing structured data" (Hệ thống lưu trữ
và quản lý dữ liệu cấu trúc có phân tán) có thể thổi bay một lượng dữ liệu cực lớn. Hypertable,
một cơ sở dữ liệu dạng cột mã nguồn mở trên mô hình BigTable được sử dụng cho local search
engine của Zvents Inc có thể ghi tới 1 tỷ cell dữ liệu mỗi ngày (theo Doug Judd một kỹ sư của
Zvents). Trong khi đó BigTable kết hợp với MapReduce có thể xử lý tới 20 petabytes dữ liệu
mỗi ngày. Đánh bại performance bottlenecks. Bằng việc bỏ qua thông dịch trong SQL cùng với
những truy vấn rườm rà, NoSQL cho ta một kiến trúc tối ưu về tốc độ thực thi (ghi và truy vấn
dữ liệu).
Việc sử dụng các ràng buộc quan hệ cùng truy vấn SQL 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). Raffaele Sena, một senior
computer scientist ở Adobe Systems Inc đã nói rằng ConnectNow Web collaboration service của
họ sử dụng Java clustering software từ Terracotta thay cho cơ sở dữ liệu quan hệ đã khiến "Hệ
thống của họ trở nên mạnh hơn, phức tạp hơn so với việc sử dụng cơ sở dữ liệu quan hệ". Các
thiết kế database có tính đặc thù (như document-oriented database) sẽ lược bỏ được tầng chuyển
đổi sang mô hình lưu trữ quan hệ từ interface của nó đồng thời khiến giao tiếp tương tác trở nên

tự nhiên hơn.
8
Cơ sở dữ liệu nâng cao
NoSQL
Hình 3 – So sánh giữa MongoDB và SQL Server 2008
Không quá cần thiết: Đồ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ần thiết cho nhu cầu của họ. Như trong dự án ConnectNow của Adobe, dữ liệu người dùng
trong một session không cần thiết phải lưu lại, chúng sẽ bị xóa khi người dùng logoff. Vì vậy,
một key-value memory storage là đủ dùng.
4. Phân loại
4.1 Tổng quan
Mô hình NoSQL sử dụng mô hình dữ liệu logic có các lược đồ dữ liệu mở rộng lỏng lẻo
(Map, Column Family, Document, Graph, .v.v.) thay vì các mô hình hóa dữ liệu trong bộ dữ theo
lược đồ quan hệ cố định. Thiết kế mở rộng quy mô ngang thông qua mô hình phân phối dữ liệu
qua nhiều nút tuân thủ theo các nguyên tắc của định lý CAP (đảm bảo rằng bất kỳ hai khả
năng trong các khả năng: sẵn có, nhất quán hoặc phân vùng luôn đạt được). Điều này đi cùng với
sự cần thiết để hỗ trợ cho nhiều trung tâm dữ liệu và cung cấp linh động (thêm/gỡ bỏ một
nút từ một Cluster). Có thể vẫn còn lưu trữ dữ liệu trên đĩa, bộ nhớ hoặc cả hai. Đôi khi là trên
các thiết bị lưu trữ ngoài. Hỗ trợ nhiều giao diện 'Non-SQL' (từ 2 trở lên) cho việc truy cập dữ
liệu.
Dựa vào một số đặc điểm, chức năng của mô hình có thể phân loại mô hình NoSQL như
sau:
Interfaces – REST (HBase, CouchDB, Riak, .v.v.), MapReduce (HBase, CouchDB, MongoDB,
Hypertable, .v.v.), Get/Put (Voldemort, Scalaris, .v.v.), Thrift (HBase, Hypertable, Cassandra,
.v.v.), Language Specific APIs (MongoDB)
9
Cơ sở dữ liệu nâng cao
NoSQL
Logical Data Models – Key-Value oriented (Voldemort, Dynomite, .v.v.), Column Familiy

oriented (BigTable, HBase, Hypertable, .v.v.), Document oriented (Couch DB, MongoDB, .v.v.),
Graph oriented (Neo4j, Infogrid, .v.v.)
Data Distribution Model – Tính nhất quán và sẵn có (HBase, Hypertable, MongoDB, .v.v.),
Sẵn có và phân vùng (Cassandra, .v.v.). Tính nhất quán và phân vùng là một sự kết hợp tại nơi
mà tính sẵn có của những node không đầy đủ được thỏa hiệp. Thú vị là cơ sở dữ liệu 'Non
Relational Database' không hỗ trợ sự kết hợp.
Data Persistence – Memory Based (Redis, Scalaris, Terrastore), Disk Based (MongoDB,
Riak .v.v.), kết hợp cả Memory và Disk (HBase, Hypertable, Cassandra). Các loại thiết bị lưu
trữ cho một ý tưởng tốt về các loại trường hợp sử dụng các giải pháp có thể phục vụ. Tuy
nhiên, trong hầu hết các trường hợp mọi người đều nhận thấy rằng các giải pháp dựa trên sự kết
hợp là tốt nhất. Các giải pháp kết hợp phục vụ cho hiệu suất cao, mặc dù trong lưu trữ dữ liệu bộ
nhớ và cũng đảm bảo độ bền bằng cách lưu trữ dữ liệu vào đĩa sau khi đủ viết đã xảy ra.
Hình 4 - Phân loại mô hình NoSQL
4.2 Logical Data Models
a. 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. Một triển khai từ vài trăm cho tới hàng nghìn phần cứng
hàng hóa dẫn đến khả năng lưu trữ hàng petabytes nhưng vẫn đảm bảo tốc độ cao. Dưới đây là
một số sản phẩm thông dụng: Hadoop/HBase – Apache, BigTable – Google, Cassandra
- Facebook/Apache, Hypertable - Zvents Inc/Baidu, Cloudera, SciDB, Mnesia, Tablets,…
Sử dụng bảng và cột trong cơ sở dữ liệu quan hệ (RDBMs)
Trong RBDMs, thuộc tính của một thực thể được lưu trữ trong cột của bảng dữ liệu. Những cột
được định nghĩa trước và toàn bộ giá trị được lưu trữ trong các ô của bảng dữ liệu như hình 5
10
Cơ sở dữ liệu nâng cao
NoSQL
Hình 5 – Bảng dữ liệu
Khi khối lượng dữ liệu tăng lên thì chúng ta phải lưu trữ các giá trị tại các ô dữ liệu theo từng lần
mà sự thay đổi của nó diễn ra. Có thể coi như là một bảng Excel bao gồm có 3 chiều và chiều thứ

3 chính là chiều thời gian như dưới hình 6
Hình 6 – Bảng dữ liệu theo thời gian
Mặc dù đây là một ví dụ hết sức đơn giản, bạn có thể cảm nhận được rằng bảng dữ liệu cùng với
sự tăng của dữ liệu, lưu trữ rất nhiều các ô dữ liệu riêng rẽ theo thời gian sẽ làm vấn đề trở lên rất
phức tạp. Giới thiệu các cơ sở dữ liệu dạng cột bởi vì ví dụ biểu diễn cách sử dụng cơ sở dữ liệu
11
Cơ sở dữ liệu nâng cao
NoSQL
quan hệ (RDBMs), để hiểu được mô hình cơ sở dữ liệu dạng cột trong mô hình không quan hệ
cần nắm rõ được khái niệm đặc tính khóa (key).
Sự đối lập của cơ sở dữ liệu dạng cột và cơ sở dữ liệu quan hệ
Đầu tiên và cũng là quan trọng nhất, một cơ sở dữ liệu hướng dạng cột (column-oriented
database) áp đặt một sự cần thiết nhỏ nhất cho việc định nghĩa các lược đồ trước và có thể dễ
dàng chứa được các cột mới như là sự gia tăng của dữ liệu. Trong một lưu trữ hướng dạng cột
điển hình (typical column-oriented store) thì xác định trước một column-family và đây không
phải là một cột. Một column-family được định nghĩa là một tập hợp các cột được nhóm vào
thành một bó (bundle). Những cột trong column-family thì có quan hệ logic với nhau (mặc dù là
không bắt buộc). Các thành viên của một column-family được lưu trữ vật lý cùng nhau và
thường một người sử dụng được lợi bởi chung nhau những cột do truy cập có cùng tính chất vào
cùng một column-family. Nếu bất kỳ một giới hạn lý thuyết tồn tại trên số column-family bạn có
thể xác định nhưng giữ chúng ở giá trị nhỏ nhất có thể giúp các lược đồ trở lên linh động. Quay
trở lại với ví dụ trên, chúng ta có thể định nghĩa 3 column-family: name, location, preferences là
đủ.
Trong một cơ sở dữ liệu dạng cột, một column-family tương tự một cột trong RDBMs. Cả 2 đều
bao gồm định nghĩa chung trước khi dữ liệu được lưu trữ trong bảng và được thống kê công bằng
trong tự nhiên. Cột trong RDBMs định nghĩa kiểu dữ liệu được lưu trữ trong cột. Column-family
thì không bị giới hạn, nó có thể chứa bất kỳ một số cột và các cột này 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ủa các bytes dữ liệu. Mỗi một hàng của cơ sở dữ liệu
hướng cột chỉ lưu trữ giá trị của dữ liệu trong những cột mà giá trị của nó là hợp lệ. Không có giá
trị Null. Ở giại đoạn này có thể có lợi từ việc nhìn Hình 7, ví dụ hiện tại thay đổi để phù hợp với

lưu trữ dữ liệu dạng cột.
Hình 7 – Column - Family
12
Cơ sở dữ liệu nâng cao
NoSQL
Một phần từ những lưu trữ thân thiện cho tập dữ liệu riêng rẽ và lỏng lẻo, những dữ liệu dạng cột
cũng lưu trữ các phiên bản khác nhau của ô dữ liệu. Tuy nhiên, sự tăng liên tục của dữ liệu trong
ví dụ trên có thể được lưu trữ trong dữ liệu dạng cột như hình 8.
Hình 8- Lưu trữ dữ liệu tăng theo thời gian
Trong lưu trữ vật lý, dữ liệu không lưu trữ trong các bảng đơn mà được lưu trữ bởi các column-
family. 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. Do đó, 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. Hình 9
sẽ minh họa rõ hơn dữ liệu được lưu trữ vật lý như thế nào.
13
Cơ sở dữ liệu nâng cao
NoSQL
Hình 9 – Mô hình lưu trữ vật lý.
Những dữ liệu dạng cột điển hình thường được lưu trữ theo dạng Cluster (phân cụm) mặc dù nó
có thể chạy trong những Node đơn lẻ cho sự phát triển hoặc những mục đích thử nghiệm. Mỗi dữ
liệu dạng cột cần có các mô hình topo mạng riêng và kiến trúc để triển khai mạng, nhưng nghiên
cứu sâu về chúng thì có thể thấy một kịch bản chung.
Dữ liệu dạng cột như là một bản đồ lồng nhau của các cặp khóa/giá trị (key/value)
Mặc dù coi dữ liệu dạng cột như một bảng với các thuộc tính đặc biệt có thể dễ hiểu
nhưng nó lại tạo ra một sự mơ hồ. Những cột giống nhau và bảng ngay lập tức gợi nhớ đến ý
tưởng về cơ sở dữ liệu quan hệ và dẫn bạn tới một lược đồ giống như ở trên. Điều này có thể
làm bất lợi và thường nguyên nhân các nhà phát triển phạm phải là lại sử dụng dữ liệu dạng cột
giống như cơ sở dữ liệu quan hệ. Chắc chắn đây là lỗi thường gặp phải và khi thiết kế mà cần
phải tránh. Luôn nhớ rằng sử dụng một công cụ đúng cho một công việc quan trọng hơn là bản

thân công cụ đó. Nếu mô hình dữ liệu quan hệ (RDBMs) là cái bạn cần, hãy sử dụng nó. Tuy
nhiên, nếu bạn sử dụng dữ liệu dạng cột để thay đổi kích thước một lượng lớn dữ liệu thì không
nên sử dụng RDBMs.
14
Cơ sở dữ liệu nâng cao
NoSQL
Đơn giản chúng ta có thể hiểu dữ liệu dạng cột như một tập hợp của các bản đồ lồng nhau
(Nested map). Bản đồ hay là bản đồ băm thường được tham chiếu như là một mảng liên kết có
các cặp khóa và giá trị tương ứng với khóa đó. Khóa phải là duy nhất để tránh trường hợp tranh
chấp và giá trị thường là một mảng bytes bất kỳ. Một số bản đồ có khóa là các chuỗi ký tự và hầu
hết các cơ sở dữ liệu dạng cột thường không có những giới hạn, ràng buộc. Google Bigtable là
một ví dụ, đây là nguồn cảm hứng cho các cơ sở dữ liệu dạng cột sau này, thường được định
nghĩa riêng rẽ, phân tán, bền bỉ, nhiều chiều và là một bản đồ lưu trữ.
Một ví dụ tinh hoa không thể thiếu khi bàn luận về cơ sở dữ liệu dạng cột (column –
database) là ví dụ có tên gọi là Webtable dùng để lưu trữ các dữ liệu sao chép từ các trang web.
Như là một bảng lưu trữ nội dung của các trang web, ngoài ra còn có các thuộc tính liên quan
khác. Như các thuộc tính có thể cố định tham chiếu đến các trang hoặc dạng mime liên quan tới
nội dung. Google giới thiệu đầu tiên là các nghiên cứu trên Bigtable. Một Webtable sử dụng đảo
ngược URL của trang web như là một row-key cho trang web đó. Do đó, một URL như
www.example.com sẽ có row-key là com.example.www. Dạng của row-key sẽ là tiền đề trong
sự sắp xếp theo hàng của dữ liệu trong cơ sở dữ liệu dạng cột. Do đó, các hàng mà chưa dữ liệu
liên quan đến hai miền example.com giống như www.example.com hoặc news.example.com
được lưu trữ gần nhau khi đảo ngược các URL để làm row-key, giúp cho việc truy vấn các dữ
liệu liên quan đến miền (domain) dễ dàng hơn.
Thường, nội dụng, vị trí và dạng mime được coi như một column-family dẫn tới mô hình khái
niệm giống như bảng dạng cột Hình 10.
Hình 10 – Ví dụ về Webtable.
b. Document Store Internal
15
Cơ sở dữ liệu nâng cao

NoSQL
Trong các hệ thống Document store thì toàn bộ các tài liệu được đóng gói và mã hóa dươi
các định dạng chuẩn như: XML, YAML, JSON và BSON và dạng nhị phân như PDF, Microsoft
Office Document.
Ví dụ:
FirstName:"Bob", Address:"5 Oak St.", Hobby:"sailing".
FirstName:"Jonathan", Address:"15 Wanamassa Point Road", Children:
[{Name:"Michael",Age:10}, {Name:"Jennifer", Age:8}, {Name:"Samantha", Age:5}, {Name:"Elena",
Age:2}].
Các document được đánh địa chỉ bởi các khóa duy nhất tham chiếu đến nó. Thông thường, các
khóa này sẽ là chuỗi ký tự.
Các document được tổ chức theo nhiều cách khác nhau như:
• Tập hợp
• Gắn thẻ
• No-visible MetaData
• Cấu trúc thư mục
MongoDB là một kho hàng tài liệu (Document Store) điển hình, những tài liệu được
nhóm lại cùng nhau vào các tập hợp. Các tập hợp này có thể định nghĩa như các bảng trong cơ sở
dữ liệu quan hệ. Tuy nhiên, trong các tập hợp không có các lược đồ quan hệ như các bảng quan
hệ có. Những tài liệu bất kỳ có thể được nhóm lại trong cùng một tập hợp. Cài tài liệu trong tập
hợp nên tương tự nhau để thuận tiện cho việc lập chỉ mục (indexing). Tập hợp có thể được chia
ra sử dụng các không gian tên (namespaces) nhưng làm giảm giá trị phân cấp. Mỗi tài liệu được
lưu trữ dưới định dạng BSON là dạng mã hóa nhị phân (binary-endcodes) biểu diễn của một tài
liệu dạng JSON là định dạng bao gồm các tập hợp khóa/giá trị (key/value) lồng nhau. BSON là
một siêu tập hợp của JSON hỗ trợ thêm một số kiểu khác như biểu thức chính quy, dữ liệu nhị
phân, ngày tháng. Mỗi một tài liệu có định dạng duy nhất cái mà MongoDB có thể sinh ra. Cụ
thể, khi dữ liệu được chèn vào trong tập hợp (collection) giống như sinh tự động một mã xác
định (id) của một đối tượng
Hình 11 – Document Store
Lưu trữ dữ liệu trong Memory – Maped File

Một memory-mapped file là một phân đoạn của bộ nhớ ảo mà đã được phân chia đến
toàn bộ byte trong bộ nhớ, giống như nguồn mà có thể được tham chiếu thông qua các mô tả của
file. Ngầm hiểu các ứng dụng có thể tương tác các file này như chúng là một phần của bộ nhớ
chính. Sự cải thiện nhìn thấy trước tiên là tốc độ vào/ra (I/O) như sự so sánh đọc và ghi đĩa thông
thường. Truy cập và thao tác bộ nhớ nhanh hơn tạo lời gọi từ hệ thống. Thêm vào đó, trong một
16
Cơ sở dữ liệu nâng cao
NoSQL
số hệ điều hành, giống như Linux, miền bộ nhớ được ánh xạ tới file là một phần của bộ đệm của
trang disk-backed trong RAM. Thao tác với bộ đệm thường được gọi là bộ đệm trang (page
cache) và được cài đặt trong nhân của hệ điều hành.
Chiến lược sử dụng memory-mapped file của MongoDB là một ví dụ rõ ràng tuy nhiên
nó có một số phân nhánh. Đầu tiên, memory-mapped file hàm ý là không có sự chia rẽ giữa bộ
đệm của hệ điều hành và bộ đệm của cơ sở dữ liệu. Điều đó có nghĩa sẽ không có sự dư thừa về
bộ đệm. Thứ hai, đối với các hệ điều hành khác nhau thì sự điều khiển dữ trữ tại bộ đệm là khác
nhau, do cơ chế ánh xạ bộ nhớ ảo là khác nhau. Điều đó có nghĩa là chính sách quản lý bộ nhớ
đệm – cách tổ chức lưu trữ dữ liệu nào được giữ lại trong bộ đệm, dữ liệu nào sẽ bị loại bỏ sẽ rất
khác nhau đối với các hệ điều hành khác nhau. Thứ ba, MongoDB có thể mở rộng bộ nhớ đệm
của cơ sở dữ liệu sử dụng từ bất kỳ một bộ nhớ sẵn có nào mà không phải cấu hình thêm. Điều
đó có nghĩa bạn có thể tăng hiệu suất của MongoDB bằng cách tăng thêm bộ nhớ RAM và phân
bổ bộ nhớ ảo rộng hơn.
Ánh xạ bộ nhớ cũng có một số giới hạn. Ví dụ, MongoDB có giới hạn là kích thước dữ
liệu không quá 2G đối với hệ điều hành 32 bit (64 bit không bị giới hạn). Giới hạn thứ hai là
quản lý kích thước của mỗi tài liệu (document) và số lượng tập hợp (collection) mà máy chủ
MongoDB có thể quản lý. Một tài liệu kích thước không quá 8 MiB. Ngoài ra còn bị giới hạn về
số không gian tên (namespace) có thể giao cho một cơ sở dữ liệu. Số mặc định tên không gian có
thể hỗ trợ là 24,000. Mỗi một tập hợp và chỉ mục sử dụng nhiều hơn 1 không gian tên
(namespace). Điều đó có nghĩa, với trường hợp mặc định, có 2 chỉ mục trên một tập hợp sẽ cho
phép 8,000 tập hợp trong một cơ sở dữ liệu. Tuy nhiên, nếu muốn số lượng nhiều hơn có thể tăng
số lượng không gian tên trên 24,000.

c. Key-Value Store
Thực ra không phải tất cả các hệ thống lưu trữ theo kiểu khóa/giá trị (key/value) đều
giống nhau nhưng chúng có một số điểm chung. Ví dụ, tất cả các hệ thống lưu trữ dữ liệu theo
kiểu ánh xạ.
Tìm hiểu về Memcached
Memcached là một hệ thống phân tán lưu trữ bộ đệm cho các đối tượng với tốc độ cao
(distributed high-performance object-caching system) và có thể tải tại địa chỉ
. Nó rất phổ dụng và được sử dụng bởi các hệ thống lớn như Facebook,
Twitter, Wikipedia và Youtube. Memcached hết sức đơn giản và có một tập hợp tối thiểu các đặc
tính cần thiết. Ví dụ như không hỗ trợ backup, chuyển đổi dự phòng hay khôi phục. Memcached
là một API đơn giản có thể được sử dụng hầu hết bởi các ngôn ngữ lập trình Web. Mục tiêu
chính của việc sử dụng Memcached trong ứng dụng là giảm tải cho việc tải dữ liệu (load data).
Hình 12 giúp hiểu hơn về cách cài đặt Memcached trong hệ thống.
17
Cơ sở dữ liệu nâng cao
NoSQL
Hình 12 – Memcached System
Trái tim của Memcached là bộ cấp phát tấm (slab). Memcached lưu trữ các giá trị trong
các tấm. Mỗi một tấm bản thân là sự kết hợp của nhiều trang, mà lần lượt được tạo thành từ các
khối hoặc xô. Kích thước nhỏ nhất của một tấm có thể là 1 kB và kích thước tấm tăng với số mũ
của 1.25 (1.25
0
,
1.25
1
,1.25
2
,
.v.v.). Memcached có thể lưu trữ dữ liệu tối đa tới 1 MB. Giá trị được
lưu trữ và tham chiếu đến bởi khóa (key). Một khóa có kích thước có thể lên tới 250 B. Mỗi một

đối tượng được lưu trữ trong khối hoặc xô có cỡ gần gần nhất. Điều đó có nghĩa một đối tượng
có kích thước 1.4 kB sẽ được lưu trong khối có kích thước 1.25
2
= 1.5625 kB. Lưu trữ như thế sẽ
dẫn tới sự lãng phí trong không gian lưu trữ, đặc biệt khi một đối tượng lớn hơn tối thiểu một
khối. Memcached sử dụng tất cả các bộ nhớ có sẵn và được giới hạn bởi kiến trúc cơ bản.
Thuật toán LRU quản lý việc lấy lại các đối tượng cũ trong bộ nhớ đệm. LRU làm việc
trên cơ sở lớp mỗi tấm. Phân mảnh có thể xảy ra như là các đối tượng được lưu trữ và làm sạch.
Cấp phát lại bộ nhớ sẽ giải quyết một phần của vấn đề. Memcached là một đối tượng bộ đệm mà
không tổ chức dữ liệu trong các tập hợp như danh sách (lists), tập hợp (sets), bản đồ (maps).
Redis, măt khác cung cấp sự hỗ trợ cho tất cả các cấu trúc dữ liệu giàu (rich data structure).
Redis có cách tiếp cận cũng giống như Memcached nhưng nhanh hơn.
18
Cơ sở dữ liệu nâng cao
NoSQL
Hình 13 – Lưu trữ trong Memcached và Radis
Redis Internal
Tất cả mọi thứ trong Redis đều được biểu diễn cuối cùng dưới dạng chuỗi ký tự (string).
Ngay cả các tập hợp giống như danh sách, tập hợp, bản đồ là sự kết hợp của các chuỗi ký tự.
Redis định nghĩa một cấu trúc đặc biệt được gọi là chuỗi ký tự động đơn giản (Symbol dynamic
string – SDS). Cấu trúc bao gồm 3 phần:
Buff – mảng ký tự lưu trữ các chuỗi
Len – kiểu giá trị số nguyên (long interger) lưu trữ kích thước của mảng buff
Free – số byte còn chưa sử dụng
Mặc dù, bạn có thể nghĩ lưu trữ riêng rẽ giá trị len có thể trùng lặp, bởi vì có thể dễ dàng
tính toán dựa trên mảng buff nhưng lưu trữ như vậy cho phép tìm kiếm độ dài của chuỗi trong
một khoảng thời gian cố định. Redis lưu trữ dữ liệu trong bộ nhớ chính, vẫn lưu trữ trong đĩa như
yêu cầu. Không giống như MongoDB, Redis không sử dụng ánh xạ bộ nhớ các tập tin cho mục
đích này. Thay vào đó, Redis cài đặt nó trên hệ thống bộ nhớ ảo phụ. Khi mà dữ liệu được đổi vị
trí vào đĩa, một con trỏ tới trang trên đĩa cùng với khóa.Thêm vào trong hệ thống quản lý bộ nhớ

ảo, Redis cũng bao gồm các thư viện sự kiện để giúp cho việc điều hòa các điều khiển socket
không phải khối (non-blocking socket).
19
Cơ sở dữ liệu nâng cao
NoSQL
Hình 14 - Redis
d. Graph Database
Cơ sở dữ liệu đồ thị sử dụng cấu trúc của đồ thị gồm: đỉnh, cạnh và các thuộc tính để biểu
diễn và lưu trữ dữ liệu. Cơ sở dữ liệu đồ thị có thể định nghĩa như sau: là bất kỳ một hệ thống lưu
trữ cung cấp sự tự do cho việc đánh chỉ mục các thành phần liền kề. Điều đó có nghĩa, tất cả các
phần tử đều chứa một con trỏ có hướng tới các thành phần liền kề và việc tra cứu chỉ mục là
không cần thiết. Một cơ sở dữ liệu đồ thị tổng quát có thể chứa bất kỳ một đồ thị riêng biệt từ cơ
sở dữ liệu đồ thị chuyên ngành như triplestores và cơ sở dữ liệu mạng.
Cấu trúc của cơ sở dữ liệu đồ thị dựa trên lý thuyết đồ thị trong đó:
 Đỉnh biểu diễn các thực thể như: con người, sự giao dịch, tài khoản, hoặc bất kỳ một đối
tượng nào cần được theo dõi.
 Thuộc tính là các thông tin thích hợp mà có liên quan đến các đỉnh. Ví dụ như Wiki là
một đỉnh thì sẽ có các thuộc tính như: “website”, “reference material”, .v.v.
 Cạnh là các đường thẳng nối đỉnh với đỉnh, đỉnh với thuộc tính và biểu diễn mỗi quan hệ
giữa 2 đỉnh (hoặc thuộc tính) đó. Hầu hết các thông tin quan trọng được lưu trữ trên các cạnh,
do đó có ý nghĩa trong việc nhận dạng, so sánh mẫu trong việc kiểm tra kết nối của đỉnh,
thuộc tính, cạnh.
So sánh với hệ cơ sở dữ liệu quan hệ (RDBMs), hệ cơ sở dữ liệu đồ thị thường nhanh hơn đối
với tập dữ liệu có liên kết với nhau và ánh xạ trực tiếp tới cấu trúc của ứng dụng hướng đối
tượng. Nó có thể thay đổi kích thước tự nhiên đối với các tập dữ liệu lớn và không yêu cầu toán
tử Join và phụ thuộc ít vào các lược đồ cứng nhắc, do đó phù hợp với quản lý các lược đồ có sự
tăng theo thời gian.
Ngược lại, cơ sở dữ liệu quan hệ thì nhanh hơn trong việc thực hiện các toán tử giống nhau trên
một số lượng lớn các thành phần dữ liệu.
Cơ sở dữ liệu đồ thì là một công cụ mạnh cho việc truy vấn dữ liệu đồ thị, ví dụ tính toán

khoảng cách nhỏ nhất giữa 2 đỉnh của một đồ thị.
20
Cơ sở dữ liệu nâng cao
NoSQL
Ví dụ: Cơ sở dữ liệu đồ thị công nhân có dạng như dưới hình 15
Hình 15 – Ví dụ về graph database
21
Cơ sở dữ liệu nâng cao
Demo mô hình NoSQL
IV. Demo mô hình NoSQL
1. Giới thiệu MongoDB
Phần này giới thiệu một Nosql cụ thể là MongoDB. Chúng ta sẽ đi cụ thể vào cấu trúc dữ
liệu của MongoDB, lưu trữ dữ liệu, tạo dữ liệu và truy vấn. Cuối cùng là kết quả demo một
chương trình sử dụng MongoDB.
MongoDB là một cơ sở dữ liệu theo dạng hướng tài liệu, không phải mô hình cơ sở dữ
liệu quan hệ. Lý do chính để chuyển từ bỏ mô hình quan hệ là khả năng mở rộng dễ dàng, cũng
nhứ một số đặc điểm tiến bộ khác. Ý tưởng chính của là việc thay đổi định nghĩa “1 cột” với một
mẫu dữ liệu linh hoạt hơn “tài liệu”. Bằng việc cho phép tài liệu nhúng, mảng, việc hướng theo
tài liệu làm nó có thể biểu diễn mối quan hệ phức tạp hơn so với chỉ 1 bản ghi. Điều này rất tự
nhiên theo cách nhà phát triển trong ngôn ngữ hướng đối tượng hiện đại. MongoDB là mô hình
dữ liệu mà khóa tài liệu không định nghĩa trước hoặc cố định theo bất cứ cách nào. Nếu không
có một lược đồ để thay đổi, dữ liệu khổng lồ di cư thường là không cần thiết. Khóa mới hoặc bị
mất có thể được xử lý ở mức ứng dụng, thay vì buộc tất cả các dữ liệu có dạng tương tự. Điều
này cho phép người phát triển dễ dàng làm việc với mô hình dữ liệu. Các đặc điểm chính của
mongoDB:
 Cần ít tài nguyên và phần cứng của máy chủ để triển khai
 Tốc độ truy vấn và xử lý dữ liệu nhanh
 Mã nguồn mở
 Không có mô hình cụ thể
 MongoDB phù hợp với tất cả các hệ điều hành

 Không có quan hệ giữa các bảng, dễ sử dụng hơn theo chiều ngang
 Tập trung vào tốc độ, hiệu năng, tính linh hoạt và khả năng mở rộng
 Linh hoạt khi kết hợp với các ngôn ngữ lập trình
22
Cơ sở dữ liệu nâng cao
Demo mô hình NoSQL
2. Đặc điểm của MongoDB
Tài liệu (document): Trái tim của MongoDB chính là khái niệm ‘tài liệu’ : một tập hợp
sắp xếp các khóa với các giá trị tương ứng. Nó là đơn vị cơ bản của mongoDB, tương ứng với
một row trong csdl quan hệ. Mỗi document có một khóa đặc biệt (_id), nó là duy nhất trong một
collection.
- Khóa/giá trị trong tài liệu được sắp xếp
- Giá trị trong tài liệu không chỉ là ‘blobs’. Nó có thể là một vài loại dữ liệu khác nhau.
- Khóa trong tài liệu là các xâu. Nó có thể chứa ký tự UTF-8, với một vài chú ý:
+ Khóa không được chứ ký tự null (\0). Ký tự này được sử dụng để thông báo cuối của
một khóa
+ Ký tự . và $ được sử dụng cho một vài lý do đặc biệt
+ Khóa bắt đầu với ký tự _.
- MongoDB phân biệt chữ viết hoa và viết thường
- Khóa trong MongoDB là duy nhất trong một tài liệu
- Collection là nhóm các tài liệu. Nếu 1 tài liệu trong mongoDB tương ứng với một hàng
trong mô hình dữ liệu quan hệ, thì 1 collection tương ứng với 1 bảng
- Collection dưới dạng lược đồ tự do. Có nghĩa là tài liệu trong 1 collection đơn lẻ có thể
có nhiều dạng. Ví dụ như 2 documents {“greeting” : “hello world”}, {“foo”:5} (ở vd trên
xâu và số đều có thể lưu vào collection). Đặt tên , collection có thể đặt bằng bất kỳ ksy tự
UTF-8 trừ 1 số trường hợp :
+Xâu rỗng, chứa ký tự null (\0), bắt đầu với tiền tố system., chứa ký tự $
- Mỗi một khởi tạo của MongoDB có thể lưu trữ nhiều database, mỗi database có những
collection và quyền riêng
- Kiểu dữ liệu trong MongoDB : Tài liệu trong mongodb có thế coi như là “JSON-like”

mà địn nghĩa gần giống nhu đối tượng trong javascript : Chỉ 6 loại dữ liệu cơ sở :
 Null : Có thể dùng để định dạng cả dữ liệu null hoặc trường không tồn tại
 Boolean : Loại dữ liệu boolean, có 2 giá trị true hoặc false
 32-bit integer : Loại này không được hỗ trợ trong shell
 64-bit integer : CŨng không được hỗ trợ trong shell
 64-bit floating point number : Tất cả số trong shell thuộc loại này
 String : Bất kỳ ký tự UTF-8 cũng có thể sử dụng loại này
- Ngoài ra còn 1 số kiểu dữ liệu khác
 Dates
 Arrays
 Embedded documents
 _Id vaf ObjectIDs
23

×