Bird
Raised Fist0
DynamoDBquery~20 mins

GSI key selection strategy in DynamoDB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
GSI Key Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Choosing the Partition Key for a GSI

In DynamoDB, when creating a Global Secondary Index (GSI), which of the following is the best reason to choose a partition key that has high cardinality (many unique values)?

ATo evenly distribute read and write traffic across partitions and avoid hot partitions.
BTo make the index smaller by grouping many items under the same key.
CTo ensure the GSI always returns results sorted by the partition key.
DTo reduce the number of attributes stored in the GSI.
Attempts:
2 left
💡 Hint

Think about how DynamoDB spreads data and traffic across partitions.

❓ query_result
intermediate
2:00remaining
Querying a GSI with Partition and Sort Keys

Given a DynamoDB table with a GSI where the partition key is Category and the sort key is Price, what will be the result of this query?

Query the GSI for Category = 'Books' and Price between 10 and 20.

Assuming the GSI contains these items:

  • {Category: 'Books', Price: 15, Title: 'Book A'}
  • {Category: 'Books', Price: 25, Title: 'Book B'}
  • {Category: 'Books', Price: 12, Title: 'Book C'}
  • {Category: 'Electronics', Price: 15, Title: 'Gadget'}
AReturns all items with Category 'Books' regardless of Price.
BReturns 'Book B' only because Price is 25.
CReturns no items because Price is not the partition key.
DReturns 'Book A' and 'Book C' only.
Attempts:
2 left
💡 Hint

Remember how partition and sort keys work in queries.

📝 Syntax
advanced
2:00remaining
Identifying the Correct GSI Key Schema Syntax

Which of the following JSON snippets correctly defines a GSI key schema with a partition key named UserId and a sort key named Timestamp in a DynamoDB table?

A{ "IndexName": "UserActivityIndex", "KeySchema": [ { "AttributeName": "Timestamp", "KeyType": "HASH" }, { "AttributeName": "UserId", "KeyType": "RANGE" } ] }
B{ "IndexName": "UserActivityIndex", "KeySchema": [ { "AttributeName": "UserId", "KeyType": "HASH" }, { "AttributeName": "Timestamp", "KeyType": "RANGE" } ] }
C{ "IndexName": "UserActivityIndex", "KeySchema": [ { "AttributeName": "UserId", "KeyType": "RANGE" }, { "AttributeName": "Timestamp", "KeyType": "HASH" } ] }
D{ "IndexName": "UserActivityIndex", "KeySchema": [ { "AttributeName": "UserId", "KeyType": "PRIMARY" }, { "AttributeName": "Timestamp", "KeyType": "SORT" } ] }
Attempts:
2 left
💡 Hint

Recall the correct key types for partition and sort keys in DynamoDB.

❓ optimization
advanced
2:00remaining
Optimizing GSI for Query Performance

You have a DynamoDB table storing orders with attributes: OrderId, CustomerId, Status, and OrderDate. You want to create a GSI to efficiently query all orders by CustomerId and sort them by OrderDate. Which GSI key selection strategy is best?

ASet <code>OrderDate</code> as the partition key and <code>CustomerId</code> as the sort key of the GSI.
BSet <code>Status</code> as the partition key and <code>OrderDate</code> as the sort key of the GSI.
CSet <code>CustomerId</code> as the partition key and <code>OrderDate</code> as the sort key of the GSI.
DSet <code>OrderId</code> as the partition key and <code>Status</code> as the sort key of the GSI.
Attempts:
2 left
💡 Hint

Think about how you want to query the data and which attribute groups the data logically.

🔧 Debug
expert
2:00remaining
Diagnosing a Hot Partition Issue in a GSI

You created a GSI with Status as the partition key and CreatedAt as the sort key. Your application experiences throttling and slow queries. The Status attribute only has three possible values: 'Pending', 'Completed', and 'Cancelled'. What is the most likely cause of the problem?

AThe low cardinality of the partition key 'Status' causes hot partitions due to uneven traffic distribution.
BThe sort key 'CreatedAt' is not indexed properly, causing slow queries.
CThe GSI is missing a projection of the 'Status' attribute.
DThe table's primary key conflicts with the GSI partition key.
Attempts:
2 left
💡 Hint

Consider how the number of unique partition key values affects traffic distribution.

Practice

(1/5)
1. What is the main purpose of choosing a good partition key for a Global Secondary Index (GSI) in DynamoDB?
easy
A. To evenly distribute data across partitions for faster queries
B. To store large binary objects efficiently
C. To encrypt data at rest automatically
D. To backup data to another region

Solution

  1. Step 1: Understand partition key role in GSI

    The partition key determines how data is spread across storage partitions in DynamoDB.
  2. Step 2: Importance of even data distribution

    Choosing a partition key that evenly distributes data avoids hot partitions and improves query speed.
  3. Final Answer:

    To evenly distribute data across partitions for faster queries -> Option A
  4. Quick Check:

    Partition key = data distribution [OK]
Hint: Partition key controls data spread, pick for balance [OK]
Common Mistakes:
  • Thinking partition key orders data inside partitions
  • Confusing partition key with sort key
  • Assuming partition key encrypts data
