Durum durumu
Dentalia, Latin Amerika'nın en büyük diş kliniği ağlarından birini işletiyor. Platformları üzerinden randevu aldığınızda 65+ klinik ve yüzlerce bireysel dişçiden gerçek zamanlı müsaitliği seçiyorsunuz. Eski sistemin rezervasyon akışının kalbinde bir yarış koşulu vardı. İki hasta aynı anda aynı doktorla aynı slotu rezerve etmeye çalıştığında — doruk randevu pencerelerinde yaygın bir durum — sistem her ikisi için de müsaitliği aynı anda kontrol ediyordu, ikisi için de slotun açık olduğunu buluyordu ve her iki rezervasyonu da onaylıyordu. Müsaitlik şemasını ve rezervasyon işlemini sıfırdan yeniden tasarladık. SELECT FOR UPDATE kötümser kilitleme: bir hasta rezervasyon başlattığında, slot işlem süresi boyunca veritabanı satır düzeyinde kilitlenir.
Ne değiştirmeliydi
Eş zamanlı rezervasyondaki yarış koşulları doruk saatlerde düzenli olarak çift rezervasyona neden oluyordu. İki hasta aynı slotu aynı anda rezerve ediyor, her ikisi de onay alıyor ve her ikisi de kliniğe geliyor. Hasta deneyimi hasarının yanı sıra, her olay manuel yeniden planlama ve klinik ekip üyesinin zamanını gerektiriyordu.
Ne değiştik
Şema yeniden tasarımı: müsaitlik program şablonlarından + istisna geçersiz kılmalarından hesaplanıyor (satır başına slot tablosundan değil). Rezervasyon işleminde kötümser kilitleme: slot ediniminde SELECT FOR UPDATE, tam süre boyunca tutulur. Şablon tabanlı müsaitlik sorguları daha hızlı çalışıyor ve herhangi bir sayıda kliniğe ölçekleniyor.
Müşteri ne kazandı
- 01 Kötümser DB kilitleme — yarış koşulları imkansız
- 02 Tek platformda 65+ klinik ve yüzlerce doktor
- 03 Şablon tabanlı müsaitlik — ölçekte temiz şema
- 04 Docker — geliştirmeden üretime tutarlı