Bird
Raised Fist0
DynamoDBquery~5 mins

Composite sort key pattern in DynamoDB

Choose your learning style10 modes available
Introduction

We use composite sort keys to organize related data together in a single table. This helps us find and sort items easily by combining multiple pieces of information into one key.

You want to store different types of related data in one table and retrieve them together.
You need to sort items by more than one attribute, like date and category.
You want to quickly find all items related to a user, but also sort them by type or time.
You want to group orders by customer and then sort by order date.
You want to store events with both event type and timestamp in one key for easy queries.
Syntax
DynamoDB
PartitionKey: string
SortKey: string (usually combines multiple values separated by a delimiter, e.g., '#')

The sort key is a single string that combines multiple pieces of information.

Use a clear delimiter like '#' to separate parts inside the sort key.

Examples
This example stores an order for user 123 with the order date in the sort key.
DynamoDB
PK = "USER#123"
SK = "ORDER#2024-06-01"
This example stores a review for product 456 with the review date in the sort key.
DynamoDB
PK = "PRODUCT#456"
SK = "REVIEW#2024-05-30"
This example stores profile information for user 123 using a composite sort key.
DynamoDB
PK = "USER#123"
SK = "PROFILE#INFO"
Sample Program

This example creates a table with a composite sort key pattern. It inserts three orders for the same user with dates in the sort key. Then it queries all orders for that user, sorted by the order date.

DynamoDB
CREATE TABLE Orders (
  PK STRING,
  SK STRING,
  OrderAmount NUMBER,
  PRIMARY KEY (PK, SK)
);

-- Insert orders for user 123
INSERT INTO Orders (PK, SK, OrderAmount) VALUES ('USER#123', 'ORDER#2024-06-01', 100);
INSERT INTO Orders (PK, SK, OrderAmount) VALUES ('USER#123', 'ORDER#2024-06-15', 150);
INSERT INTO Orders (PK, SK, OrderAmount) VALUES ('USER#123', 'ORDER#2024-07-01', 200);

-- Query all orders for user 123 sorted by date
SELECT * FROM Orders WHERE PK = 'USER#123' ORDER BY SK;
OutputSuccess
Important Notes

Always choose a delimiter that won't appear in your data to avoid confusion.

Composite sort keys let you store and query different item types under the same partition key.

Summary

Composite sort keys combine multiple values into one string to organize data.

This pattern helps group and sort related items efficiently.

Use clear delimiters to separate parts inside the sort key.

Practice

(1/5)
1. What is the main purpose of using a composite sort key in DynamoDB?
easy
A. To create a unique partition key for each item
B. To increase the read capacity of the table
C. To encrypt data stored in the table
D. To combine multiple attributes into one key for better sorting and grouping

Solution

  1. Step 1: Understand composite sort key concept

    A composite sort key combines multiple values into one string to organize data efficiently.
  2. Step 2: Identify its main use

    This helps group related items and sort them within the same partition key.
  3. Final Answer:

    To combine multiple attributes into one key for better sorting and grouping -> Option D
  4. Quick Check:

    Composite sort key = combine attributes [OK]
Hint: Composite sort keys combine values to sort and group data [OK]
Common Mistakes:
  • Confusing composite sort key with partition key
  • Thinking it encrypts data
  • Assuming it increases capacity
2. Which of the following is a correct example of a composite sort key format?
easy
A. 2023-04-01_Customer123_Order
B. Customer123|Order|2023-04-01
C. Order:2023-04-01:Customer123
D. Order#2023-04-01#Customer123

Solution

  1. Step 1: Identify proper delimiter usage

    Composite sort keys use clear delimiters like colons to separate parts for easy parsing.
  2. Step 2: Check each option's delimiter consistency

    Order:2023-04-01:Customer123 uses colons consistently, making it a clear composite key format.
  3. Final Answer:

    Order:2023-04-01:Customer123 -> Option C
  4. Quick Check:

    Clear delimiters = Order:2023-04-01:Customer123 [OK]
Hint: Use consistent delimiters like ':' in composite keys [OK]
Common Mistakes:
  • Using inconsistent or unclear delimiters
  • Mixing delimiters without pattern
  • Not separating parts clearly
3. Given a DynamoDB table with partition key UserID and composite sort key OrderDate#OrderID, what will be the result of querying for UserID = 'U123' and sort key begins with '2023-05-'?
medium
A. All orders by user U123 placed in May 2023
B. All orders by user U123 regardless of date
C. Orders from all users placed in May 2023
D. No results because sort key format is invalid

Solution

  1. Step 1: Understand the composite sort key structure

    The sort key combines OrderDate and OrderID separated by '#', so prefix '2023-05-' matches May 2023 orders.
  2. Step 2: Query with partition key and sort key prefix

    Querying UserID='U123' and sort key begins with '2023-05-' returns all U123's orders in May 2023.
  3. Final Answer:

    All orders by user U123 placed in May 2023 -> Option A
  4. Quick Check:

    Partition + sort key prefix = filtered orders [OK]
Hint: Use sort key prefix to filter by date in composite keys [OK]
Common Mistakes:
  • Ignoring partition key in query
  • Assuming all users' data is returned
  • Misunderstanding sort key prefix filtering
4. You wrote a composite sort key as OrderDate-OrderID but your queries using begins_with('2023-06') return no results. What is the likely problem?
medium
A. The sort key should use a consistent delimiter like ':' or '#' instead of '-'
B. The query must use contains instead of begins_with
C. The delimiter '-' is missing in the query filter
D. The partition key is incorrect

Solution

  1. Step 1: Check delimiter consistency in composite keys

    Using '-' as delimiter can cause confusion if date format also contains '-'.
  2. Step 2: Understand query prefix matching

    Because date and delimiter both use '-', the prefix '2023-06' may not match correctly; consistent delimiters like ':' or '#' avoid this.
  3. Final Answer:

    The sort key should use a consistent delimiter like ':' or '#' instead of '-' -> Option A
  4. Quick Check:

    Delimiter confusion breaks prefix queries [OK]
Hint: Avoid delimiters that appear in data parts [OK]
Common Mistakes:
  • Using delimiters that clash with data format
  • Wrong query function for prefix
  • Ignoring partition key correctness
5. You want to design a DynamoDB table to store chat messages with partition key ChatRoomID and composite sort key combining MessageDate and MessageID. Which composite sort key format is best to efficiently query messages by date and maintain uniqueness?
hard
A. MessageID#MessageDate with date in any format
B. MessageDate#MessageID with date in ISO format (YYYY-MM-DDTHH:mm:ss)
C. MessageDate-MessageID with date in MM/DD/YYYY
D. MessageDate_MessageID with date as Unix timestamp

Solution

  1. Step 1: Choose delimiter and date format for sorting

    Using '#' as delimiter is clear and ISO date format sorts lexicographically by date/time.
  2. Step 2: Ensure uniqueness and query efficiency

    Placing MessageDate first allows range queries by date; MessageID ensures uniqueness within same timestamp.
  3. Final Answer:

    MessageDate#MessageID with date in ISO format (YYYY-MM-DDTHH:mm:ss) -> Option B
  4. Quick Check:

    ISO date + clear delimiter = best composite key [OK]
Hint: Use ISO date + clear delimiter for sortable composite keys [OK]
Common Mistakes:
  • Using ambiguous delimiters
  • Placing unique ID before date
  • Using non-lexicographically sortable date formats
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