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

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 độ và Độ 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.