Oracle's "Design Booking System (BookMyShow)" interview question focuses on architecting a scalable movie ticket booking platform like BookMyShow, emphasizing concurrency control, transactions, and data consistency.
Design a high-performance ticketing system supporting movie/show selection, seat booking across theaters/screens, payments, and cancellations. Key goals include preventing double-booking under high concurrency (e.g., popular shows), ensuring ACID-compliant transactions for payments, and handling seat locks with timeouts (typically 10 minutes). The system must scale for millions of users, support aggregators (e.g., partner apps sharing seat inventory), and provide real-time availability updates.[1][3]
| API | Request Inputs | Response Outputs | Constraints | |-----|----------------|------------------|-------------| | SearchMovies | city, date | List of movies/shows | Paginated; cached.[1] | | GetShowSeats | showId | Seat map (available/locked) | Real-time; row/col layout.[1] | | BlockSeats | userId, seatIds[] | Block confirmation, 10-min timeout | Max 10 seats; temporary lock.[1] | | BookSeats | userId, seatIds[], paymentDetails | Ticket ID, payment status | Idempotent; atomic with payment.[1] | | GetTimeout | seatIds[] | Remaining time (seconds) | For locked seats only.[1] | | CancelBooking | bookingId | Refund status | Before showtime; partial OK.[3] |