DynamoDB – Giải pháp NoSQL serverless hiệu quả

3 min read

  • DynamoDB một NoSQL DB.
  • Tương tự như các NoSQL DB khác, nó không hỗ trợ các truy vấn dạng join, sum hay aggregation.
  • Tuy nhiên, nó hỗ trợ scale theo chiều ngang, giúp tăng hiệu suất khi dữ liệu lớn.
  • Cấu trúc cơ bản gồm các bảng.
  • Mỗi bảng có một primary key được khai báo khi khởi tạo, bao gồm partition keysort key.
  • Bên cạnh đó, mỗi bảng có thể chứa vô số bản ghi.
  • Mỗi bản ghi có thể bao gồm nhiều attributes, và các attributes này có thể được thêm sau hoặc để trống (null).
  • Tuy nhiên, size tối đa của mỗi bản ghi là 400KB.
  • Về kiểu dữ liệu, DynamoDB hỗ trợ: String, Number, Binary, Boolean, List, Map, và các Set.
  • Ngoài ra, DynamoDB hỗ trợ PartiQL, cho phép viết query NoSQL tương tự như SQL.
  • Cuối cùng, DynamoDB cũng có thể được sử dụng để lưu trữ Session Data.

Read/Write Capacity Units

  • WCU – ghi một item tối đa 1KB trong 1 giây
  • RCU
    • Eventually Consistent Read – đọc 2 items tối đa 4KB trong một giây
    • Strongly Consistent Read – đọc 1 item tối đa 4KB trong một giây

Các dạng secondary indexes

Local Secondary IndexGlobal Secondary Index
Phải được khai báo lúc khởi tạoCó thể khai báo sau khi tạo bảng
Sử dụng WRC và RCU chung với bảng chínhĐược cấp phát RCU và WCU ĐỘC LẬP
Có thể có tối đa 5 LSIGiúp tăng tốc query cho các field không phải là key
Dù cho dùng WCU riêng, vẫn có thể làm bảng rơi vào trạng thái throttled nếu phần GSI bị throttled

DynamoDB Accelerator – DAX

  • Đây là một dạng cache dành cho DynamoDB, giúp tăng tốc độ truy xuất dữ liệu.
  • Về hiệu năng, độ trễ chỉ ở mức microseconds, cực kỳ nhanh.
  • Ngoài ra, người dùng có thể thiết lập TTL (Time To Live) cho dữ liệu trong cache, với giá trị mặc định là 5 phút.
  • Về khả năng mở rộng, hệ thống có thể hỗ trợ tối đa 10 nodes trong một cluster.
  • Hơn nữa, nó còn hỗ trợ multi-AZ (nhiều vùng sẵn sàng)mã hóa dữ liệu (encryption) để đảm bảo độ tin cậy và bảo mật.

Dynamo DB Stream

  • Retetion tối đa 24 tiếng
  • Dùng cho:
    • Phản hồi realtime
    • Phân tích dữ liệu

TTL – Time To Live

  • Tự động xoá các items sau một khoảng thời gian
  • Không tốn WCUs
  • TTL attribute cần là dạng số
  • Expired items sẽ bị xoá trong vòng 48 tiếng
  • Dùng cho các trường hợp tự invalidate data sau một khoảng time, ……

Transactions

  • Tốn gấp 2 số lượng WCUs và RCUs so với các actions thông thường

Write Shardings

  • Để tránh việc một partition key trở thành một hot key ⇒ sử dụng hậu tố thêm vào key

Một số lưu ý khác

  • Khi muốn xoá một bảng
    • Cách 1: Scan và xoá tất cả bản ghi ⇒ mất thời gian và tốn tiền
    • Cách 2: Drop luôn table đó đi và tạo lại ⇒ cần lưu lại được cái scheme của bảng
  • Khi muốn copy một bảng
    • Cách 1: Backup bảng hiện tại và restore thành bảng mới
    • Cách 2: Chạy code, scan và push data vào bảng mới
  • KHÔNG hỗ trợ resource-based policies – quản lý access bằng IAM Policies
  • Khi bị throttling, các giải pháp có thể là
    • Áp dụng cơ chế retry exponential backoff
    • Sử dụng partition key một cách hợp lý (có thể dùng thêm hậu tố)
    • Sử dụng DAX, nếu gặp vấn đề về RCU

🔗 Một số tài liệu hữu ích

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *