NoSQL có gì hay ho – Tổng quan về NoSQL – Phần 2

Như đã giới thiệu ở bài trước, NoSQL Database đang được sử dụng ngày một nhiều hơn, chiếm dần vị trí của Relational Database. Bài viết này sẽ giới thiệu một số dạng NoSQL và ứng dụng của chúng.

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
  • Document Database
  • Column-Family Database
  • Graph Database

overview2

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…

1

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 prototype, big 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é.

2

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.

3

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ử.

4

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 ở bài trước, 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.
5

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.

6

Đ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. Tuy vậy, nếu các bạn muốn đi đầu về công nghệ, hoặc tham gia các công ty start-up, hãy tự trang bị cho mình kiến thức NoSQL nhé.

Bài viết có tham khảo từ sách NoSQL Distilled và bài viết của tác giả: http://martinfowler.com/bliki/PolyglotPersistence.html

8 thoughts on “NoSQL có gì hay ho – Tổng quan về NoSQL – Phần 2”

  1. Chắc là thiếu chữ ở “Hiện nay, trên thị trường có rất NoSQL Database Management System: MongoDB, RavenDB, Redis, Neo4j,…” rồi anh ơi

    Like

  2. Anh có thể cho e xin thêm tài liệu về Nosql này ko ạ, e đang học bài này nên đang rất cần tài liệu, mong a giúp đỡ !

    Like

  3. Các loại lưu trữ dữ liệu như NoSql có thể lưu kiểu hình ảnh varbinary được không bạn?

    Like

Leave a comment