Skip to main content

NoSQL Có Thật Sự Không Có Schema? Giải Thích Đúng Về Schemaless

Khi tìm hiểu về NoSQL, một trong những khái niệm dễ gây nhầm lẫn nhất là "schemaless". Nhiều người cho rằng nếu một cơ sở dữ liệu được gọi là schemaless thì dữ liệu bên trong hoàn toàn không có schema hay cấu trúc cố định nào. Tuy nhiên, đây là một cách hiểu chưa chính xác. Trên thực tế, mọi hệ thống lưu trữ dữ liệu đều cần một cấu trúc nhất định để ứng dụng có thể ghi, đọc và xử lý dữ liệu một cách nhất quán. Bài viết này sẽ giải thích vì sao NoSQL không phải là "không có schema", mà chỉ là "schema linh hoạt hơn" so với các hệ quản trị cơ sở dữ liệu quan hệ truyền thống.

1. Hiểu Lầm Phổ Biến Về Schemaless Trong NoSQL

Nhiều người khi mới tiếp cận NoSQL thường hiểu rằng "schemaless" nghĩa là cơ sở dữ liệu hoàn toàn không có lược đồ (schema). Thực tế đây là một cách hiểu chưa chính xác. "Schemaless" chỉ có nghĩa là lược đồ không bị ép buộc cứng nhắc bởi hệ quản trị cơ sở dữ liệu như trong các hệ quản trị quan hệ truyền thống, chứ dữ liệu vẫn luôn có một cấu trúc nào đó.

2. Ví dụ Với MongoDB

Hãy tưởng tượng một ứng dụng thương mại điện tử lưu thông tin sản phẩm trong cơ sở dữ liệu document như MongoDB. Một sản phẩm có thể được lưu dưới dạng:

Trong khi một sản phẩm khác có thể được lưu như sau:

Nhìn bề ngoài có vẻ như không có schema vì hai document không có cùng tập thuộc tính. Tuy nhiên, ứng dụng vẫn ngầm hiểu rằng mọi sản phẩm đều phải có các trường như name, pricebrand. Nói cách khác, schema vẫn tồn tại nhưng được định nghĩa ở tầng ứng dụng thay vì bị cơ sở dữ liệu bắt buộc thực thi.

3. Ví dụ Với Redis

Một ví dụ khác là cơ sở dữ liệu key-value như Redis. Nếu ứng dụng lưu thông tin người dùng dưới khóa user:1001, giá trị có thể là:


Cơ sở dữ liệu không kiểm tra cấu trúc này, nhưng chương trình đọc dữ liệu vẫn phải biết rằng có trường usernameemail. Nếu một ngày nào đó dữ liệu được lưu thành:


thì ứng dụng có thể bị lỗi vì schema mà ứng dụng mong đợi đã bị thay đổi. Điều này cho thấy schema vẫn tồn tại dù không được cơ sở dữ liệu quản lý trực tiếp.

4. Ví dụ Với Apache Cassandra

Trong các cơ sở dữ liệu dạng wide-column như Apache Cassandra, người dùng vẫn phải định nghĩa bảng, partition key và các cột dữ liệu trước khi sử dụng. Điều đó chứng minh rằng nhiều hệ NoSQL thực chất còn có schema khá rõ ràng, chỉ là mức độ linh hoạt cao hơn so với cơ sở dữ liệu quan hệ.

5. NoSQL ngày nay còn hỗ trợ kiểm tra Schema

Ngày nay, nhiều hệ NoSQL còn hỗ trợ cơ chế kiểm tra schema. Ví dụ, MongoDB cho phép sử dụng JSON Schema để quy định document nào được phép lưu vào collection. Khi đó, cơ sở dữ liệu có thể từ chối những document không tuân thủ cấu trúc đã định nghĩa. Điều này càng cho thấy khái niệm "NoSQL không có schema" là không chính xác.

Vì vậy, cách hiểu đúng là: NoSQL không phải là "không có schema", mà là "schema linh hoạt hơn". Schema vẫn luôn tồn tại ở đâu đó — trong mã nguồn ứng dụng, trong tài liệu thiết kế hệ thống, trong quy ước của nhóm phát triển hoặc thậm chí được khai báo trực tiếp trong cơ sở dữ liệu. Nếu hoàn toàn không có schema, ứng dụng sẽ không biết phải lưu trữ và đọc dữ liệu như thế nào.

6. Kết luận

