メインコンテンツまでスキップ

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 ở Hanoi vào Partition 1.
    • Tất cả user ở HCM vào Partition 2.
  • Vấn đề (Hot Partition): Nếu Hanoi có 1 triệu user mà DaNang chỉ 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 độĐộ chính xác.

  1. 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.
  2. Bounded Staleness: Chấp nhận chậm trễ một chút (VD: 5 giây hoặc 100 phiên bản).
  3. 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.
  4. 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).
  5. 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.