Return values on write in DynamoDB - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we write data to DynamoDB and ask it to return values, the time it takes can change depending on what we ask back.
We want to understand how the cost grows when we ask DynamoDB to return different amounts of data after a write.
Analyze the time complexity of the following code snippet.
const params = {
TableName: "Users",
Key: { "UserId": "123" },
UpdateExpression: "set Age = :age",
ExpressionAttributeValues: { ":age": 30 },
ReturnValues: "ALL_NEW"
};
dynamodb.update(params, (err, data) => {
if (err) console.log(err);
else console.log(data.Attributes);
});
This code updates a user's age and asks DynamoDB to return all the new attributes after the update.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: DynamoDB reads the updated item attributes to return them.
- How many times: This happens once per write request.
When you ask DynamoDB to return more attributes after a write, it reads more data to send back.
| Input Size (attributes returned) | Approx. Operations |
|---|---|
| 10 | Reads 10 attributes |
| 100 | Reads 100 attributes |
| 1000 | Reads 1000 attributes |
Pattern observation: The work grows roughly in direct proportion to how many attributes you ask to be returned.
Time Complexity: O(n)
This means the time to return values after a write grows linearly with the number of attributes returned.
[X] Wrong: "Returning values after a write always takes the same time no matter how much data is returned."
[OK] Correct: Returning more attributes means DynamoDB reads and sends more data, so it takes more time.
Understanding how return values affect write time helps you explain trade-offs clearly and shows you know how database operations scale.
"What if we changed ReturnValues from ALL_NEW to NONE? How would the time complexity change?"
Practice
ReturnValues parameter do in a DynamoDB write operation?Solution
Step 1: Understand the role of ReturnValues
The ReturnValues parameter tells DynamoDB what data to send back after a write, such as old or new item attributes.Step 2: Differentiate from other parameters
ReturnValues does not affect capacity, timeout, or table selection; it only controls returned data.Final Answer:
It specifies what data should be returned after the write operation. -> Option AQuick Check:
ReturnValues controls returned data [OK]
- Confusing ReturnValues with capacity settings
- Thinking it sets request timeout
- Assuming it selects the table
ReturnValues?Solution
Step 1: Recall ReturnValues options
ReturnValues can be NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW.Step 2: Identify option for old attributes after update
"ALL_OLD" returns the entire item as it was before the update.Final Answer:
"ALL_OLD" -> Option DQuick Check:
Old attributes = ALL_OLD [OK]
- Using ALL_NEW to get old data
- Confusing UPDATED_NEW with old data
- Setting NONE expecting data back
{
TableName: "Users",
Key: { "UserId": "123" },
UpdateExpression: "SET Age = :newAge",
ExpressionAttributeValues: { ":newAge": 30 },
ReturnValues: "UPDATED_NEW"
}What will the response contain?
Solution
Step 1: Understand ReturnValues "UPDATED_NEW" meaning
This option returns only the attributes that were updated with their new values.Step 2: Apply to given update
The update changes Age to 30, so response includes only Age with value 30.Final Answer:
Only the new Age attribute after the update. -> Option BQuick Check:
UPDATED_NEW returns updated attributes [OK]
- Expecting full item back with UPDATED_NEW
- Confusing UPDATED_NEW with ALL_NEW
- Assuming no data returned with UPDATED_NEW
{
TableName: "Products",
Item: { "Id": "001", "Name": "Pen" },
ReturnValues: "UPDATED_OLD"
}But you get an error. What is wrong?
Solution
Step 1: Check ReturnValues compatibility with PutItem
PutItem supports only NONE or ALL_OLD for ReturnValues; UPDATED_OLD is invalid.Step 2: Confirm other parameters
Item and TableName are correct; error is due to invalid ReturnValues.Final Answer:
"UPDATED_OLD" is invalid for PutItem operations. -> Option CQuick Check:
PutItem supports NONE or ALL_OLD only [OK]
- Using UPDATED_OLD with PutItem
- Assuming ALL_NEW required for PutItem
- Mistaking missing keys as cause
ReturnValues option should you use in your UpdateItem call?Solution
Step 1: Understand the goal
You want the full updated item returned after the update.Step 2: Match ReturnValues option
"ALL_NEW" returns the entire item as it looks after the update.Final Answer:
"ALL_NEW" -> Option AQuick Check:
Full updated item = ALL_NEW [OK]
- Choosing UPDATED_OLD which returns old updated attributes
- Using NONE expecting data back
- Selecting ALL_OLD which returns old full item
