Trang chủ Liên hệ

Cơ sở dữ liệu NoSQL là gì ?

CÔNG TY TNHH THIẾT BỊ ĐO LƯỜNG VÀ ĐIỀU KHIỂN 03/03/2023

Cơ sở dữ liệu NoSQL là gì ?

Cơ sở dữ liệu NoSQL là Cơ sở dữ liệu được xây dựng dành riêng cho mô hình dữ liệu và có sơ đồ linh hoạt để xây dựng các ứng dụng hiện đại. Cơ sở dữ liệu NoSQL được công nhận rộng rãi vì khả năng dễ phát triển, chức năng cũng như hiệu năng ở quy mô lớn. Các Cơ sở dữ liệu này sử dụng nhiều mô hình dữ liệu đa dạng, trong đó có văn bản, đồ thị, khóa – giá trị, trong bộ nhớ và tìm kiếm. Bài viết này có các tài nguyên giúp bạn hiểu thêm về cơ sở dữ liệu NoSQL và cách bắt đầu sử dụng trong các dự án thu thập dữ liệu IoT.

Vì sao bạn nên sử dụng cơ sở dữ liệu NoSQL ?

Cơ sở dữ liệu NoSQL là lựa chọn cực kỳ thích hợp cho nhiều ứng dụng hiện đại, ví dụ như di động, web và trò chơi đòi hỏi phải sử dụng cơ sở dữ liệu cực kỳ thiết thực, linh hoạt, có khả năng thay đổi quy mô và hiệu năng cao để đem đến cho người dùng trải nghiệm tuyệt vời.

Trước NoSQL, từng có một thứ gọi là … SQL

Nhắc lại một chút, database (DB) là một cơ sở dữ liệu, gồm các bảng, hàng, cột. Những thứ mình sẽ nhắc đến trong bài như: MySQL, Microsoft SQL server, MongoDB, .. là hệ quản trị cơ sở dữ liệu (DBMS). Các bạn đừng nhầm lẫn 2 khái niệm này.

Thật ra, SQL không phải là … DB, cũng không phải là DBMS. Nó là viết tắt của Structure Query Language (Ngôn ngữ truy vấn cấu trúc). Ngôn ngữ này truy vấn trên nền một RDBMS (Hệ quản trị CSDL quan hệ). Đây là thứ các bạn sinh viên được dạy trong môn “Cơ sở dữ liệu”.

Trong RDBMS, dữ liệu được lưu vào nhiều bảng. Mỗi bảng sẽ có nhiều cột, nhiều row. Ta sử dụng SQL để truy vấn như sau:

1

SELECT Name, Age  FROM Students  WHERE Score > 8

RDBMS (MySQL, Microsoft SQL Server, Oracle, …) được sử dụng rất rộng rãi, trong hầu hết các ứng dụng, vì một số lý do sau:

Sau SQL, có một thứ gọi là … NoSQL

Tuy nhiên, RDBMS vẫn còn một số khuyết điểm:

Dữ liệu được lưu thành nhiều bảng trong RDBMS, khi query ta phải join lại rất khó khăn

NoSQL Database (Phải là NoSQL Database nhé) ra đời, giải quyết được những khuyết điểm của RDBMS:

Trong tương lai, NoSQL sẽ … thế chỗ SQL ???

Tóm lại, NoSQL database chỉ là một kiểu database có cách lưu trữ, truy vấn dữ liệu hoàn toàn khác so với RDBMS và SQL. NoSQL bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu suất nhanh và khả năng mở rộng (scalability). Với những ưu điểm trên, NoSQL đang được sử dụng nhiều trong các dự án Big Data, các dự án Real-time, số lượng dữ liệu nhiều.

Liệu NoSQL có thay thế được hoàn toàn RDBMS và SQL được không? Câu trả lời là KHÔNG. Trong tương lai, RDBMS vẫn sẽ giữ được chỗ đứng của mình. Một ứng dụng không chỉ sử dụng một database duy nhất, và có thể kết hợp cả SQL lẫn NoSQL.

SQL vs noSQL

Các dạng Database NoSQL

Hiện nay, trên thị trường có khá nhiều NoSQL Database Management System: MongoDB, RavenDB, Redis, Neo4j,… Ta có thể chia NoSQL thành 4 loại:

Key-Value Database

Giới thiệu: Dữ liệu được lưu trữ trong database dưới dạng key-value, giống như một Dictionary trong C#. Để truy vấn dữ liệu trong database, ta dựa vào key để lấy value ra. Các database dạng này có tốc độ truy vấn rất nhanh.

