TỔNG QUAN VỀ NOSQL

Table of Contents

TỔNG QUAN VỀ NOSQL

https://thuyct89.wordpress.com/2017/08/30/tong-quan-ve-nosql/


1. NOSQL LÀ GÌ?

Chúng ta có thể dễ dàng thấy rằng, dữ liệu được tạo ra từng phút, từng giây, dữ liệu được tạo ra không chỉ trên website mà còn từ rất nhiều nguồn khác ví dụ như mobile, smart card, smart houses ....
Với các nguồn dữ liệu đa dạng như trên thì khối lượng dữ liệu tao ra là vô cùng lớn, mặt khác thì dữ liệu cũng rất đa dạng về chủng loại (data type) cũng như cấu trúc (data structure), ví dụ: dữ liệu tin nhắn, âm thanh, hình ảnh, video ....
Những khó khăn mà chúng ta sẽ gặp phải đó là:
-- Khối lượng dữ liệu vô cùng lớn có thể lên tới hàng tetabyte hoặc pentabyte hay thập chí hàng zentabyte.
-- Mô hình dữ liệu khó có thể dự đoán trước và các kiểu dữ liệu cũng rất đa dạng.
-- Việc mở rộng khả năng lưu trữ cũng là một bài toán phải cân nhắc kỹ lưỡng.
-- Hay làm thế nào để có thể xử lý song song một lượng lớn dữ liệu cùng lúc.

Làm thế nào để giải quyết đồng thời các khó khăn trên?
NoSQL chính là giải pháp cho vấn đề trên.

NoSQL là thuật ngữ được sử dụng một loại cơ sở dữ liệu không hoàn toàn mang các đặc tính của cơ sở dữ liệu quan hệ như không đảm bảo ACID, không có đặc tính transaction v.v.. và loại cơ sở dữ liệu này được thiết kế để tăng hiệu năng xử lý dữ liệu (ghi, đọc dữ liệu) cũng như có thể dễ dàng mở rộng khả năng lưu trữ khi khối lượng dữ liệu tăng lên.

Các lợi thế khi áp dụng NoSQL trong việc lưu trữ và xử lý dữ liệu:
-- Không cần xác định trước lược đồ dữ liệu: Việc define lược đồ dữ liệu trong cơ sở dữ liệu quan hệ là bắt buộc, tuy nhiên đối với NoSQL thì lược đồ dữ liệu được define khi insert dữ liệu, và không cần phải định nghĩa trước cấu trúc đó.
-- Không tồn tại quan hệ giữa các thực thể trọng NoSQL: đối với cơ sở dữ liệu quan hệ thì việc chuẩn hóa dữ liệu giữa các bảng là rất quan trọng, tuy nhiên NoSQL không đề cao việc này, các thực thể trong NoSQL được thiết kế sao cho việc truy vấn dữ liệu được thực hiện nhanh nhất và thuận tiện nhất, việc dư thừa dữ liệu không phải là điều gì to tát khi sử dụng NoSQL.
-- Tính năng mở rộng: khi sử dụng NoSQL, một khối dữ liệu có thể được chia nhỏ để lưu trên nhiều máy khác nhau trong khi người dùng vẫn hình dung dữ liệu nằm trên một khối thống nhất. Tính năng mở rộng làm tăng khả năng truy vấn dữ liệu và đồng thời cũng làm giảm nguy cơ thắt cổ chai khi đồng thời có nhiều request cùng đọc hoặc ghi dữ liệu (việc đọc và ghi được chia sẻ ra nhiều máy).
-- Tính phân tán: tính năng này đảm bảo dữ liệu được sao lưu ở nhiều nơi và có thể dễ dàng được backup khi cần.

