Azure Cosmos DB: Hướng dẫn Toàn diện
1. Giới thiệu
NoSQL là gì?
SQL (Relational) lưu dữ liệu dạng bảng (Table) với cột dòng cố định. NoSQL (Non-relational) lưu dữ liệu linh hoạt (JSON, Key-Value, Graph). Không cần định nghĩa schema trước. Dễ dàng mở rộng (Scale).
Azure Cosmos DB là gì?
Là cơ sở dữ liệu NoSQL cao cấp nhất của Microsoft.
- Global Distribution: Bấm 1 nút, dữ liệu được copy sang toàn bộ các Region trên thế giới. User ở đâu đọc dữ liệu ở đó -> Cực nhanh.
- Multi-model: Hỗ trợ nhiều loại API (SQL, MongoDB, Cassandra, Gremlin).
2. Request Units (RU/s) - Tiền tệ của Cosmos
Cosmos DB không tính tiền theo CPU/RAM. Nó tính theo Request Units (RU).
- 1 RU = Chi phí để đọc 1 file 1KB.
- Ghi tốn nhiều RU hơn Đọc.
- Provisioned Throughput: Bạn mua trước năng lực xử lý (VD: 400 RU/s). Nếu dùng quá -> Bị chặn (Rate limited 429).
- Serverless: Trả tiền theo số RU thực tế sử dụng. Tốt cho traffic không ổn định.
3. Partitioning (Phân vùng) - Quan trọng nhất
Để chứa vô hạn dữ liệu, Cosmos DB chia nhỏ dữ liệu ra các Partition vật lý. Bạn phải chọn một Partition Key (PK) để chỉ định cách chia.
Ví dụ: Ứng dụng Thương mại điện tử.
- Chọn PK là
City.- Tất cả user ở
Hanoivào Partition 1. - Tất cả user ở
HCMvào Partition 2.
- Tất cả user ở
- Vấn đề (Hot Partition): Nếu
Hanoicó 1 triệu user màDaNangchỉ có 1 ngàn user -> Partition 1 bị quá tải, Partition 2 rảnh rỗi. Đây là thiết kế sai. - Thiết kế đúng: Chọn PK là
UserId. Dữ liệu được chia đều cho hàng triệu user.
4. Các mức nhất quán (Consistency Levels)
Đánh đổi giữa Tốc độ và Độ chính xác.
- Strong: Giống SQL truyền thống. Ghi xong là tất cả mọi nơi đều thấy ngay. Chậm nhất, đắt nhất.
- Bounded Staleness: Chấp nhận chậm trễ một chút (VD: 5 giây hoặc 100 phiên bản).
- Session (Mặc định): "Mình ghi thì mình thấy ngay". User A ghi, User A thấy ngay. User B có thể thấy chậm một chút. Tốt nhất cho Web/Mobile App.
- Consistent Prefix: Đảm bảo thứ tự. Ghi A rồi B, thì sẽ thấy A rồi B (không bao giờ thấy B trước A).
- Eventual: Nhanh nhất, rẻ nhất. Không đảm bảo gì cả. Có thể lúc này thấy, lúc khác chưa thấy. Dùng cho đếm Like, View.
5. Các API hỗ trợ
Bạn không cần học ngôn ngữ mới. Cosmos DB giả lập các DB phổ biến:
- NoSQL API (Core): Dùng cú pháp SQL (
SELECT * FROM c) để query JSON. Khuyên dùng cho app mới. - MongoDB API: Mang code MongoDB có sẵn chạy thẳng lên Cosmos DB.
- Cassandra API: Cho Column-family data.
- Gremlin API: Cho Graph data (Mạng xã hội).
- Table API: Key-Value đơn giản.