Table creation with AWS SDK in DynamoDB - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When creating a table using the AWS SDK for DynamoDB, it's important to understand how the time taken grows as we add more details to the table.
We want to know how the number of steps or calls changes when we create tables with different sizes or settings.
Analyze the time complexity of the following operation sequence.
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
const params = {
TableName: "MyTable",
KeySchema: [
{ AttributeName: "Id", KeyType: "HASH" }
],
AttributeDefinitions: [
{ AttributeName: "Id", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
}
};
await dynamodb.createTable(params).promise();
This code creates a DynamoDB table with a simple key schema and provisioned throughput settings.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: One API call to
createTableto request table creation. - How many times: Exactly once per table creation request.
Creating a table involves a single API call regardless of table size or settings.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 1 table with 1 attribute | 1 |
| 1 table with 10 attributes | 1 |
| 1 table with 100 attributes | 1 |
Pattern observation: The number of API calls stays the same no matter how many attributes or settings the table has.
Time Complexity: O(1)
This means creating a table takes a fixed number of steps, no matter how big or complex the table is.
[X] Wrong: "Creating a table takes longer if it has more attributes or indexes because it needs more API calls."
[OK] Correct: Actually, the SDK sends one single request to create the table with all details included, so the number of API calls stays the same.
Understanding how AWS SDK operations scale helps you explain cloud resource management clearly and confidently in real-world situations.
"What if we created multiple tables in a loop? How would the time complexity change?"
Practice
Solution
Step 1: Understand the role of a primary key in DynamoDB
The primary key uniquely identifies each item in the table, ensuring no duplicates.Step 2: Differentiate from other table settings
Read/write capacity, region, and encryption are important but unrelated to item uniqueness.Final Answer:
To uniquely identify each item in the table -> Option DQuick Check:
Primary key = unique item ID [OK]
- Confusing primary key with capacity settings
- Thinking primary key sets region or encryption
- Ignoring the uniqueness requirement
Solution
Step 1: Recall AWS SDK syntax for KeySchema
The correct key type for the partition key is "HASH" in the KeySchema array.Step 2: Identify incorrect key types
"PRIMARY", "PRIMARY_KEY", and "KEY" are not valid KeyType values in AWS SDK.Final Answer:
"KeySchema": [{ "AttributeName": "UserId", "KeyType": "HASH" }] -> Option AQuick Check:
KeyType for partition key = HASH [OK]
- Using invalid KeyType values like PRIMARY or KEY
- Confusing KeyType with attribute types
- Missing the array structure for KeySchema
const params = {
TableName: "Products",
KeySchema: [
{ AttributeName: "ProductId", KeyType: "HASH" }
],
AttributeDefinitions: [
{ AttributeName: "ProductId", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
}
};
const result = await dynamodb.createTable(params).promise();
console.log(result.TableDescription.TableName);Solution
Step 1: Understand the createTable response structure
On success, createTable returns an object with TableDescription including TableName.Step 2: Check the console.log statement
It prints result.TableDescription.TableName, which is "Products" as specified.Final Answer:
Products -> Option AQuick Check:
Successful createTable logs table name [OK]
- Expecting error messages on success
- Confusing undefined with valid output
- Missing await causing promise object logging
const params = {
TableName: "Orders",
KeySchema: [
{ AttributeName: "OrderId", KeyType: "HASH" },
{ AttributeName: "OrderDate", KeyType: "RANGE" }
],
AttributeDefinitions: [
{ AttributeName: "OrderId", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
await dynamodb.createTable(params).promise();Solution
Step 1: Check KeySchema and AttributeDefinitions consistency
Both "OrderId" and "OrderDate" are in KeySchema, but only "OrderId" is defined in AttributeDefinitions.Step 2: Identify missing attribute definition
"OrderDate" must be defined in AttributeDefinitions to avoid error.Final Answer:
Missing AttributeDefinition for "OrderDate" -> Option BQuick Check:
All key attributes need AttributeDefinitions [OK]
- Forgetting to define all key attributes
- Assuming RANGE is invalid KeyType
- Blaming ProvisionedThroughput or TableName
Solution
Step 1: Verify KeySchema order and types
Partition key must have KeyType "HASH" and sort key "RANGE" in correct order: EmployeeId (HASH), Department (RANGE).Step 2: Check AttributeDefinitions types
Both EmployeeId and Department are strings, so AttributeType "S" is correct for both.Step 3: Confirm ProvisionedThroughput values
ReadCapacityUnits: 3 and WriteCapacityUnits: 2 match the requirement.Final Answer:
{ TableName: "Employees", KeySchema: [{ AttributeName: "EmployeeId", KeyType: "HASH" }, { AttributeName: "Department", KeyType: "RANGE" }], AttributeDefinitions: [{ AttributeName: "EmployeeId", AttributeType: "S" }, { AttributeName: "Department", AttributeType: "S" }], ProvisionedThroughput: { ReadCapacityUnits: 3, WriteCapacityUnits: 2 } } -> Option CQuick Check:
Correct key order and attribute types = { TableName: "Employees", KeySchema: [{ AttributeName: "EmployeeId", KeyType: "HASH" }, { AttributeName: "Department", KeyType: "RANGE" }], AttributeDefinitions: [{ AttributeName: "EmployeeId", AttributeType: "S" }, { AttributeName: "Department", AttributeType: "S" }], ProvisionedThroughput: { ReadCapacityUnits: 3, WriteCapacityUnits: 2 } } [OK]
- Swapping HASH and RANGE key types
- Mismatching attribute types (string vs number)
- Omitting sort key in KeySchema