2. Which of the following is the correct syntax to define a GSI with a partition key named Category and a sort key named Timestamp in a DynamoDB table creation JSON?
easy
A. { "IndexName": "CategoryTimestampIndex", "KeySchema": [ {"AttributeName": "Timestamp", "KeyType": "RANGE"}, {"AttributeName": "Category", "KeyType": "HASH"} ], "Projection": {"ProjectionType": "ALL"} }
B. { "IndexName": "CategoryTimestampIndex", "KeySchema": [ {"AttributeName": "Category", "KeyType": "HASH"}, {"AttributeName": "Timestamp", "KeyType": "RANGE"} ], "Projection": {"ProjectionType": "ALL"} }
C. { "IndexName": "CategoryTimestampIndex", "KeySchema": [ {"AttributeName": "Category", "KeyType": "RANGE"}, {"AttributeName": "Timestamp", "KeyType": "HASH"} ], "Projection": {"ProjectionType": "ALL"} }
D. { "IndexName": "CategoryTimestampIndex", "KeySchema": [ {"AttributeName": "Timestamp", "KeyType": "HASH"}, {"AttributeName": "Category", "KeyType": "RANGE"} ], "Projection": {"ProjectionType": "ALL"} }

Solution

  1. Step 1: Identify partition and sort key roles

    Partition key uses KeyType "HASH" and sort key uses KeyType "RANGE" in DynamoDB.
  2. Step 2: Match keys to correct KeyType

    Category is partition key so it must have KeyType "HASH"; Timestamp is sort key so it must have KeyType "RANGE".
  3. Final Answer:

    Correct JSON with Category as HASH and Timestamp as RANGE -> Option B
  4. Quick Check:

    Partition key = HASH, Sort key = RANGE [OK]
Hint: Partition key = HASH, sort key = RANGE in KeySchema [OK]
Common Mistakes:
  • Swapping HASH and RANGE key types
  • Using RANGE for partition key
  • Incorrect JSON structure for KeySchema
3. Given a DynamoDB table with a GSI where the partition key is UserId and the sort key is OrderDate, what will be the result of this query?
Query on GSI with UserId = 'user123' and OrderDate between '2023-01-01' and '2023-01-31'
medium
A. All orders by user123 in January 2023 sorted by OrderDate
B. All orders by all users in January 2023
C. All orders by user123 regardless of date
D. Syntax error due to missing filter expression

Solution

  1. Step 1: Understand query conditions on GSI keys

    Query uses partition key UserId = 'user123' and a range condition on sort key OrderDate between two dates.
  2. Step 2: Result filters by UserId and date range

    Only items with UserId 'user123' and OrderDate in January 2023 are returned, sorted by OrderDate.
  3. Final Answer:

    All orders by user123 in January 2023 sorted by OrderDate -> Option A
  4. Quick Check:

    Partition key + sort key range = filtered query [OK]
Hint: Query filters partition key exactly, sort key by range [OK]
Common Mistakes:
  • Thinking query returns all users' data
  • Ignoring sort key range condition
  • Assuming syntax error without filter expression
4. You created a GSI with partition key Category and sort key Price. Your queries on this GSI are slow and uneven. What is the most likely cause?
medium
A. Price is not indexed as a sort key
B. The table has no primary key
C. You forgot to project attributes
D. Category has very few distinct values causing hot partitions

Solution

  1. Step 1: Analyze partition key distribution

    If Category has few distinct values, many items share the same partition key, causing hot partitions and slow queries.
  2. Step 2: Understand impact on query performance

    Hot partitions limit throughput and cause uneven query speed despite having a sort key.
  3. Final Answer:

    Category has very few distinct values causing hot partitions -> Option D
  4. Quick Check:

    Few partition keys = hot partitions = slow queries [OK]
Hint: Few partition key values cause hot partitions [OK]
Common Mistakes:
  • Assuming missing sort key causes slowness
  • Ignoring partition key cardinality
  • Thinking projection affects partitioning
5. You want to design a GSI to efficiently query orders by CustomerId and sort them by OrderStatus and then by OrderDate. Which key selection strategy is best?
hard
A. Partition key: CustomerId; Sort key: OrderDate only
B. Partition key: OrderStatus; Sort key: CustomerId#OrderDate concatenated string
C. Partition key: CustomerId; Sort key: OrderStatus#OrderDate concatenated string
D. Partition key: OrderDate; Sort key: CustomerId

Solution

  1. Step 1: Identify query pattern requirements

    You want to query by CustomerId and sort first by OrderStatus, then by OrderDate.
  2. Step 2: Design composite sort key for multi-level sorting

    Concatenate OrderStatus and OrderDate into one sort key string (e.g., 'Shipped#2023-06-01') to sort by status then date.
  3. Step 3: Assign keys correctly

    Partition key should be CustomerId for grouping orders by customer; sort key is the concatenated string for sorting.
  4. Final Answer:

    Partition key: CustomerId; Sort key: OrderStatus#OrderDate concatenated string -> Option C
  5. Quick Check:

    Composite sort key enables multi-level sorting [OK]
Hint: Use composite sort key for multi-level sorting [OK]
Common Mistakes:
  • Using OrderStatus as partition key causing uneven distribution
  • Not combining sort keys for multi-level order
  • Using OrderDate as partition key which breaks grouping
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard