NoSQL là gì?
Để giới thiệu về NoSQL, trước hết cần nhắc lại khái niệm của SQL.
Sơ lược về SQL và RDBMS
Như ta đã biết, SQL là ngôn ngữ truy vấn (query language) dùng trong mô hình cơ sở dữ liệu quan hệ (RDBMS – Relational Database Management System –). RDBMS là mô hình cơ sở dữ liệu dựa trên các bảng (tables), cột (columns), dòng (rows), và schemas (bản vẽ thiết kế của DB) để quản lý và truy xuất dữ liệu. Do các record trong RDBMS có quan hệ chặt chẽ với nhau, RDBMS được cho là (và được thiết kế sao cho) luôn đảm bảo được 4 tiêu chuẩn quan trọng của ACID:
– Atomicity (Tính nguyên tố): Một giao dịch có nhiều thao tác khác biệt thì hoặc là toàn bộ các thao tác hoặc là không một thao tác nào được hoàn thành. Chẳng hạn việc chuyển tiền có thể thành công hay trục trặc vì nhiều lý do nhưng tính nguyên tố bảo đảm rằng một tài khoản sẽ không bị trừ tiền nếu như tài khoản kia chưa được cộng số tiền tương ứng.
– Consistency (Tính nhất quán): Một giao dịch hoặc là sẽ tạo ra một trạng thái mới và hợp lệ cho dữ liệu, hoặc trong trường hợp có lỗi sẽ chuyển toàn bộ dữ liệu về trạng thái trước khi thực thi giao dịch.
– Isolation (Tính độc lập): Một giao dịch đang thực thi và chưa được xác nhận phải bảo đảm tách biệt khỏi các giao dịch khác.
– Durability (Tính bền vững): Dữ liệu được xác nhận sẽ được hệ thống lưu lại sao cho ngay cả trong trường hợp hỏng hóc hoặc có lỗi hệ thống, dữ liệu vẫn đảm bảo trong trạng thái chuẩn xác.
Khái niệm NoSQL
Nếu như nói điểm mạnh của RDBMS là các dữ liệu “quan hệ” chặt chẽ với nhau, thì điểm yếu của nó cũng là ở đó. RDBMS gặp vấn đề ở các hệ thống nơi mà dữ liệu có khả năng mở rộng liên tục và ta không thể kiểm soát được số dữ liệu, cũng như không cách nào tối ưu được mô hình các table, column và quan hệ giữa chúng trong giai đoạn đầu. Ngoài ra, do tính chất ACID nên RDBMS cũng dần lộ rõ điểm yếu trong các hệ thống nơi mà tốc độ được ưu tiên hàng đầu, bởi chỉ một truy xuất đơn giản cũng cần phải JOIN nhiều table với nhau mới có thể thực hiện được.
Nói tóm lại, hiện nay tồn tại một số hệ thống/application đặc thù mà RDBMS không thể thỏa mãn được các yêu cầu về performance, độ linh hoạt (flexibility), và khả năng mở rộng (scalability). Để đáp ứng những nhu cầu trên, NoSQL đã ra đời.
Trái với RDBMS, thì cơ sở dữ liệu NoSQL không bị ràng buộc bởi một kiến trúc nhất định nào, chính vì thế database của nó linh hoạt hơn rất nhiều nhiều. Nhờ tính chất không có kiến trúc (unstructured), NoSQL giúp cho quá trình truy xuất dữ liệu nhanh hơn rất nhiều so với RDBMS.
Các loại dữ liệu không có kiến trúc thường thấy có thể kể đến là: user và session, chat, messaging, log data, time series data (dùng trong IoT), và những object lớn như là videos hay images.
Các loại NoSQL – Giới thiệu về key-value store
Để phục vụ các loại yêu cầu và usecases khác nhau, một vài mô hình NoSQL khác nhau đã ra đời như: key-value store, Document Stores, Wide-column Stores, và Graph Stores. Bài viết này chỉ giới thiệu loại NoSQL phổ biến nhất là key-value store.
key-value store phổ biến nhất trong các loại hình NoSQL. key-value store có lợi thế mạnh ở tính đơn giản và vô cùng hữu dụng để tăng tốc truy xuất dữ liệu, giúp cải thiện performance đáng kể. Các dữ liệu được lưu ở key-value store có thể ở bất kỳ định dạng nào (text, video, JSON…), và mỗi dữ liệu (value) được truy xuất bởi một khóa (key).
Một số ví dụ đơn giản về key-value Store
Key có thể là mọi loại chuỗi ký tự (được đặt sao cho developer dễ dàng thao tác với DB nhất), và value có thể là mọi loại data: từ Int, String cho đến JSON, và thậm chí là toàn bộ HTML của một trang web.
Dưới đây là một số ví dụ đơn giản nhất để ta có cái nhìn cơ bản về key và value.
Phone Directory
Key | Value |
Bob | 123-456-7890 |
John | 111-222-3333 |
Tang | 444-555-6677 |
Artist Info
Key | Value |
artist:1:name | One Ok Rock |
artist:1:genre | Hard Rock |
artist:2:name | Another Name |
artist:2:start-year | 1980 |
Với DB Artist Info trên, dễ thấy ta sẽ hạn chế được nhiều giá trị NULL đối với những trường không có thông tin. Đối với RDBMS, giả sử table Artist Info có 1000 records, mà chỉ có 1 record có start-year, ta vẫn tốn rất nhiều bộ nhớ để lưu trữ “NULL” cho 999 records còn lại. Ở Key-value store, việc “không có dữ liệu” được thể hiện rất đơn giản bằng việc “không có key”.
Stock Trading
Key | Value |
123456789 | APPL, Buy, 100, 84.47 |
234567890 | CERN, Sell, 50, 52.78 |
Ở ví dụ này, mỗi Key là một list gồm các giá trị như stock ticket, phân loại Buy hay Sell, số stocks và giá tiền.
Trên đây là những khái niệm cơ bản nhất về RDBMS, NoSQL, và loại hình phổ biến nhất của NoSQL là key-value store. Để thấy rõ hơn về tính linh hoạt của NoSQL, mời các bạn đón đọc bài tiếp theo: Ví dụ cụ thể cho thấy điểm yếu của RDBMS và điểm mạnh của NoSQL.
Tài liệu tham khảo:
– Wikipedia
– basho
– DATABASE.GUIDE