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, price và brand. 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à:
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
Post a Comment