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…
NoSQL Key-Value DB
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é.
NoSQL-Document DB
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.
NoSQL-Cloumn-Family DB
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ử.
NoSQL-Graph DB
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.
NoSQL-Polyglot persistance
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.
NoSQL-e-commerce platform
Đ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
Phần 1: http://techinsight.com.vn/chuyen-gia-fpt-viet/nosql-co-gi-ma-hay-ndash-phan-1-tong-quan-ve-nosql-nd498492.html
Phạm Huy Hoàng
Source: Potato (FPT Software)
Tin liên quan: