Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL

NoSQL là gì và có phải xu hướng lớn tiếp theo trong cơ sở dữ liệu?


NoSQL là gì?

Theo định nghĩa chính thức của Wiki: "Một cơ sở dữ liệu NoSQL (ban đầu chỉ 'non SQL' hoặc 'non relational') cung cấp cơ chế lưu trữ và truy xuất dữ liệu được mô hình hóa bằng các phương thức khác ngoài các quan hệ bảng dùng trong cơ sở dữ liệu quan hệ (RDBMS). Nó bao gồm nhiều công nghệ cơ sở dữ liệu khác nhau được phát triển để đáp ứng sự gia tăng về lượng dữ liệu lưu trữ về người dùng, đối tượng, sản phẩm, tần suất truy cập dữ liệu, và nhu cầu hiệu suất/xử lý. Nói chung, cơ sở dữ liệu NoSQL được cấu trúc theo cặp khóa-giá trị (key-value), cơ sở dữ liệu đồ thị (graph database), hướng tài liệu (document-oriented) hoặc hướng cột (column-oriented)."

Trong nhiều thập kỷ phát triển phần mềm, chúng ta dùng cơ sở dữ liệu dưới dạng SQL (Structured Query Language) lưu trữ dữ liệu trong bảng quan hệ. Tuy nhiên, gần đây với sự trỗi dậy khủng khiếp của internet và ứng dụng Web 2.0, cơ sở dữ liệu đã phát triển thành hàng nghìn terabyte. Các ứng dụng như Facebook, Google, Amazon, WhatsApp, v.v. đã mở ra kỷ nguyên hoàn toàn mới của quản trị cơ sở dữ liệu theo phương pháp thiết kế đơn giản, tốc độ và mở rộng nhanh hơn cơ sở dữ liệu truyền thống. Các cơ sở dữ liệu này dùng cho big data, ứng dụng thời gian thực lớn và phân tích.

Ví dụ, giả sử bạn có ứng dụng blog lưu trữ blog của người dùng. Giả sử bạn cần thêm tính năng mới như người dùng thích bài đăng, bình luận, hoặc thích bình luận. Với triển khai RDBMS điển hình, điều này cần tái thiết kế hoàn toàn cơ sở dữ liệu hiện có. Tuy nhiên, nếu dùng NoSQL, bạn có thể dễ dàng sửa đổi cấu trúc dữ liệu để phù hợp yêu cầu linh hoạt (agile). Với NoSQL, bạn có thể trực tiếp chèn dữ liệu mới vào cấu trúc hiện có mà không cần tạo cột hoặc cấu trúc định nghĩa trước.

Thách thức của RDBMS

  • RDBMS giả định cấu trúc dữ liệu được định nghĩa rõ ràng và dữ liệu phần lớn đồng nhất.
  • Cần schema ứng dụng và thuộc tính (cột, kiểu, v.v.) được định nghĩa trước khi xây dựng ứng dụng. Điều này không phù hợp với phương pháp phát triển agile cho ứng dụng động cao.
  • Khi dữ liệu bắt đầu lớn, bạn phải mở rộng cơ sở dữ liệu theo chiều dọc (vertical scaling), tức là thêm dung lượng cho máy chủ hiện có.

Lợi ích của NoSQL so với RDBMS

Không schema (Schema Less)

Cơ sở dữ liệu NoSQL không schema không định nghĩa cấu trúc dữ liệu chặt chẽ nào.

Động và Agile (Dynamic and Agile)

Cơ sở dữ liệu NoSQL có xu hướng tăng động theo yêu cầu thay đổi. Nó xử lý được dữ liệu có cấu trúc, bán cấu trúc và phi cấu trúc.

Mở rộng theo chiều ngang (Scales Horizontally)

Khác với SQL database mở rộng theo chiều dọc, NoSQL mở rộng theo chiều ngang bằng cách thêm máy chủ và dùng khái niệm sharding và replication. Hành vi này phù hợp với dịch vụ đám mây như AWS cho phép mở rộng máy chủ ảo theo chiều ngang theo nhu cầu.

Hiệu suất tốt hơn (Better Performance)

Tất cả cơ sở dữ liệu NoSQL đều tuyên bố cung cấp hiệu suất tốt và nhanh hơn so với triển khai RDBMS truyền thống.

