What if your system could stop double bookings and lost sales instantly?
Why Reservation and hold system in LLD? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you run a small event ticket booth where customers call or come in person to reserve seats. You write down each reservation on paper or a simple spreadsheet. When many customers call at once, you struggle to keep track of who reserved what, and double bookings happen often.
Manually tracking reservations is slow and confusing. You can easily lose track of which seats are held or sold. Mistakes cause unhappy customers and lost sales. It's hard to update availability in real-time, especially when many people try to book simultaneously.
A reservation and hold system automates seat holding and booking. It temporarily blocks seats for a customer while they decide, preventing others from booking the same seat. The system updates availability instantly and handles many users at once without errors.
Check seat availability in spreadsheet If free, mark as reserved Wait for customer confirmation If no confirmation, manually free seat
Hold seat with expiration timer
If customer confirms, finalize booking
If timer expires, release seat automaticallyThis system makes booking fast, reliable, and fair, allowing many customers to reserve seats simultaneously without conflicts.
Online movie ticket platforms use reservation and hold systems to let you pick seats and hold them briefly while you pay, ensuring no double bookings happen.
Manual reservation is error-prone and slow.
Reservation and hold systems automate seat blocking and release.
They enable smooth, real-time booking for many users.
Practice
Solution
Step 1: Understand the role of a hold
A hold temporarily blocks a resource to prevent others from booking it while the user decides.Step 2: Differentiate hold from reservation
A reservation is permanent until canceled, while a hold expires if not confirmed.Final Answer:
To temporarily block a resource before final booking -> Option DQuick Check:
Hold = Temporary block [OK]
- Confusing hold with permanent reservation
- Thinking holds never expire
- Assuming holds cancel reservations
Solution
Step 1: Identify requirements for hold tracking
We need fast lookup by hold ID and efficient expiration handling.Step 2: Choose data structures
A hash map allows quick hold lookup; a priority queue orders holds by expiration for timely removal.Final Answer:
Hash map with timestamps and a priority queue for expirations -> Option CQuick Check:
Hash map + priority queue = efficient hold tracking [OK]
- Using unordered arrays causing slow expiration checks
- Choosing stack which is LIFO, not suitable for expirations
- Ignoring timestamps in data structure
if hold.exists(hold_id) and not hold.is_expired(hold_id):
reservation.create(hold.resource)
hold.remove(hold_id)
return "Confirmed"
else:
return "Failed"
What will be the output if the hold has expired?Solution
Step 1: Check hold existence and expiration
The code confirms only if hold exists and is not expired.Step 2: Analyze expired hold case
If hold is expired, condition fails and returns "Failed" without creating reservation.Final Answer:
"Failed" -> Option AQuick Check:
Expired hold = "Failed" confirmation [OK]
- Assuming expired holds confirm successfully
- Expecting errors instead of failure message
- Ignoring hold expiration check
for hold in holds:
if hold.expiration_time < current_time:
holds.remove(hold)
What is the main issue with this code?Solution
Step 1: Understand iteration and modification
Removing items from a list while iterating over it causes skipping or runtime errors.Step 2: Identify correct approach
Use a separate list to collect expired holds or iterate over a copy to safely remove.Final Answer:
Modifying a list while iterating causes skipped elements or errors -> Option BQuick Check:
Remove during iteration = skipped elements [OK]
- Ignoring iteration modification side effects
- Assuming expiration comparison is wrong
- Thinking loop type causes the issue
Solution
Step 1: Prevent double booking with distributed locks
Distributed locks ensure only one user can hold a resource at a time across servers.Step 2: Use TTL in distributed cache for hold expiration
TTL automatically expires holds after timeout, preventing indefinite blocking.Step 3: Confirm holds atomically
Atomic transactions guarantee reservation creation without race conditions.Final Answer:
Use distributed locks on resources, store holds with TTL in a distributed cache, and confirm with atomic transactions -> Option AQuick Check:
Distributed locks + TTL + atomic confirm = scalable, safe system [OK]
- Ignoring concurrency causing double booking
- Relying on client-side expiration only
- Not using atomic operations for confirmation
