Bird
Raised Fist0
DynamoDBquery~20 mins

GSI overloading technique in DynamoDB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
GSI Overloading Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Querying a GSI with overloaded attributes

You have a DynamoDB table with a Global Secondary Index (GSI) that uses the attribute GSI1PK as the partition key and GSI1SK as the sort key. The table uses GSI overloading where GSI1PK stores different entity types (e.g., 'USER#123', 'ORDER#456').

What will be the output of this query?

Query GSI1 where GSI1PK = 'USER#123' and GSI1SK begins with 'PROFILE#'

Assuming the table has these items:

  • {GSI1PK: 'USER#123', GSI1SK: 'PROFILE#MAIN', Data: 'UserProfileData'}
  • {GSI1PK: 'USER#123', GSI1SK: 'ORDER#789', Data: 'OrderData'}
  • {GSI1PK: 'ORDER#456', GSI1SK: 'PROFILE#MAIN', Data: 'OrderProfileData'}
A[{GSI1PK: 'USER#123', GSI1SK: 'PROFILE#MAIN', Data: 'UserProfileData'}]
B[{GSI1PK: 'USER#123', GSI1SK: 'ORDER#789', Data: 'OrderData'}]
C[{GSI1PK: 'ORDER#456', GSI1SK: 'PROFILE#MAIN', Data: 'OrderProfileData'}]
D[]
Attempts:
2 left
💡 Hint

Remember the query filters on GSI1PK and the sort key prefix.

🧠 Conceptual
intermediate
1:30remaining
Purpose of GSI overloading in DynamoDB

What is the main advantage of using the GSI overloading technique in DynamoDB?

AIt automatically encrypts data stored in the GSI for security.
BIt increases the write throughput of the base table by duplicating data.
CIt allows storing multiple entity types in a single GSI by using a shared partition key attribute with type prefixes.
DIt enables cross-region replication of the GSI data.
Attempts:
2 left
💡 Hint

Think about how overloading helps organize different data types in one index.

📝 Syntax
advanced
2:30remaining
Correct DynamoDB query syntax for GSI overloading

Which of the following DynamoDB query expressions correctly queries a GSI named GSI1 to find all items with GSI1PK = 'ORDER#' and GSI1SK greater than '2023-01-01'?

AKeyConditionExpression: 'GSI1PK = :prefix AND GSI1SK > :date', ExpressionAttributeValues: { ':prefix': 'ORDER#', ':date': '2023-01-01' }
BKeyConditionExpression: 'begins_with(GSI1PK, :prefix) AND GSI1SK > :date', ExpressionAttributeValues: { ':prefix': 'ORDER#', ':date': '2023-01-01' }
CKeyConditionExpression: 'begins_with(GSI1PK, :prefix) OR GSI1SK > :date', ExpressionAttributeValues: { ':prefix': 'ORDER#', ':date': '2023-01-01' }
DKeyConditionExpression: 'GSI1PK >= :prefix AND GSI1SK > :date', ExpressionAttributeValues: { ':prefix': 'ORDER#', ':date': '2023-01-01' }
Attempts:
2 left
💡 Hint

Remember that DynamoDB KeyConditionExpression supports equality on partition key and range conditions on sort key.

❓ optimization
advanced
2:30remaining
Optimizing GSI overloading for query performance

You have a GSI overloaded with multiple entity types distinguished by prefixes in GSI1PK. Queries on one entity type are slow because the GSI contains many items of other types.

Which optimization will improve query performance?

AAdd a filter expression to the query to exclude other entity types after fetching all items.
BCreate separate GSIs for each entity type instead of overloading.
CIncrease the read capacity units (RCUs) of the GSI to handle more queries.
DUse a sort key prefix to narrow down the query range within the overloaded GSI.
Attempts:
2 left
💡 Hint

Think about how to reduce the number of items scanned during the query.

🔧 Debug
expert
3:00remaining
Debugging a failing query on an overloaded GSI

A query on a DynamoDB GSI overloaded with multiple entity types returns no results, even though matching items exist. The query uses begins_with(GSI1PK, :prefix) with :prefix = 'USER#'.

What is the most likely cause of the problem?

AThe table's primary key conflicts with the GSI partition key causing query failure.
BDynamoDB does not support <code>begins_with</code> on partition key in KeyConditionExpression; partition key must be matched exactly.
CThe query is missing a filter expression to include items with <code>GSI1PK</code> starting with 'USER#'.
DThe attribute <code>GSI1PK</code> is not projected into the GSI.
Attempts:
2 left
💡 Hint

Recall DynamoDB query restrictions on partition keys.

Practice

(1/5)
1. What is the main benefit of using the GSI overloading technique in DynamoDB?
easy
A. It allows using a single Global Secondary Index for multiple query patterns.
B. It automatically encrypts data stored in the table.
C. It increases the size limit of DynamoDB items.
D. It enables multi-region replication without extra setup.

Solution

  1. Step 1: Understand GSI overloading purpose

    GSI overloading is designed to let one index serve many query types by using prefixes and composite keys.
  2. Step 2: Identify the main benefit

    This reduces the number of GSIs needed, saving costs and improving query flexibility.
  3. Final Answer:

    It allows using a single Global Secondary Index for multiple query patterns. -> Option A
  4. Quick Check:

    GSI overloading = single index, multiple queries [OK]