Tuy nhiên khi sử dụng NoSQL chúng ta cũng phải chấp nhận:
-- Không gian lưu trữ dữ liệu: do NoSQL không đề cao việc xử lý dư thừa dữ liệu nên việc áp dụng NoSQL sẽ gia tăng đáng kể dữ liệu và vì thế không gian lưu trữ dữ liệu cũng tăng lên.
-- Tính đồng nhất dữ liệu: Cơ sở dữ liệu quan hệ đảm bảo rằng dữ liệu luôn đồng nhất tại mọi thời điểm, đặc tính ACID (Atomicity, Consistency, Isolation and Durability) là bắt buộc trong cơ sở dữ liệu quan hệ. Tuy nhiên NoSQL không tuân theo các quy tắc ấy, NoSQL có một quan điểm đó là, sau một khoảng thời gian, dữ liệu tại mọi điểm trên hệ thống cơ sở dữ liệu là đồng nhất với nhau (Eventually consistence), chứ không phải lúc nào dữ liệu cũng được đồng nhất, cần có một khoảng thời gian để dữ liệu ở các điểm đồng nhất với nhau.

2. PHÂN LOẠI NOSQL

NoSQL được phân làm 4 loại:
Ngày nay có hàng trăm cơ sở dữ liệu NoSQL khác nhau, mỗi loại có một thê mạnh và phục vụ cho một mục đích riêng. Tuy nhiên dựa vào đặc điểm của mỗi NoSQL mà người ta chia NoSQL ra làm 4 loại:
-- Document
-- Key -- value
-- Column Based
-- Graph

DOCUMENT NOSQL:

Với Document NoSQL ta có thể sử dụng các truy vấn để truy xuất cả hay một phần của dữ liệu. Một điển hình của cơ sở dữ liệu hướng văn bản là MongoDB, trong MongoDB, mỗi cơ sở dữ liệu là tập hợp của các bộ sưu tập (collection). Định dạng các tập tin lưu trữ cơ sở dữ liệu có dạng .ns, .x (với x = 1, 2, 3, 4, 5,...). Mỗi bộ sưu tập bao gồm các văn bản (document), các văn bản này có thể khác nhau.

ví dụ:
{
username: "thuyct",
email: "[email protected]",
contact: {
address1: "abc",
address2: "xyz"
}
}

KEY -- VALUE NOSQL:

Mô hình lưu trữ dữ liệu dưới dạng cặp giá trị key-value trong đó việc truy suất, xóa, cập nhật giá trị thực thông qua key tương ứng.Với sự hỗ trợ của các kĩ thuật Btree, B+Tree, Hash,... dữ liệu có thể tồn tại trên RAM hoặc ổ cứng, phân tán hoặc không phân tán. Hầu hết cá NoSql Database đều là key-value store. Các sản phẩm thông dụng: DynamoDB, Azure Table Storage, Riak, Redis,...

ví dụ:
K1: abc,32,[email protected]
K2: SSE,Java

COLUMN BASED NOSQL:

Hệ cơ sở dữ liệu cho phép truy xuất ngẫu nhiên/tức thời với khả năng lưu trức một lượng 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. Hệ thống triển khai từ vài trăm cho đến hàng nghìn thiết bị dẫn đến khả năng lưu trữ hàng petabytes nhưng vẫn đảm bảo hiệu năng cao. Một số sản phẩm thông dụng: Âpche Hbase, Apache Cassandra ...

ví dụ:
row-key: 1
FirstName: "John"
LastName: "Michael"

row-key: 2
FirstName: "Linh"
LastName: "Duong"
Company: "Microsoft"