Database tiêu biểu: Riak, Redis, MemCache, Project Voldemort, CouchBase

Ứng dụng: Do tốc độ truy xuất nhanh, key-value database thường được dùng để làm cache cho ứng dụng (Tiêu biểu là Redis và MemCache). Ngoài ra, nó còn được dùng để lưu thông tin trong sessions, profiles/preferences của user…

Document Database

Giới thiệu: Mỗi object sẽ được lưu trữ trong database dưới dạng một document. Dữ liệu sẽ được lưu trữ dưới dạng BSON/JSON/XML dưới database. Dữ liệu không schema cứng như SQL, do đó ta có thể thêm/sửa field, thay đổi table, … rất nhanh và đơn giản. Database dạng này có tốc độ truy vấn nhanh, có thể thực hiện các câu truy vấn phức tạp, dễ mở rộng (scalability). Mỗi database có một kiểu truy vấn riêng, khá là loạn xà ngầu (RavenDB dùng Lucene, MongoDB lại dùng query document).

Database tiêu biểu: MongoDB, RavenDB, CouchDB, TerraStone, OrientDB

Ứng dụng: Do nhanh và linh động, document database thường đóng vài trò làm database cho các ứng dụng prototypebig data, e-commerce, CMS. Ngoài ra, ta còn dùng nó để lưu log hoặc history. Mình khuyên các bạn nên thử học MongoDB hoặc RavenDB nhé.

Column-Family Database

Giới thiệu: Dữ liệu được lưu trong database dưới dạng các cột, thay vì các hàng như SQL. Mỗi hàng sẽ có một key/id riêng. Điểm đặt biệt là các hàng trong một bảng sẽ có số lượng cột khác nhau. Câu lệnh truy vấn của nó khá giống SQL.

Database tiêu biểu: Cassandra (Phát triển bởi Facebook), HyperTable, Apache HBase

Ứng dụng: Column-Family Database được sử dụng khi ta cần ghi một số lượng lớn dữ liệu, big data. Nó còn được ứng dụng trong 1 số CMS và ứng dụng e-commerce.

Graph Database

Giới thiệu: Dữ liệu trong graph database được lưu dưới dạng các node. Mỗi node sẽ có 1 label, 1 số properties như một row trong SQL. Các node này được kết nối với nhau bằng các relationship. Graph database tập trung nhiều vào relationship giữa các node, áp dụng nhiều thuật toán duyệt node để tăng tốc độ.

Database tiêu biểu: Neo4j, InfiniteGraph, OrientDB, HYPERGRAPHDB

Ứng dụng: Khi cần truy vấn các mối quan hệ, graph database truy vấn nhanh và dễ hơn nhiều so với database. Nó được dùng trong các hệ thống: mạng nơ ron, chuyển tiền bạc, mạng xã hội (tìm bạn bè), giới thiệu sản phẩm (dựa theo sở thích/lịch sử mua sắm của người dùng)… Neo4j là một database free, lại có một cộng đồng rất lớn, với vô số bài hướng dẫn, các bạn nên học thử.

Mapping thuật ngữ trong Relational Database và NoSQL database

RELATIONAL KEY-VALUE (RIAK) DOCUMENT (MONGODB) COLUMN-FAMILY (CASSANDRA) GRAPH (NEO4J)
instance cluster mongod cluster instance
table bucket collection column-family label
row key-value document row node
row-id key _id    
schema   database   schema

Bảng này chỉ có tính tương đối. Các node trong Graph DB không có key, mà các properties của nó sẽ đóng vai trò thay thế key.

Xu thế trong tương lai – Polyglot persistance

Như mình đã phân tích, NoSQL DB sẽ không thể nào thay thế được hoàn toàn RDBMS. Ngày trước, toàn bộ dữ liệu của một ứng dụng đều được lưu trữ dưới SQL Database.

Giờ đây, NoSQL sẽ dần chiếm vị trí của RDBMS. Một số chức năng của ứng dụng không quá coi trọng tính toàn vẹn của dữ liệu, nhưng lại cần tốc độ truy vấn nhanh, dễ truy vấn. Các chức năng này sẽ sử dụng NoSQL để truy vấn/lưu trữ dữ liệu.

Điều này tạo nên một xu hướng mới – áp dụng nhiều kiểu lưu trữ cho một ứng dụng, còn gọi là polyglot persistance. Các bạn đừng lo lắng kiến thức SQL của mình sẽ lỗi thời, vì cái ngày NoSQL chiếm chỗ của RDBMS còn lâu lắm.

Bài viết liên quan