Skip to content

Movie Ticket Booking System (LLD Deep-Dive)

BookMyShow বা মুভি টিকিট বুকিং সিস্টেমের ক্ষেত্রে প্রধান চ্যালেঞ্জ হলো একই সিট যেন দুইজন বুক করতে না পারে (Concurrency)।


১. রিকোয়ারমেন্টস (Requirements)

  • বিভিন্ন শহরে একাধিক থিয়েটার থাকবে।
  • থিয়েটারে একাধিক হল/স্ক্রিন থাকবে।
  • প্রতিটি স্ক্রিনে আলাদা আলাদা মুভি শো চলবে।
  • সিট ক্যাটাগরি (Gold, Silver, Platinum) এবং সিট ম্যাপ থাকবে।
  • একটি নির্দিষ্ট সময় পর্যন্ত সিট লক করে রাখা যাবে।

২. মেইন ক্লাস এবং এনটিটি

  • Movie: নাম, ল্যাঙ্গুয়েজ, ডিউরেশন।
  • Theater: নাম, লোকেশন, স্ক্রিন লিস্ট।
  • Screen: সিট ম্যাপ।
  • Show: নির্দিষ্ট মুভি, নির্দিষ্ট সময়ে কোনো একটি স্ক্রিনে।
  • Booking: ইউজার, শো, সিট লিস্ট এবং পেমেন্ট স্ট্যাটাস।
  • Seat: সিট নম্বর এবং টাইপ।

৩. কনকারেন্সি এবং লকিং মেকানিজম

টিকিট বুকিংয়ের সময় সবচেয়ে গুরুত্বপূর্ণ বিষয় হলো সিট ইনভেন্টরি ম্যানেজমেন্ট।

  • Pessimistic Locking: যখন ইউজার সিট সিলেক্ট করে পেমেন্ট পেজে যাবে, তখন কিছু সময়ের (ধরা যাক ৫ মিনিট) জন্য ওই সিটগুলো লক করে দেওয়া হয় যাতে অন্য কেউ ওই সময় বুক করতে না পারে।
  • Redis Locks: ডিস্ট্রিবিউটেড লকিংয়ের জন্য Redis ব্যবহার করা যেতে পারে।

৪. ডিজাইন প্যাটার্ন

  • Singleton: টিকিট বুকিং ইঞ্জিন বা পেমেন্ট গেটওয়ের জন্য।
  • Strategy: বিভিন্ন ডিসকাউন্ট বা অফার অ্যাপ্লাই করার জন্য।
  • Observer: বুকিং কনফার্ম হলে এসএমএস বা ইমেইল পাঠানোর জন্য।

৫. ক্লাস ডায়াগ্রাম (Mermaid)

mermaid
classDiagram
    class Theater {
        +String name
        +List shows
    }
    class Show {
        +Movie movie
        +Screen screen
        +DateTime startTime
        +Map seatStatus
    }
    class Booking {
        +User user
        +Show show
        +List seats
        +BookingStatus status
    }
    Theater "1" *-- "*" Show
    Show "1" -- "1" Booking

Released under the MIT License.