Các loại NoSQL thông dụng

[

Bài viết được dẫn lại từ zxthanhhuy.wordpress.com với mục đích note, chia sẻ cho mọi người

Xin cảm ơn tác giả!

]

Các loại NoSQL thông dụng

1. Key – value

Key-value stores là kiểu lưu trữ đơn giản nhất trong các loại CSDL NoSQL đồng thời nó cũng là kiểu lưu trữ cho tất cả các HQT CSDL NoSQL. Thông thường, các HQT CSDL Key-value lưu trữ dữ liệu dưới dạng key (là một chuỗi duy nhất) liên kết với value có thể ở dạng chuỗi văn bản đơn giản hoặc các tập, danh sách dữ liệu phức tạp hơn. Quá trình tìm kiếm dữ liệu thường sẽ được thực hiện thông qua key, điều này dẫn đến sự hạn chế về độ chính xác.

key value store

Key – value store

Các API được cung cấp cho việc truy vấn dữ liệu của các CSDL NoSQL thường cũng rất đơn giản. Về cơ bản, hầu hết các các CSDL NoSQL sẽ có các API sau:

void Put(string key, byte[] data);

byte[] Get(string key);

void Remove(string key);

Tuy nhiên, việc triển khai thực tế của các CSDL Key-value thường rất phức tạp do cấu trúc lưu trữ quá đơn giản. Ví dụ, để lưu trữ thông tin của một người:

“1234” => “Thanh Huy,[email protected]

“1235” => “Trọng Nghĩa,[email protected],TP. HCM”

“1236” => “Thanh Nghị”

“1237” => “Trường Giang,Bình Thuận”

Với kiểu lưu trữ này, ta sẽ rất dễ dàng và nhanh chóng truy xuất được thông tin của một người thông qua key, nhưng không hề đơn trong việc xử lý những dữ liệu phức tạp. Dễ thấy rằng ý tưởng của các HQT CSDL dạng Key-value là đơn giản hóa việc lưu trữ dữ liệu, nghĩa là không cần quan tâm đến nội dung cần lưu trữ là gì. Nói cách khác, chúng lưu trữ thông tin mà không cần phải xác định lược đồ. Việc để biết được dữ liệu thực tế như thế nào sẽ được định nghĩa (mang tính tham khảo) ở phía client. Điều này làm cho phương pháp lưu trữ dữ liệu với Key-value trở nên đơn giản hơn rất nhiều trong việc xây dựng cũng như khả năng mở rộng là cực kỳ linh động và hiệu suất cho các thao tác truy vấn dữ liệu cũng cực nhanh.

Như vậy, với sự đơn giản của cách lưu trữ dạng Key – value làm cho các CSDL loại này rất phù hợp với các ứng dụng cần truy xuất nhanh và khả năng mở rộng cao, chẳng hạn như là các quản lý các phiên giao dịch (session) hoặc quản lý các thông tin về giỏ hàng vì trong trường hợp này, việc biết được ID của phiên giao dịch hoặc ID của khách hàng là điều rất cần thiết. Hay việc quản lý thông tin của sản phẩm bao gồm những thông tin cơ bản, các sản phẩm liên quan, đánh giá,… sẽ được lưu trữ dưới dạng key là mã sản phẩm chẳng hạn và value là các thông tin còn lại của sản phẩm cần lưu trữ. Điều này, cho phép ta truy xuất được tất cả các thông tin về một sản phẩm chỉ thông qua mã sản phẩm cực kỳ nhanh.

2. Document

CSDL Document được thiết kế để quản lý và lưu trữ dữ liệu ở dạng document. Những document này được mã hóa về các dạng chuẩn như là XML, JSON (Javascript Option Notation) hay BSON (Binary JSON). Khác với các kiểu lưu trữ dạng Key-value, giá trị của cột trong các CSDL document chứa dữ liệu bán cấu trúc (Semi-Structured Data), đặc biệt là cặp thuộc tính name (key) – value. Một cột có thể chứa hàng trăm các thuộc tính như vậy, số lượng, loại thuộc tính được lưu lại có thể khác nhau giữa các dòng. Một điểm khác nữa so với các kiểu lưu trữ dữ liệu dạng Key-value đơn giản là cả key và value đều có thể tìm kiếm trong CSDL Document.

