بينما كنت أصمم نظام حجز تذاكر السينما كرد على سؤال المقابلة، اقترحت خدمتين صغيرتين - خدمة انتظار التذاكر (المسؤولة عن حجز المقاعد حتى يتم الدفع) و
خدمة حجز التذاكر (المسؤولة عن الحجز) مع قواعد البيانات الفردية الخاصة بهم.

قاعدة البيانات هي MySQL مع بنية الرقيق الرئيسية. العقدة الرئيسية لطلبات الكتابة

لقد احتفظت بـ showId+seatNumber كمفتاح أساسي في طاولة الانتظار وطاولات الحجز.

الآن يتم نشر كل خدمة ميكروسيرفيسية في عقد متعددة.

بافتراض السيناريو أنه بالنسبة لفيلم فائق النجاح، يمكن أن يكون هناك أكثر من 100 طلب متزامن يحاول حجز نفس المقعد، فسيحصل طلب واحد على الأفضلية وسيفشل الآخرون مع DuplicateKeyException.
وعلى نفس المنوال يمكن أن يكون هناك المزيد من الطلبات المتزامنة،

 على سبيل المثال، بالنسبة للمقعد A-112 - تم الحصول على 100 طلب - تم تنفيذ طلب واحد عبر 99 طلبًا فاشلاً
للمقعد B-112 - تم الحصول على 100 طلب - تم تنفيذ طلب واحد من خلال 99 طلبًا فاشلاً
للمقعد C-112 - تم الحصول على 100 طلب - تم تنفيذ طلب واحد من خلال 99 طلبًا فاشلاً
للمقعد D-112 - تم الحصول على 100 طلب - تم تنفيذ طلب واحد من خلال 99 طلبًا فاشلاً
للمقعد E-112 - تم الحصول على 100 طلب - تم اجتياز 99 طلبًا واحدًا فاشلاً.

لذلك في عقدة كتابة معينة في قاعدة البيانات - حصلت على 500 طلب، منها 5 طلبات ناجحة والباقي 495 أدى إلى DuplicateKeyException. وهذا يمكن أن يحدث في كثير من الأحيان.

هل يمكن لهذا التصميم أن يتسبب في تعطل قاعدة البيانات؟ مطالبة المشاركة
{"evolved_from": null, "kind": "human", "source": "ewof/sharegpt-instruct-unfiltered-deduped"}