Bài này mục đích Kevin note lại một số giới hạn chính của Amazon DynamoDB mà bạn có thể gặp phải trong quá trình phát triển giải pháp trên AWS Cloud.
Bạn có thể tham khảo tất cả các tham số tại link sau: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
- Maximum tables per Region: 256 (can be increased)
- Maximum item size: 400KBKB (bao gồm cả phần attribute name length UTF-8 và phần attribute values length. Tất cả đo lường là binary length.
Ví dụ về DynamoDB Item Size:
- Giả sử có 01 table có 02 fields name là: shirt-color và shirt-size
- Ứng với 02 fields trên có 01 record có giá trị tương ứng là: “R”, và “M”. Có nghĩa là có một áo với màu R – Red và kích cỡ là M – Medium.
- Như thế item size bao gồm cả phần attribute name ( shirt-color, shirt-size) và phần attribute values (R, M).
- Mỗi ký tự có kích thước 1 byte
- shirt-color: 11 bytes
- shirt-size: 10 bytes
- R: 1 byte
- M: 1 byte
- Như thế tổng item size sẽ là 23 bytes (attribute name + attribute values).
Trên đây là ví dụ một item size với 23 bytes cơ bản. Mỗi một Item Size có kích thước tối đa là 400KB nên khi bạn thiết kế dữ liệu cũng nên chú ý và prototype thực tế dữ liệu tối đa của bạn nhé.
Một lưu ý thêm là mỗi attribute name cũng có một số giới hạn nhất định. Cụ thể là phải tối thiểu 1 ký tự và tối đa 64KB. Đối với secondary index partition key và secondary index sort key thì không quá 255 ký tự (255 bytes).
DynamoDB có giới hạn lưu trữ nào không?
Như các bạn đã biết DynamoDB có giới hạn về Item Size nên khi thiết kế để tối ưu chúng ta nên đặt attribute name ngắn gọn nhất có thể nhưng vẫn mường tượng được ý nghĩa của thuộc tính đó.
Ví dụ: thay vì đặt tên thuộc tính là “customer_name” có thể chỉ cần đặt ngắn gọn là “c_name” hoặc cus_name”. Trong ví dụ thiết kế DynamoDB này bạn tiết kiệm được từ 13 bytes ban đầu còn 06 bytes hoặc 08 bytes. Cứ thế bạn sẽ tiết kiệm được rất nhiều đấy.
Về tổng dung lượng lưu trữ, Amazon DynamoDB có thể mở rộng (scale) tới bất kỳ dung lượng nào theo chiều ngang (horizontal scaling). Đây cũng là tính năng giãn nở xịn trên cloud.
Thông thường scale thì có 02 loại: vertical scaling (scale theo chiều dọc như tăng CPU, RAM hay nâng cao sức mạnh của instance) và horizontal scaling (scale theo chiều ngang ví dụ như tăng về số lượng instance, lưu trữ giúp gia tăng tính ổn định reliable của hạ tầng).
DynamoDB có thể scale hơn 10 Trillion Request per Day, vào giờ cao điểm peak hour có thể xử lý tới 20M requests per second.
Ví dụ: Sự kiện Prime Day của Amazon vào 2017 đã scale DynamoDB 3.34T Requests, vào peak hour scale tới 12.8M request per second. Ngoài ra cũng để chạy chương trình này cần tổ hơn của hơn 24K AWS Accounts với khoảng 1 triệu EC2 Instances. Số liệu này của năm 2017, hiện tại con số thực tế có thể lớn hơn rất nhiều.

Nhìn chung, DynamoDB là một dịch vụ NoSQL rất xịn có tốc độ tính đến mili-second và còn có hỗ trợ cả Global Table để truy xuất và đồng bộ trên nhiều Region. Việc sử dụng DynamoDB được hiệu quả khi bạn biết bạn cần gì và hiểu DynamoDB như thế nào vì ko phải dữ liệu nào cũng có thể thiết kế sử dụng với DynamoDB. Kevin sẽ giới thiệu điều này chi tiết trong một bài khác.
Giới hạn về DynamoDB Accelerator (DAX)
DAX hoạt động như một lớp caching giúp truy xuất dữ liệu một cách nhanh một cách khủng khiếp. Với native DynamoDB (không dùng DAX cache) việc truy xuất vào DynamoDB đã nhanh tính bằng milisecond (1 second = 1000 milisecond). Với sự hỗ trợ của DAX ứng dụng có thể truy xuất tính bằng microsecond (1 milisecond = 1000 microsecond). Điều này khiến cho sức mạnh DynamoDB trở nên khủng khiếp ở các scale lớn có tần suất truy xuất hàng triệu request per second.
Lợi hại là thế nhưng khi sử dụng DAX bạn cũng cần xem xét vùng Region của mình có DAX hay chưa qua liên kết sau https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_dax_region
Kiến trúc của DAX
DAX duy trì một kiến trúc primary và read replica nodes. Một một DAX Cluster sẽ có 1 primary node và có từ 0-9 read replica nodes.
Số lượng Nodes tối đa của mỗi tài khoản AWS / Region: 50.
DynamoDB export to Amazon S3
DynamoDB có thể hỗ trợ export tới 100TB hoặc 300 export tasks đến Amazon S3 phục vụ mục đích sao lưu hoặc phân tích xa hơn. Đây cũng là một tính năng mới hữu ích cho các bạn làm về dữ liệu.
Năng lực đọc và ghi (read & write) vào DynamoDB
DynamoDB hỗ trợ 02 mode khi khởi tạo một Dynamo Table là On-Demand (trả tiền theo request) và Provisioned (Trả tiền theo số lượng cấp phát sử dụng).
01 Read Capacity Unit (RCU) = 1 strong consistency read per second = 2 eventual consistency read per second với Item size tối đa 4KB.
01 Write Capacity Unit (WCU) = 1 write per second, item size tối đa 1KB.
Mặc định khi khởi tạo DynamoDB sử dụng Eventual Consistency với chi phí đọc giảm đi 1 nửa. Giả sử có 10 RCU thì có thể đọc 20 requests per second.
Ví dụ Read khi dùng DynamoDB: Nếu một Item trả về 3KB sẽ tốn 01 RCU. Nếu Item trả về size 7KB sẽ tốn 1 RCU (.
Ví dụ Write khi dùng DynamoDB: Nếu viết 1 item 0.5KB sẽ tốn 01 WCR. Nếu Item nặng 1.5KB sẽ tốn 2 WCU.
Về mặt tính tiền bạn có thể trả theo thực tế sử dụng bao nhiêu WCU hay RCU hoặc provisioned một số lượng WCU và RCU. Về mặt tính giá rổ DynamoDB Kevin sẽ làm một bài riêng cho dễ hiểu.
Về mặt giới hạn một DynamoDB Table có tối đo 40K Read Request Units và 40K Write Request Units. Với tài khoản AWS tối đa 80K Read và 80K Write (Provisioned Only).
Giới hạn về Secondary Indexes
Local Secondary Index: 5
Global Secondary Index: 20
Ngoài ra còn nhiều giới hạn chi tiết khác bạn có thể tham khảo từ link sau đây:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html