document store

Document store

CSDL Document phù hợp cho việc lưu trữ và quản lý tập dữ liệu có kích thước lớn như là tài liệu văn bản, tin nhắn, cũng như biểu diễn một thực thể CSDL như là Product hay Customer (tài liệu khái niệm trong XML).

Các CSDL tiêu biểu cho CSDL Document: CouchDB (JSON), MongoDB (BSON),… đều là mà nguồn mở (open source), hướng document (ducument oriented) và có lược đồ tự do (shema free).

3. Column Family

Column Family được biết đến rộng rãi nhất qua sự triển khai BigTable của Google. Nhìn bề ngoài, chúng khá giống với CSDL quan hệ nhưng thực tế là hoàn toàn khác. Một số sự khác biệt dễ thấy nhất là việc lưu trữ dữ liệu theo dòng đối với các HQT CSDL quan hệ với việc lưu trư dữ liệu theo cột của các HQT CSDL Conlumn Family. Và các tư tưởng của cả hai loại CSDL này cũng hoàn toàn khác nhau. Chúng ta không thể áp dụng cùng một giải pháp mà chúng ta đã sử dụng trong CSDL quan hệ vào CSDL Conlumn Family. Bởi vì, CSDL Column Family là các CSDL phi quan hệ.

Với các CSDL Column Family, chúng ta cần quan tâm đến các khái niệm sau:

  • Column family (họ cột): Một column family là cách thức dữ liệu được lưu trữ trên đĩa. Tất cả dữ liệu trong một cột sẽ được lưu trên cùng một file. Một column family có thể chứa super column hoặc column.
  • Super column (siêu cột): Một super column có thể được dùng như một dictionary (kiểu từ điển). Nó là một column có thể chứa những column khác (mà không phải là super column).
  • Column (cột): Một column là một bộ gồm tên, giá trị và dấu thời gian (thông thường chỉ quan tâm tới key-value).

Column  và super column trong column family database dùng thay thế nhau, có nghĩa là chúng sẽ là 0 byte nếu chúng không có chứa dữ liệu. Không giống như một bảng, thứ duy nhất chúng ta cần xác định trong column family database tên cột và các tùy chọn chính (không có lược đồ cố định).

column family store

Column Family

CSDL Column Family được thiết kế để chạy trên một số lượng lớn các máy, và lưu trữ một lượng dữ liệu cực lớn. Chúng ta không thể lưu trữ một lượng lớn dữ liệu trong cơ sở dữ liệu quan hệ vì chắc chắn chúng sẽ nhanh chóng bị sụp đổ hoặc là chết rất nhanh về kích thước của dữ liệu và những truy vấn đó được các CSDL Column Family xử lý một cách dễ dàng. Các CSDL Column Family loại bỏ các khái niệm trừu tượng, những thứ làm cho nó cứng nhắt khi chạy trên một cụm máy.

4. Graph Database

Cơ sở dữ liệu đồ thị là một cơ sở dữ liệu dạng đồ thị sử dụng các cấu trúc đồ thị với các nút (nodes), các mối quan hệ (relationships), các thuộc tính (properties) để  mô tả và lưu trữ dữ liệu.

graph database store

Graph Database

Chúng ta có thể thực hiện những truy vấn phức tạp hơn như lọc trên các thuộc tính quan hệ, xem xét trọng số của người đó,… Graph Database thường được sử dụng để giải quyết các vấn đề về mạng. Trong thực tế, hầu hết các trang web mạng xã hội đều sử dụng một số hình thức của graph database để làm những việc mà chúng ta đã biết như: kết bạn, bạn của bạn, …

Một vấn đề đối với việc mở rộng Graph Database là rất khó để tìm thấy một đồ thị con độc lập, có nghĩa là rất khó để ta phân tán Graph Database thành nhiều mảnh. Có rất nhiều nỗ lực nghiên cứu cho việc này nhưng chưa có bất kỳ giải pháp nào đáng tin cậy được đưa ra.

Một số sản phẩm tiêu biểu của graph database là: Neo4J, Sones, AllegroGraph, Core Data, DEX, FlockDB, InfoGrid, OpenLink Virtuoso,…