Durum durumu
Shanashel, Suudi Arabistan'ın büyük emlak listeleme platformlarından birini işletiyor. Mülk araması üründür: yavaşsa, başka hiçbir şey önemli değildir. Projeye katıldığımızda, karmaşık filtreli aramalar 3+ saniye sürüyordu. Temel neden faktörlerin bir kombinasyonuydu. Mülk konum verileri metin sütunları olarak depolanıyordu. Yaygın filtre kombinasyonları bileşik indekslerle kapsanmıyordu. Mülk konumunda MySQL uzamsal indeksleri ekledik. Arama hacmine göre en iyi 12 filtre kombinasyonuna bileşik indeksler eklendi. Popüler aramalar için Redis önbellekleme ikinci özdeş aramanın önbellekten aninda dönmesi anlamına gelir. Medya işleme ayrı bir sorundu. Acenteler, fotoğraf işleme tamamlanana kadar yükleme sayfasında bekletiliyordu. Tüm medya işlemeyi arka plan çalışanlarına taşıdık. Yükleme endpoint'i aninda döner. İşlem tamamlandığında ilan otomatik olarak yayına geçer.
Ne değiştirmeliydi
Birden fazla eş zamanlı filtreli mülk araması karmaşık sorgularda 3+ saniye sürüyordu — terk eşiğinin üzerinde. Coğrafi sorguların uzamsal indeksi yoktu, konum filtrelemesinde tam tablo taramalarına neden oluyordu. Mülk fotoğrafı yükleyen acenteler, işlem tamamlanana kadar 60-90 saniye boyunca sayfada bekletiliyordu, ardından manuel olarak yayınlamak zorundaydı.
Ne değiştik
Konum sütunlarında milisaniyeler içinde coğrafi sorguları mümkün kılan uzamsal indeksler. Arama hacmine göre en iyi 12 filtre kombinasyonunda bileşik indeksler. Tekrarlanan popüler aramalar için Redis önbelleği (5 dakikalık TTL). Arka plan medya işleme çalışanları: yükleme anında döner, işleme asenkron, ilan tamamlanınca otomatik yayınlanır.
Müşteri ne kazandı
- 01 Uzamsal indeksleme — milisaniyeler içinde coğrafi arama
- 02 Karmaşık çok filtreli arama tutarlı olarak 500ms altında
- 03 Async medya işleme — acenteler hiç beklemez
- 04 İlanlar medya hazır olduğunda otomatik yayınlanır