01/10/2018, 16:36

Bài 01: Giới thiệu về NoSQL

NoSQL, như nhiều bạn đã biết, về cơ bản là một cơ sở dữ liệu (database) được sử dụng để quản lý các tập dữ liệu phi cấu trúc khổng lồ (huge set of unstructured data), trong đó dữ liệu (data) không được lưu trữ trong các mối quan hệ dạng bảng như các cơ sở dữ liệu quan hệ (relational databases). Hầu ...

NoSQL, như nhiều bạn đã biết, về cơ bản là một cơ sở dữ liệu (database) được sử dụng để quản lý các tập dữ liệu phi cấu trúc khổng lồ (huge set of unstructured data), trong đó dữ liệu (data) không được lưu trữ trong các mối quan hệ dạng bảng như các cơ sở dữ liệu quan hệ (relational databases). Hầu hết các relational databases hiện tại đã thất bại trong việc giải quyết một số vấn đề hiện đại phức tạp như:

  1. Tiếp tục thay đổi bản chất dữ liệu – structured (cấu trúc), semi-structured (bán cấu trúc), unstructured (không có cấu trúc) và polymorphic data (đa hình dữ liệu).
  2. Các ứng dụng hiện đang phục vụ cho hàng triệu người dùng ở các vị trí địa lý khác nhau, trong các múi giờ khác nhau và phải luôn luôn hoạt động và luôn duy trì tính toàn vẹn dữ liệu
  3. Các ứng dụng ngày càng trở nên phân tán với nhiều người chuyển sang điện toán đám mây.

NoSQL đóng một vai trò sống còn trong một ứng dụng doanh nghiệp cần truy cập và phân tích một tập dữ liệu khổng lồ đang được đưa ra trên nhiều máy chủ ảo (từ xa) trong cơ sở hạ tầng điện toán đám mây và chủ yếu là khi bộ dữ liệu không được cấu trúc. Do đó, cơ sở dữ liệu NoSQL được thiết kế để vượt qua các giới hạn về Performance (hiệu năng), Scalability (khả năng mở rộng), Data Modeling (mô hình hóa dữ liệu) và Distribution (phân phối) được thấy trong Relational Databases (Cơ sở dữ liệu Quan hệ).

Dữ liệu có cấu trúc là gì?

Dữ liệu có cấu trúc (Structured Data) thường là text files, với column titles (tiêu đề cột) được định nghĩa và dữ liệu trong các hàng. Dữ liệu này có thể dễ dàng được biểu diễn trực quan dưới hình thức biểu đồ (chart) và có thể được xử lý bằng cách sử dụng các công cụ khai thác dữ liệu (data mining tools).

Dữ liệu phi cấu trúc là gì?

Dữ liệu phi cấu trúc(Unstructured data) có thể là bất cứ điều gì như video file, image file (file ảnh), PDF, Emails v.v... Những files này có điểm gì chung, không có gì. Thông tin có cấu trúc có thể được trích ra (extracted) từ unstructured data (dữ liệu phi cấu trúc), nhưng quá trình này tốn nhiều thời gian. Và vì ngày càng có nhiều modern data là unstructed (không có cấu trúc), nên cần phải lưu trữ dữ liệu đó cho các ứng dụng đang phát triển (growing application), do đó tạo ra đường dẫn cho NoSQL.

NoSQL Database Types

Sau đây là các loại cơ sở dữ liệu NoSQL:

  • Document Databases: Trong kiểu này, key được ghép nối với một cấu trúc dữ liệu phức tạp được gọi là Document. Ví dụ: MongoDB
  • Graph stores: Loại cơ sở dữ liệu này thường được sử dụng để lưu trữ network data (dữ liệu mạng). Đây là nơi mà chúng ta có thể liên hệ (relate) dữ liệu dựa trên một số dữ liệu hiện có.
  • ​​​​​​​Key-value stores: Đây là những cơ sở dữ liệu NoSQL đơn giản nhất. Trong này mỗi data được lưu trữ với một key để xác định nó. Trong một số cơ sở dữ liệu Key-value, chúng ta thậm chí có thể tiết kiệm được typr của dữ liệu được lưu lại, giống như trong Redis.
  • ​​​​​​​Wide-column stores: Được sử dụng để lưu trữ các bộ dữ liệu lớn (lưu trữ các cột dữ liệu với nhau). Ví dụ: Cassandra (Được sử dụng trong Facebook), HBase v.v...

Một số Ưu điểm của Cơ sở dữ liệu NoSQL

Ở đây chúng ta sẽ thảo luận về một số lợi ích chính của cơ sở dữ liệu NoSQL với các ví dụ.

Sharding

Trong Sharding, các cơ sở dữ liệu lớn được chia thành các cơ sở dữ liệu nhỏ, nhanh và dễ quản lý.

Cơ sở dữ liệu quan hệ (cổ điển) – Relational Databases theo một kiến trúc theo chiều dọc, trong đó một máy chủ duy nhất giữ dữ liệu, vì tất cả dữ liệu có liên quan. Relational Databases không cung cấp tính năng Sharding theo mặc định, để đạt được điều này rất nhiều nỗ lực phải được đưa vào, bởi vì transaction intergrity – tính toàn vẹn giao dịch (Chèn / Cập nhật dữ liệu trong giao dịch), Nhiều bảng JOINS v.v... không thể dễ dàng đạt được trong kiến trúc phân tán (distributed architecture) trong trường hợp quan hệ Relational Databases.

Cơ sở dữ liệu NoSQL có tính năng Sharding như là mặc định. Không cần thêm nỗ lực. Nó tự động truyền dữ liệu qua các máy chủ, tìm nạp dữ liệu trong thời gian nhanh nhất từ máy chủ miễn phí, đồng thời duy trì tính toàn vẹn (intergrity) của dữ liệu.

​​​​​​​Replication

Auto data replication (Tự động tái tạo dữ liệu) cũng được hỗ trợ trong cơ sở dữ liệu NoSQL theo mặc định. Do đó, nếu một máy chủ DB đi xuống, dữ liệu được phục hồi (restored) bằng cách sử dụng bản sao của nó được tạo ra trên một máy chủ khác trong mạng.

​​​​​​​Integrated Caching

Nhiều cơ sở dữ liệu NoSQL có hỗ trợ tích hợp Caching, nơi mà trong các dữ liệu yêu cầu thường xuyên được lưu trữ trong bộ nhớ cache để làm cho các truy vấn nhanh hơn.

Lược đồ động(Dynamic Schema)

Bạn chắc hẳn sẽ tự hỏi lược đồ động có nghĩa là gì? Trong Relational Databases (cơ sở dữ liệu quan hệ) như Oracle, MySQL chúng ta xác định cấu trúc bảng , phải không? Ví dụ: nếu chúng ta muốn lưu lại bản ghi của Student Data, chúng ta sẽ phải tạo một bảng có tên Student, thêm các cột vào nó, như student_id, student_name v.v..., đây được gọi là  Schema[lược đồ được xác định], trong đó chúng ta định nghĩa cấu trúc trước khi lưu bất kỳ dữ liệu.

Nếu trong tương lai chúng tôi dự định thêm một số related data (dữ liệu có liên quan) trong bảng Student của chúng tôi, thì chúng tôi sẽ phải thêm một cột mới vào bảng của chúng tôi. Thật dễ dàng, nếu chúng ta có ít dữ liệu hơn trong bảng của chúng ta, nhưng nếu chúng ta có hàng triệu bản ghi. Di chuyển sang giản đồ được cập nhật sẽ là một công việc bận rộn. Cơ sở dữ liệu NoSQL giải quyết vấn đề này, như trong cơ sở dữ liệu NoSQL, định nghĩa lược đồ không bắt buộc.

MongoDB - NoSQL Database

MongoDB là một cơ sở dữ liệu NoSQL được viết bằng ngôn ngữ C ++. Một số trình điều khiển của nó sử dụng ngôn ngữ lập trình C làm cơ sở. MongoDB là một cơ sở dữ liệu định hướng tài liệu (document oriented database), nơi nó lưu trữ dữ liệu trong collections thay vì bảng. Phần tốt nhất của MongoDB là các trình điều khiển có sẵn cho hầu hết các ngôn ngữ lập trình phổ biến.

Trong thế giới công nghệ cạnh tranh ngày nay, mọi công ty đã bắt đầu lưu trữ ứng dụng doanh nghiệp của mình qua đám mây (cloud) để mở rộng kinh doanh trên toàn cầu, cung cấp các dịch vụ nhanh hơn và cá nhân hóa trải nghiệm của khách hàng với ứng dụng và kinh doanh tổng thể. Và NoSQL đã trở thành sự lựa chọn đầu tiên trong công nghệ cơ sở dữ liệu để phát triển các ứng dụng như vậy.

0