Điểm mạnh NoSQL – có đáng để thay đổi?

Tài Lê

Active member
Thời gian gần đây NoSQL nổi lên như là một loại hình cơ sở dữ liệu mới. Hỗ trợ đầy đủ, hiệu năng không thua kém cấu trúc SQL truyền thống.

Tuy nhiên, điểm mạnh NoSQL thực sự nằm ở đâu, điều gì làm NoSQL trở thành lựa chọn tuyệt vời trong một số trường hợp?

Bài viết dưới đây cung cấp cho anh em cái nhìn tổng quan về NoSQL, trường hợp nào nên sử dụng, khi nào không. Nắm rõ để sau này được giao nhiệm vụ chọn technology đỡ bỡ ngỡ như cô Tấm lên Sài Gòn nha.

1. NoSQL là gì?
Xin được trích nguyên văn từ bài viết định nghĩa NoSQL từ Amazon. Mục đích chỉ để nhắc lại định nghĩa kẻo quên.

Cơ sở dữ liệu NoSQL là Cơ sở dữ liệu được xây dựng dành riêng cho mô hình dữ liệu và có sơ đồ linh hoạt để xây dựng các ứng dụng hiện đại. Cơ sở dữ liệu NoSQL được công nhận rộng rãi vì tính dễ phát triển, chức năng cũng như hiệu năng ở quy mô lớn.
Cần lưu ý rằng NoSQL tỏ ra vượt trội hơn về khả năng dễ phát triển và tính linh hoạt.
Bài viết này sẽ tập trung phân tích về hai điểm mạnh NoSQL là khả năng phát triển và tính linh hoạt.

Đã tìm hiểu về SQL và NoSQL, nốt công tìm hiểu thêm về Database Indexes. Index từ đâu cũng đã là một vấn đề bắt buộc mọi Kỹ sư phần mềm (Software Engineer) phải biết.

Tuy nhiên, từ sử dụng cho tới việc nắm chắc về Database Indexes lại là chuyển khác. Chính vì vậy, anh em có thể tham khảo thêm: Database indexes : advantages and disadvantages.

2. NoSQL tốt trong trường hợp nào?
2.1 Khi cấu trúc dữ liệu chưa hoàn chỉnh
Thực tế, thời gian cho vòng đời một phần mềm (Software) đang ngày càng rút ngắn. Không thể cứng nhắc là phải có Database Structure rõ ràng mới bắt đầu phát triển phần mềm. Tùy vào đặc thù của từng dự án để linh động trong giải quyết vấn đề.

Hiện tại, nếu table A được định nghĩa 4 column (4 field). Nhưng trong quá trình phát triển, nếu ta cần thêm 2 field nữa, sự khác biệt sẽ nhận thấy rõ ngay giữa SQL NoSQL

  • Nếu sử dụng SQL (Structure), có cấu trúc. Tất nhiên sẽ phải ALTER table đó, hoặc là tầm nhìn xa hơn sẽ dùng column store Json. Thay đổi Json Store. Việc này tuy có thể đáp ứng nhưng khá phức tạp.
  • Nếu sử dụng NoSQL, do không quá ràng buộc về mặt cấu trúc, ta vẫn có thể thoải mái store node đó với 4 field, trong khi những node trước đó là 2 field.
NoSQL là lựa chọn lý tưởng cho dữ liệu không được tổ chức thành cấu trúc hoặc có cấu trúc chưa hoàn chỉnh
Rõ ràng, khi ứng dụng chưa thực sự rõ ràng về cấu trúc dữ liệu (có thể do requirement từ khác hàng, các feature hoặc bug chưa tìm thấy). NoSQL là lựa chọn tốt hơn so với SQL truyền thống
Rõ ràng mà nói điểm mạnh NoSQL là tốt cho các ứng dụng có cấu trúc CSDL chưa hoàn chỉnh, đang hoặc sẽ được điều chỉnh trong quá trình sử dụng.

2.2 Khả năng phát triển nhanh chóng
Với cơ sở dữ liệu quan hệ SQL (Structure Query Language), thay vì phải định nghĩa rõ ràng các ràng buộc (relationship) giữa các table, các primary key, NoSQL đơn giản hơn nhiều.

NoSQL cũng có index, nhưng các platform hiện nay cung cấp NoSQL đều hỗ trợ tự động việc đánh index. Mấy ông Dev có thể nhanh chóng tạo ra một CSDL, thực hiện CRUD chỉ bằng cách gọi một function.

Không thể chối bỏ, điểm mạnh NoSQL là khả năng tăng tốc. Giúp phát triển ứng dụng càng ngày càng nhanh chóng và hiệu quả. Xu thế tất yêu là các ứng dụng yêu cầu thời gian phát triển nhanh sẽ chuyển qua sử dụng NoSQL

3. Một số loại CSDL NoSQL
3.1 Key-Value (K-V) Stores
Key-value là loại cấu trúc thường được sử dụng nhất trong các Hệ CSDL NoSQL.

This model is also the fastest way to get data by known key, but without the flexibility of more advanced querying.
Model này là cách nhanh chóng để lấy dữ liệu bằng cách cung cấp key. Tránh được việc phải viết thêm nhiều query để collect data
Hình dưới đây là Key-value được lưu trữ trong collection ở Firebase. Với một key (được Firebase định danh duy nhất), ta có thể lấy ra tất cả field được store với key này.

Điểm mạnh NoSQL chính là ở chỗ này, một key có thể lấy ra nhiều value, số lượng item trong value cũng flexible, có thể tùy biến được.

It may be used for data sharing between application instances like distributed cache or to store user session data.
Ngoài, sử dụng Key-value còn hữu ích nếu muốn chia sẻ giữa các application trong hệ thống distributed cache hoặc lưu giữa user session data.
3.2 Document Stores
Ngoại trừ Key-value sử dụng phổ biến, NoSQL cũng hỗ trợ Document Stores. Loại này:

Document store is a data model for storing semi-structured document object data and metadata. The JSON format is normally used to represent such objects.
Document store là loại lưu trữ bán cấu trúc, gồm các đối tượng dữ liệu và siêu dữ liệu. Thông thường kiểu JSON được sử dụng để lưu trữ kiểu này
Thay vì tạo các column lưu trữ VARCHAR, CHAR rồi store JSON. Một số platform hỗ trợ lưu trữ các object JSON, dễ dàng để store và collect hơn. Đây là điểm mạnh NoSQL có được, vượt lên so với các hệ cơ sở dữ liệu SQL truyền thống.

3.3 Column-Oriented Stores
Lưu trữ hướng về cột (Column Oriented Stores) gần giống như relations ship giữa các primary key bên phía SQL.

It is similar to a relational database index, however a column family may be an arbitrary collection of columns.
Gần giống như quan hệ giữa database index, tuy nhiên một họ cột có thể là một tập hợp các cột tùy ý.
Ngoài ra:

This particular approach is used for very large scalable databases to greatly reduce time for searching data. It is rarely used outside of enterprise level applications.
Cách tiếp cận cụ thể này được sử dụng cho các cơ sở dữ liệu có khả năng mở rộng. Giúp giảm đáng kể thời gian tìm kiếm dữ liệu. Loại này thường được sử dụng cho các application ở cấp doanh nghiệp.
4. Có đáng để thử?
Quy trình phát triển phần mềm hiện nay càng ngày càng nhanh chóng. Với các yêu cầu có tính chất đặc thù (yêu cầu nhanh, realtime, cấu trúc thay đổi,…) ta nên cân nhắc sử dụng SQL.
 
Bên trên