MongoDB
Designing a Hotel Booking System
System design walkthrough for a hotel reservation platform — covering search, inventory management, double-booking prevention, and pricing.
S
srikanthtelkalapally888@gmail.com
Designing a Hotel Booking System
A hotel booking system manages room inventory, search, reservations, and payments for millions of hotels.
Requirements
- Search hotels by location, dates, guests
- Real-time room availability
- Reserve without double-booking
- Payment processing
- Cancellation policies
Data Model
hotels(id, name, location, rating, amenities)
rooms(id, hotel_id, type, price_per_night, capacity)
reservations(id, room_id, user_id, check_in, check_out, status, price)
inventory(room_id, date, available_count)
Availability Search
SELECT r.* FROM rooms r
JOIN hotels h ON r.hotel_id = h.id
WHERE h.city = 'Paris'
AND NOT EXISTS (
SELECT 1 FROM reservations res
WHERE res.room_id = r.id
AND res.status = 'confirmed'
AND res.check_in < '2026-06-15'
AND res.check_out > '2026-06-10'
)
Preventing Double-Booking
Optimistic locking:
INSERT INTO reservations (room_id, check_in, check_out)
SELECT room_id, check_in, check_out
WHERE NOT EXISTS (conflicting reservation)
Add unique constraint on (room_id, date range). DB enforces exclusivity.
Booking Flow
1. Search → Show available rooms
2. User selects room → Soft reserve (10 min hold)
3. User completes payment
4. Confirm reservation + release hold
5. Payment fails → Release hold
Dynamic Pricing
- Increase price as availability decreases
- Seasonal pricing rules
- Last-minute discounts
- Demand forecasting ML model
Caching
- Cache hotel details (rarely changes)
- Cache search results (short TTL, 5 min)
- Don't cache availability (real-time required)
Conclusion
Double-booking prevention via DB constraints + short-lived holds during checkout is the industry-standard pattern for reservation systems.