Hint: Remember: one GSI, many queries saves cost and complexity [OK]
Common Mistakes:
  • Thinking GSI overloading encrypts data
  • Confusing GSI overloading with item size limits
  • Assuming it enables multi-region replication
2. Which of the following is the correct way to define a partition key for a GSI using overloading with prefixes?
easy
A. PartitionKey = "USER#" + UserId
B. PartitionKey = UserId + "#USER"
C. PartitionKey = UserId
D. PartitionKey = "#" + UserId + "USER"

Solution

  1. Step 1: Understand prefix usage in GSI keys

    Prefixes like "USER#" help separate different entity types in the same GSI.
  2. Step 2: Check correct concatenation

    The prefix should come first, then the unique identifier, so "USER#" + UserId is correct.
  3. Final Answer:

    PartitionKey = "USER#" + UserId -> Option A
  4. Quick Check:

    Prefix before ID = "USER#" + UserId [OK]
Hint: Prefix always goes before the ID in composite keys [OK]
Common Mistakes:
  • Putting prefix after the ID
  • Using no prefix at all
  • Adding extra symbols incorrectly
3. Given a DynamoDB table with a GSI using overloading where the partition key is PK and sort key is SK, what will be the result of this query?

Query:
PK = "ORDER#123"
SK begins_with "ITEM#"
medium
A. Returns no results because SK cannot be filtered
B. Returns all orders with PK starting with "ORDER#"
C. Returns all items with SK exactly equal to "ITEM#"
D. Returns all items related to order 123 with SK starting with "ITEM#"

Solution

  1. Step 1: Understand the query keys

    The query filters on PK = "ORDER#123" and SK begins with "ITEM#" which targets items under order 123.
  2. Step 2: Interpret begins_with on SK

    Using begins_with on SK returns all sort keys starting with "ITEM#", so all order items are returned.
  3. Final Answer:

    Returns all items related to order 123 with SK starting with "ITEM#" -> Option D
  4. Quick Check:

    PK exact + SK begins_with = filtered order items [OK]
Hint: begins_with on SK filters items under one PK [OK]
Common Mistakes:
  • Thinking begins_with applies to PK
  • Assuming SK must be exact match
  • Believing SK cannot be filtered in query
4. You have a GSI with partition key GSI_PK and sort key GSI_SK. You want to query all "USER" entities but your query returns no results. Which of the following is the most likely cause?
medium
A. You used begins_with on the partition key instead of the sort key.
B. You forgot to add the prefix "USER#" to the partition key value in the query.
C. You queried the base table instead of the GSI.
D. You used a filter expression instead of a key condition.

Solution

  1. Step 1: Check prefix usage in GSI overloading

    GSI overloading requires prefixes like "USER#" in the partition key to separate entity types.
  2. Step 2: Identify missing prefix impact

    If the query omits the prefix, it won't match any items because keys are stored with prefixes.
  3. Final Answer:

    You forgot to add the prefix "USER#" to the partition key value in the query. -> Option B
  4. Quick Check:

    Missing prefix in PK = no results [OK]
Hint: Always include prefixes in GSI key queries [OK]
Common Mistakes:
  • Using begins_with on partition key
  • Querying base table instead of GSI
  • Using filter instead of key condition
5. You want to design a GSI overloading scheme to support queries for both USER and ORDER entities in the same index. Which key design below best supports efficient queries for:
1) All orders by a user
2) All users by status

Choose the best partition key and sort key combination.
hard
A. Partition Key: "TYPE#" + EntityType, Sort Key: "ID#" + EntityId
B. Partition Key: "USER#" + UserId for orders, "USER#" + UserId for users; Sort Key: "ORDER#" + OrderId for orders, "USER#" + UserId for users
C. Partition Key: "USER#" + UserId for orders, "STATUS#" + Status for users; Sort Key: "ORDER#" + OrderId for orders, "USER#" + UserId for users
D. Partition Key: EntityId, Sort Key: EntityType

Solution

  1. Step 1: Analyze query requirements

    Query 1 needs all orders by a user, so partition key should be "USER#" + UserId for orders.
    Query 2 needs all users by status, so partition key should be "STATUS#" + Status for users.
  2. Step 2: Check sort key design

    Sort keys differentiate entities: "ORDER#" + OrderId for orders, "USER#" + UserId for users to keep uniqueness and sorting.
  3. Step 3: Evaluate options

    Partition Key: "USER#" + UserId for orders, "STATUS#" + Status for users; Sort Key: "ORDER#" + OrderId for orders, "USER#" + UserId for users matches these requirements by overloading the GSI with different prefixes for partition keys and sort keys.
  4. Final Answer:

    Partition Key: "USER#" + UserId for orders, "STATUS#" + Status for users; Sort Key: "ORDER#" + OrderId for orders, "USER#" + UserId for users -> Option C
  5. Quick Check:

    Use different prefixes per entity and query need [OK]
Hint: Use distinct prefixes per entity and query type in keys [OK]
Common Mistakes:
  • Using same prefix for all entities
  • Not differentiating partition keys by query type
  • Using entity ID as partition key without prefix
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