Về hạn chế, vì NoSQL là toàn bộ tập hợp các cơ sở dữ liệu (không phải một cơ sở dữ liệu đơn lẻ), hạn chế khác nhau tùy cơ sở dữ liệu. Một số không hỗ trợ giao dịch ACID, một số có thể thiếu độ tin cậy. Nhưng mỗi cái đều có điểm mạnh riêng khiến chúng phù hợp cho yêu cầu cụ thể.

Các loại cơ sở dữ liệu NoSQL

Cơ sở dữ liệu hướng tài liệu (Document Oriented Databases)

Cơ sở dữ liệu hướng tài liệu xử lý một tài liệu như một toàn thể và tránh tách tài liệu thành các cặp tên/giá trị cấu thành. Ở cấp độ collection, điều này cho phép gom nhiều tài liệu đa dạng vào một collection duy nhất. Cơ sở dữ liệu tài liệu cho phép lập chỉ mục tài liệu không chỉ dựa trên định danh chính mà cả thuộc tính của nó. Các cơ sở dữ liệu tài liệu mã nguồn mở khác nhau hiện có, nhưng nổi bật nhất là MongoDB và CouchDB. Thực tế, MongoDB đã trở thành một trong những cơ sở dữ liệu NoSQL phổ biến nhất.

Cơ sở dữ liệu dựa trên đồ thị (Graph Based Databases)

Cơ sở dữ liệu đồ thị dùng cấu trúc đồ thị với nút, cạnh, thuộc tính để biểu diễn và lưu trữ dữ liệu. Theo định nghĩa, cơ sở dữ liệu đồ thị là bất kỳ hệ thống lưu trữ nào cung cấp sự lân cận miễn chỉ mục (index-free adjacency). Nghĩa là mọi phần tử chứa con trỏ trực tiếp đến phần tử lân cận và không cần tra cứu chỉ mục. Cơ sở dữ liệu đồ thị chung có thể lưu trữ bất kỳ đồ thị nào khác biệt với cơ sở dữ liệu đồ thị chuyên dụng như triple-stores và network databases. Chỉ mục dùng cho duyệt đồ thị.

Cơ sở dữ liệu dựa trên cột (Column Based Databases)

Lưu trữ hướng cột cho phép dữ liệu được lưu trữ hiệu quả. Tránh tiêu tốn không gian khi lưu NULL bằng cách đơn giản không lưu cột khi giá trị không tồn tại cho cột đó. Mỗi đơn vị dữ liệu có thể coi như tập các cặp khóa/giá trị, nơi đơn vị đó được xác định bằng định danh chính, thường gọi là khóa chính. Bigtable và các bản sao thường gọi khóa chính này là row-key.

Cơ sở dữ liệu khóa-giá trị (Key Value Databases)

Khóa của cặp khóa/giá trị là giá trị duy nhất trong tập và có thể tra cứu dễ dàng để truy cập dữ liệu. Các cặp khóa/giá trị có loại đa dạng: một số giữ dữ liệu trong bộ nhớ, một số cung cấp khả năng lưu trữ bền vững ra đĩa. Một kho khóa/giá trị đơn giản nhưng mạnh mẽ là Berkeley DB của Oracle.

Các cơ sở dữ liệu NoSQL phổ biến

Tóm tắt một số cơ sở dữ liệu NoSQL phổ biến rơi vào các loại trên:

  • Hướng tài liệu - MongoDB, HBase, Cassandra, Amazon SimpleDB, Hypertable, v.v.
  • Dựa trên đồ thị - Neo4j, OrientDB, Facebook Open Graph, FlockDB, v.v.
  • Dựa trên cột - CouchDB, OrientDB, v.v.
  • Khóa-giá trị - Membase, Redis, MemcacheDB, v.v.

NoSQL là gì và có phải xu hướng lớn tiếp theo trong cơ sở dữ liệu?

Cơ sở dữ liệu NoSQL. Nguồn ảnh: getfilecloud.com

Kết luận

Trong bài này, chúng ta học về công nghệ cơ sở dữ liệu NoSQL và cách nó khác biệt chính với RDBMS. Sau đó khám phá các loại NoSQL, ứng dụng và một số cơ sở dữ liệu phổ biến nhất của từng loại.

Nhiều tổ chức hiện nay đang chuyển đổi sang các cơ sở dữ liệu này cho tập dữ liệu khổng lồ và ứng dụng quy mô lớn. Điều này cho thấy NoSQL chắc chắn sẽ là điều lớn tiếp theo trong công nghệ web và cơ sở dữ liệu, có tiềm năng phá vỡ di sản lâu năm của RDBMS.