Consistent vs eventually consistent reads in DynamoDB - Performance Comparison
Start learning this pattern below
Jump into concepts and practice - no test required
When reading data from DynamoDB, the way consistency is handled affects how long the read takes.
We want to understand how the time to get data changes depending on the read type.
Analyze the time complexity of these two read types in DynamoDB.
// Eventually consistent read
const params = {
TableName: "MyTable",
Key: { id: "123" },
ConsistentRead: false
};
const data = await dynamodb.get(params).promise();
// Strongly consistent read
const paramsStrong = {
TableName: "MyTable",
Key: { id: "123" },
ConsistentRead: true
};
const dataStrong = await dynamodb.get(paramsStrong).promise();
This code fetches an item by key, once with eventual consistency and once with strong consistency.
Look at what happens behind the scenes when reading data.
- Primary operation: Single key lookup in the database.
- How many times: Exactly once per read request.
Since each read fetches one item by key, the time depends mostly on network and consistency checks, not on data size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 single lookup |
| 100 | 1 single lookup |
| 1000 | 1 single lookup |
Pattern observation: The number of operations is constant (1 lookup per read), regardless of input size, confirming O(1).
Time Complexity: O(1)
This means each read operation takes about the same time no matter the data size.
[X] Wrong: "Strongly consistent reads always take much longer because they scan the whole table."
[OK] Correct: Both read types fetch by key, so they do not scan the table; strong consistency adds a small check but does not scan all data.
Understanding how read consistency affects response time helps you explain trade-offs clearly and shows you know how databases handle data freshness and speed.
"What if we changed from single item reads to scanning the whole table? How would the time complexity change?"
Practice
consistent reads and eventually consistent reads in DynamoDB?Solution
Step 1: Understand consistent reads
Consistent reads always return the most up-to-date data from DynamoDB.Step 2: Understand eventually consistent reads
Eventually consistent reads may return data that is slightly out of date but are faster and cheaper.Final Answer:
Consistent reads always return the latest data, eventually consistent reads may return older data. -> Option CQuick Check:
Consistent = latest data, Eventually consistent = possibly older data [OK]
- Thinking eventually consistent reads are always faster but not cheaper
- Confusing which read type returns the latest data
- Assuming both read types always return the same data
GetItem request using AWS SDK?Solution
Step 1: Recall DynamoDB GetItem syntax
The parameter to request a consistent read is exactly "ConsistentRead" set to true or false.Step 2: Identify correct syntax
Only "ConsistentRead": true is valid; other options are incorrect parameter names or values.Final Answer:
"ConsistentRead": true -> Option AQuick Check:
Use "ConsistentRead": true for consistent reads [OK]
- Using incorrect parameter names like "Consistent" or "ReadConsistency"
- Setting ConsistentRead to false to get consistent reads
- Confusing boolean values with strings
const params = {
TableName: "Users",
Key: { "UserId": "123" },
ConsistentRead: false
};
const data = await dynamoDb.get(params).promise();
console.log(data.Item.lastLogin);
What can you say about the freshness of the lastLogin value printed?Solution
Step 1: Check ConsistentRead parameter
ConsistentRead is set to false, meaning the read is eventually consistent.Step 2: Understand impact on data freshness
Eventually consistent reads may return stale data, so lastLogin might be older than the latest update.Final Answer:
It may be an older lastLogin value due to eventual consistency. -> Option DQuick Check:
ConsistentRead false = possibly stale data [OK]
- Assuming ConsistentRead false always returns latest data
- Thinking ConsistentRead false causes errors
- Believing data will be null if not consistent
const params = {
TableName: "Orders",
Key: { "OrderId": "789" },
ConsistentRead: "true"
};
const result = await dynamoDb.get(params).promise();
What is the problem in this code?Solution
Step 1: Check ConsistentRead data type
ConsistentRead must be a boolean (true/false), not a string "true".Step 2: Understand impact of wrong type
Passing a string may cause DynamoDB to ignore the parameter, resulting in eventually consistent reads and stale data.Final Answer:
ConsistentRead should be a boolean, not a string. -> Option BQuick Check:
ConsistentRead must be boolean true/false [OK]
- Passing ConsistentRead as string instead of boolean
- Changing Key attribute name unnecessarily
- Thinking TableName case matters for consistency
Solution
Step 1: Understand trade-offs
Consistent reads ensure latest data but cost more and have higher latency; eventually consistent reads are cheaper and faster but may be stale.Step 2: Apply strategy for user experience
Use consistent reads right after updates to show fresh data, then eventually consistent reads for normal fetches to save cost and improve speed.Final Answer:
Use consistent reads only for profile fetches immediately after updates, eventually consistent otherwise. -> Option AQuick Check:
Consistent reads after update, eventually consistent otherwise [OK]
- Using consistent reads everywhere causing high cost and latency
- Using eventually consistent reads immediately after updates causing stale data
- Ignoring cost and latency trade-offs