Khái niệm "schemaless" trong NoSQL thường bị hiểu sai thành "không có schema". Trên thực tế, schema vẫn luôn tồn tại dưới nhiều hình thức khác nhau, có thể nằm trong mã nguồn ứng dụng, trong tài liệu thiết kế hệ thống hoặc được khai báo trực tiếp trong cơ sở dữ liệu. Điểm khác biệt của NoSQL không phải là loại bỏ schema hoàn toàn mà là cho phép schema linh hoạt hơn, giúp hệ thống dễ thích nghi với sự thay đổi của dữ liệu. Hiểu đúng bản chất này sẽ giúp các kỹ sư lựa chọn và sử dụng NoSQL hiệu quả hơn trong quá trình thiết kế hệ thống.

Comments

Popular posts from this blog

Cloud Native là gì? Tư duy thiết kế hệ thống hiện đại cho thời đại đám mây

Cloud Native đang trở thành nền tảng của hầu hết các hệ thống hiện đại từ Netflix, Amazon đến Google. Nhưng Cloud Native thực sự là gì? Liệu việc đưa ứng dụng lên AWS hay Google Cloud đã đủ để gọi là Cloud Native chưa? Trong bài viết này, chúng ta sẽ tìm hiểu nguồn gốc của khái niệm Cloud Native, bài học từ sự cố AWS năm 2015, và những đặc tính quan trọng giúp các hệ thống hiện đại đạt được khả năng mở rộng, chống chịu và triển khai liên tục. 1. Bài học từ sự cố AWS: Lỗi là “Luật”, không phải “Ngoại lệ” Vào năm 2015, Amazon Web Services (AWS) gặp sự cố sập mạng chấn động. Trong khi các “ông lớn” như Airbnb hay Nest đều bị tê liệt, thì Netflix chỉ bị ảnh hưởng rất nhỏ và phục hồi gần như ngay lập tức. AWS phân vùng các dịch vụ mà nó cung cấp thành các vùng (region) và vùng khả dụng (Availability Zone - AZ). Các vùng ánh xạ đến các khu vực địa lý (như Virginia, California, Oregon) và AZ cung cấp thêm dự phòng và cô lập trong một vùng duy nhất. Hình bên dưới hoàn toàn là giả định (nhưng v...

Kiến trúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 3: Continuous Intelligence và AI thời gian thực

Khi hệ thống đã có khả năng thu thập dữ liệu liên tục và phân tích sự kiện theo thời gian thực, câu hỏi tiếp theo là: liệu máy tính có thể tự đưa ra quyết định thay con người hay không? Kiếntrúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 1: Giá trị củaStreaming và Kiến trúc Streaming Ingest Kiếntrúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 2: Real-timeDashboards và Stream Analytics Đó chính là mục tiêu của Continuous Intelligence – giai đoạn cao nhất trong kiến trúc xử lý dữ liệu luồng. Thay vì chỉ hiển thị cảnh báo trên dashboard, hệ thống có thể liên tục huấn luyện mô hình AI, thực hiện suy luận (Inference) ngay khi dữ liệu phát sinh và tự động kích hoạt các hành động phù hợp. Trong bài viết cuối cùng của series Kiến trúc cho xử lý dữ liệu luồng , chúng ta sẽ cùng khám phá cách xây dựng một hệ thống dữ liệu thông minh có khả năng học hỏi, thích nghi và phản ứng gần như theo thời gian thực. 5. Continuous Intelligence (Trí tuệ liên tục) Đây là cấp...

Reinforcement Learning (Học tăng cường) là gì? Hiểu bản chất qua giải thích về cách AI tự học

Nếu học có giám sát giúp AI học từ những đáp án đã biết trước, còn học không giám sát giúp AI tự khám phá cấu trúc của dữ liệu, thì học tăng cường (Reinforcement Learning - RL) lại đi theo một hướng hoàn toàn khác: AI học bằng chính trải nghiệm của mình. Deep Reinforcement Learning là gì? Vì sao AI cần kết hợp Học sâu với Học tăng cường Reinforcement Learning (Học tăng cường) hoạt động như thế nào? Dynamic Programming, Monte Carlo và các ứng dụng thực tế Thay vì được hướng dẫn từng bước, tác nhân (agent) liên tục tương tác với môi trường, thử nhiều hành động khác nhau và nhận phần thưởng hoặc hình phạt. Sau hàng nghìn, thậm chí hàng triệu lần thử nghiệm, AI dần học được chiến lược tối ưu để đạt mục tiêu. Trong bài viết này, chúng ta sẽ cùng tìm hiểu bản chất của học tăng cường, các thành phần quan trọng như Agent, Environment, Reward, Action và Observation, đồng thời minh họa bằng ví dụ trực quan để thấy AI thực sự "học" như thế nào. 1. Học có giám sát (Supervised learni...