Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Keyset Pagination for Performance in REST API
📖 Scenario: You are building a REST API that returns a list of blog posts. The database has many posts, so you want to implement efficient pagination to avoid slow responses.Keyset pagination is a technique that uses the last seen item's unique ID to fetch the next set of results quickly, instead of using offset-based pagination which can be slow on large datasets.
🎯 Goal: Build a simple REST API endpoint that returns blog posts using keyset pagination for better performance.You will create the initial data, set up a pagination limit, implement the keyset pagination logic, and finally output the paginated results.
📋 What You'll Learn
Create a list of blog posts with exact IDs and titles
Set a pagination limit variable
Implement keyset pagination logic using the last seen post ID
Print the paginated list of posts
💡 Why This Matters
🌍 Real World
Keyset pagination is used in APIs to efficiently load large lists of data without performance issues caused by offset pagination.
💼 Career
Understanding keyset pagination is important for backend developers working on scalable APIs and database querying.
Progress0 / 4 steps
1
Create the initial list of blog posts
Create a list called posts with these exact dictionaries representing blog posts: {'id': 1, 'title': 'Intro to REST'}, {'id': 2, 'title': 'Advanced REST'}, {'id': 3, 'title': 'REST Best Practices'}, {'id': 4, 'title': 'REST Security'}, {'id': 5, 'title': 'REST Performance'}.
Rest API
Hint
Use a list of dictionaries. Each dictionary must have keys 'id' and 'title' with the exact values.
2
Set the pagination limit
Create a variable called limit and set it to 2 to control how many posts to return per page.
Rest API
Hint
Just create a variable named limit and assign the number 2.
3
Implement keyset pagination logic
Create a variable called last_seen_id and set it to 2. Then create a list called paginated_posts that contains posts from posts where the post 'id' is greater than last_seen_id, limited to limit posts.
Rest API
Hint
Use a list comprehension to filter posts with id greater than last_seen_id and slice the list to the limit.
4
Print the paginated posts
Write a print statement to display the paginated_posts list.
Rest API
Hint
Use print(paginated_posts) to show the filtered posts.
Practice
(1/5)
1. What is the main advantage of using keyset pagination over traditional offset-based pagination in REST APIs?
easy
A. It requires less server memory by caching all pages in advance.
B. It allows jumping to any page number directly without sequential access.
C. It improves performance by avoiding slow offset queries on large datasets.
D. It automatically sorts data in descending order without extra code.
Solution
Step 1: Understand offset-based pagination issues
Offset pagination uses a page number and offset, which becomes slow on large datasets because the database must skip many rows.
Step 2: Recognize keyset pagination benefits
Keyset pagination uses a fixed key (like an ID) to fetch the next set of rows, avoiding the costly skip operation and improving performance.
Final Answer:
It improves performance by avoiding slow offset queries on large datasets. -> Option C
Quick Check:
Keyset pagination = better performance [OK]
Hint: Keyset uses keys, not offsets, for faster queries [OK]
Common Mistakes:
Thinking keyset allows random page jumps
Assuming keyset caches all data
Believing keyset changes sort order automatically
2. Which of the following is the correct SQL snippet to implement keyset pagination for a table users ordered by id?
easy
A. SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20;
B. SELECT * FROM users WHERE id > 20 ORDER BY id LIMIT 10;
C. SELECT * FROM users WHERE id = 20 ORDER BY id LIMIT 10;
D. SELECT * FROM users ORDER BY id DESC LIMIT 10 OFFSET 20;
Solution
Step 1: Identify keyset pagination syntax
Keyset pagination uses a WHERE clause with a key (like id > last_seen_id) and a LIMIT to fetch the next page.
Step 2: Analyze each option
SELECT * FROM users WHERE id > 20 ORDER BY id LIMIT 10; uses WHERE id > 20 with ORDER BY id LIMIT 10, which matches keyset pagination logic.
Final Answer:
SELECT * FROM users WHERE id > 20 ORDER BY id LIMIT 10; -> Option B
Quick Check:
Keyset uses WHERE key > last_key [OK]
Hint: Keyset uses WHERE with key comparison, not OFFSET [OK]
Common Mistakes:
Using OFFSET instead of WHERE for pagination
Using equality (=) instead of greater than (>)
Not ordering results by the key column
3. Given this REST API endpoint using keyset pagination:
GET /items?last_id=50&limit=5
And the database table items with IDs: [45, 47, 50, 52, 55, 60, 65], what will be the IDs returned by this request?
medium
A. [52, 55, 60, 65]
B. [45, 47, 50, 52, 55]
C. [52, 55, 60, 65, 70]
D. [51, 52, 53, 54, 55]
Solution
Step 1: Understand keyset pagination with last_id=50
The API returns items with IDs greater than 50, limited to 5 results.
Step 2: Select IDs greater than 50 from the list
IDs greater than 50 are [52, 55, 60, 65]. There are only 4 such items, so all are returned.
Final Answer:
[52, 55, 60, 65] -> Option A
Quick Check:
IDs > 50 limited to 5 = [52, 55, 60, 65] [OK]
Hint: Return items with ID > last_id, up to limit [OK]
Common Mistakes:
Including items with ID equal to last_id
Using offset instead of key comparison
Assuming IDs are continuous numbers
4. You have this SQL query for keyset pagination:
SELECT * FROM orders WHERE order_date > '2024-01-01' ORDER BY order_date LIMIT 10;
But it returns duplicate rows when new orders are added. What is the likely cause?
medium
A. Ordering by a non-unique column causing duplicates
B. LIMIT value is too high causing repeats
C. Missing OFFSET clause to skip duplicates
D. Using > instead of >= in WHERE clause
Solution
Step 1: Identify ordering column uniqueness
Ordering by order_date alone can cause duplicates if multiple rows share the same date.
Step 2: Understand keyset pagination requirements
Keyset pagination requires ordering by a unique column or combination to avoid duplicates and missing rows.
Final Answer:
Ordering by a non-unique column causing duplicates -> Option A
Quick Check:
Order by unique key to avoid duplicates [OK]
Hint: Order by unique keys to prevent duplicates [OK]
Common Mistakes:
Thinking OFFSET fixes duplicates
Using >= instead of > causes duplicates
Assuming LIMIT controls duplicates
5. You want to implement keyset pagination on a REST API that returns products sorted by price ascending, then by id ascending to break ties. Which SQL WHERE clause correctly fetches the next page after last product with price=100 and id=50?
hard
A. WHERE price > 100 OR id > 50
B. WHERE price >= 100 AND id > 50
C. WHERE price > 100 AND id > 50
D. WHERE price > 100 OR (price = 100 AND id > 50)
Solution
Step 1: Understand multi-column keyset pagination
When ordering by multiple columns, the WHERE clause must handle the first column and then the second to break ties.
Step 2: Analyze the correct condition
The correct condition is price > 100 OR (price = 100 AND id > 50) to get all rows with higher price or same price but higher id.
Final Answer:
WHERE price > 100 OR (price = 100 AND id > 50) -> Option D
Quick Check:
Multi-column keyset uses OR + AND for tie-break [OK]
Hint: Use OR with AND to handle multi-column keys [OK]