Calculate RCUs for a read workload including burst headroom and autoscaling target, and price provisioned against on-demand.
A read is billed in whole 4 KB blocks, so a 3.5 KB item and a 4 KB item cost the same while a 4.1 KB item costs twice as much. Provisioning must exceed the peak rather than the average, and because autoscaling chases a target utilisation the provisioned figure is the peak divided by that target — at 70% you reserve about 43% more capacity than the peak actually consumes. Both prices are editable inputs with realistic us-east-1 defaults — confirm the current DynamoDB rates with AWS for your region. Under-provisioned reads surface as throttling and retry storms in the client rather than as a slow query, so sizing on peak and a utilisation target is what keeps p99 latency flat.
DynamoDB Read Capacity
units per read = ceil(item KB ÷ 4) × consistency factor; RCUs to provision = ceil(peak reads/s × units per read ÷ autoscaling target).
units per read = ceil(item KB ÷ 4) × consistency factor; RCUs to provision = ceil(peak reads/s × units per read ÷ autoscaling target). A read is billed in whole 4 KB blocks, so a 3.5 KB item and a 4 KB item cost the same while a 4.1 KB item costs twice as much. Provisioning must exceed the peak rather than the average, and because autoscaling chases a target utilisation the provisioned figure is the peak divided by that target — at 70% you reserve about 43% more capacity than the peak actually consumes. Both prices are editable inputs with realistic us-east-1 defaults — confirm the current DynamoDB rates with AWS for your region.
Under-provisioned reads surface as throttling and retry storms in the client rather than as a slow query, so sizing on peak and a utilisation target is what keeps p99 latency flat.
This calculator takes 8 inputs: Average read operations, Average item size, Read consistency, Peak to average ratio, Autoscaling target utilisation, Provisioned read capacity price, Billed hours per month, On-demand read price. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.
Wherever the application tolerates a few hundred milliseconds of staleness, yes — they cost half as much and are the default for Query and Scan. Use strongly consistent reads only for read-after-write paths, and remember they cannot be served from a global secondary index.