GRAPH NOSQL

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 đồ họa như cạnh, nút hay thuộc tính. Một số sản phẩm tiêu biểu như: Neo4j, Infinite Graph, InfoGrid, HyperGraphDB, Dex, GraphBase, ...
Graph NoSQL bao gồm các nút, các mối quan hệ (Relationships) hay các cạnh (edges) và các thuộc tính (properties).Một cơ sở dữ liệu hướng đồ thị đơn giản nhất chỉ có một nút. Các nút tương tự như một đối tượng trong lập trình hướng đối tượng. Một nút chứa các thuộc tính dưới dạng là văn bản chứa các cặp khóa -- giá trị. Khóa có kiểu dữ liệu là String và giá trị có kiểu dữ liệu tùy ý. Các cặp giá trị khóa -- giá trị chứa thông tin cần thiết của nút chứa nó. Các mối quan hệ (hay các cạnh) là các đường kết nối và đại diện cho mối quan hệ giữa các nút hoặc giữa các nút với các thuộc tính. Giống như nút, các mối quan hệ hay các cạnh cũng chứa các thuộc tính. Việc thêm các thuộc tính vào các mối quan hệ (hay các cạnh) làm tăng tính ngữ nghĩa, giúp bổ sung thêm siêu dữ liệu cho các thuật toán đồ thị và hạn chế truy vấn trong khi thực thi.

Một Traversal là cách truy vấn dữ liệu trong cơ sở dữ liệu hướng đồ thị, sử dụng các thuật toán điều hướng từ nút bắt đầu đến các nút liên quan.

3. NOSQL ĐƯỢC SỬ DỤNG KHI NÀO?

Để tra lời câu hỏi này, theo tôi chúng ta phải giải quyết được 3 vấn đề:
-- Có kiến thức về NoSQL cũng như về cơ sở dữ liệu quan hệ.
-- Hiểu được các yêu cầu nghiệp vụ của dự án.
-- Chọn đúng loại NoSQL.

CÓ KIẾN THỨC VỀ NOSQL CŨNG NHƯ VỀ CƠ SỞ DỮ LIỆU QUAN HỆ:

Việc hiểu biết về NoSQL và Cơ sở dữ liệu quan hệ giúp chúng ta nắm được đặc tính của mỗi loại để từ đó cân nhắc áp dụng vào bài toán cụ thể. Cơ sở dữ liệu quan hệ hỗ trợ đầy đủ đặc tính ACID, xác định trước model dữ liệu và các bảng trong cơ sở dữ liệu quan hệ có quan hệ với nhau. Trái lại đối với đa số các NoSQL đều không hỗ trợ đầy đủ ACID, không phải xác định trước model dữ liệu và các thực thể trong NoSQL không có quan hệ với nhau.

Một vấn đề nữa là tính năng mở rộng hệ thống: đối với cơ sở dữ liệu quan hệ thì việc tăng hiệu năng của hệ thống bằng cách thêm resource cho hệ thống (tăng ram, tăng CPU), việc chia hệ thống thành nhiều phần là một bài toán khó đối với cơ sở dữ liệu quan hệ. Trái lại thì đây lài là một thế mạnh của NoSQL, NoSQL được thiết kế để có thể dễ dàng lưu trữ khối dữ liệu lớn bằng cách chia dữ liệu thành các phần đặt trên các máy khác nhau.

Thêm vào đó khi dữ liệu phát triển nhanh, khối lượng dữ liệu lớn thì hiệu năng của cơ sở dữ liệu quan hệ bị giảm đi, trong khi NoSQL được thiết kế phục vụ cho mục đích này, NoSQL chia nhỏ khối dữ liệu thành các phần đặt trên nhiều máy khác nhau, do vậy việc truy vấn trên mỗi phần nhỏ sẽ nhanh hơn rất nhiều.

Và cuối cùng là tính đồng nhất dữ liệu: đối với cơ sở dữ liệu quan hệ thì dữ liệu được đảm bảo đồng nhất tại mọi thời điểm, tuy nhiên với NoSQL chấp nhận dữ liệu sẽ đồng nhất sau một khoảng thời gian nào đó.

Việc hiểu biết kỹ lưỡng về hai loại cơ sở dữ liệu sẽ góp phần đưa ra sự lựa chọn hợp lý đối với từng dự án.

HIỂU ĐƯỢC CÁC YÊU CẦU NGHIỆP VỤ CỦA DỰ ÁN:

Để giải quyết bài toán này chúng ta cần đi trả lời các câu hỏi sau:
-- Chúng ta có cần xác định trước cấu trúc bảng hay lược đồ dữ liệu không?
Nếu chúng ta cần xác định trước cấu trúc bảng thì cơ sở dữ liệu quan hệ là phù hợp, trái lại sử dụng NoSQL.
-- Có cần nâng cấp hệ thống bằng cách thêm resource cho hệ thống hay không?
Đối với cơ sở dữ liệu quan hệ, hệ thống mạnh khi tăng thêm tài nguyên Ram, CPU ....
Tuy nhiên NoSQL có thể chạy trên hệ thống phần cứng giá rẻ và có thể dễ dàng mở rộng hệ thống bằng cách thêm các máy cấu hình bình thường vào.
-- Có quản lý được loại dữ liệu khác nhau hay không (Dự đoán chính xác được bao nhiêu kiểu dữ liệu sẽ sử dụng)?
Do NoSQL không phải định nghĩa trước cấu trúc dữ liệu nên nếu không dự đoán được các loại dữ liệu thì sử dụng NoSQL là sự lựa chọn phù hợp.
-- Dữ liệu có tăng nhanh hay không?
Khi dữ liệu tăng nhanh, việc mở rộng hệ thống đối với cơ sở dữ liệu quan hệ bị gặp khó khăn, do đó cần cân nhắc tình huống này khi lựa chọn cơ sở dữ liệu cho dự án.
-- Cần thiết phải có ACID hay không?
ACID là đặc tính cố định của cơ sở dữ liệu quan hệ, trong khi NoSQL lại không đảm bảo đầy đủ các đặc tính này, vì thế tùy vào yêu cầu nghiệp vụ có cần ACID hay không để chọn cơ sở dữ liệu quan hệ hay NoSQL.
-- Hệ thống có cần đảm bảo luôn tồn tại hay không?
Đối với cơ sở dữ liệu quan hệ, việc xây dựng hệ thống dự phòng để đảm bảo hệ thống luôn vận hành trơn chu là rất khó khăn. Trái lại đây lại là một trong những đặc tính thiết yếu của NoSQL, do vậy khi khảo sát nghiệp vụ nên cân nhắc yêu số này để đưa ra lựa chọn đúng đắn.
-- Giá thành ảnh hưởng như thế nào đến việc xây dựng hệ thống.
Hâu hết các cơ sở dữ liệu quan hệ đều có license và rất đắt, trong khi đa số các NoSQL lại là open source do vậy giá thành để xây dựng hệ thống khi lựa chọn cơ sở dữ liệu quan hệ hay NoSQL là khác nhau rất nhiều.

Cơ sở dữ liệu quan hệ hay NoSQL đều có những lợi thế riêng, có những mặt mạnh, mặt yếu khác nhau, chúng ta nên xem xét kỹ nghiệp vụ đồng thời cân nhắc các đặc tính của mỗi cơ sở dữ liệu để đưa ra được lựa chọn hợp lý.

CHỌN ĐÚNG LOẠI NOSQL

Mỗi loại NoSQL được xây dựng phục vụ cho một mục đích riêng, vì thế tùy từng bài toán chúng ta cần lựa chọn loại NoSQL sao cho phù hợp.
Để lựa chọn đúng NoSQL chúng ta cần dựa vào các yếu tố:
-- Loại NoSQL: ví dụ như loại nào hỗ trợ transaction, loại nào dễ dàng mở rộng v..v
-- So sánh giữa các NoSQL: so sánh về model dữ liệu, so sánh về tính toàn vẹn  và tính đồng nhất dữ liệu, so sánh về khả năng hỗ trợ câu query.
-- Dựa trên thống kê về hiệu năng của các trang web uy tín: Như hiệu năng về đọc ghi dữ liệu, hiệu năng khi mở rộng hệ thống ...

Trên đây là toàn bộ tổng quan về NoSQL mà mình muốn giới thiệu nhằm giúp cho người đọc có cái nhìn sơ khai nhất, qua đó có cơ sở để đi vào tìm hiểu kỹ từng loại NoSQL.

Leave a Reply

Your email address will not be published. Required fields are marked *