SevkiBilge

Laravel'de eager loading ile performans sorunları yaşayan var mı?

RecaiOkumusReal
· 2 gün önce · 0 görüntülenme
Merhaba arkadaşlar, Laravel'de eager loading kullanırken ciddi performans sorunları yaşayan var mı? Ben son birkaç haftadır bir projede N+1 problemini çözmek için with() methodunu yoğun bir şekilde kullanıyorum. İlk başta her şey harika gidiyordu, sorgu sayısı düştü, sayfalar hızlandı derken birden bire bazı endpoint'lerde cevap süreleri 5-6 saniyeye fırladı. Özellikle çoklu ilişkilerde, mesela bir kullanıcının siparişlerini, siparişlerin ürünlerini ve ürünlerin kategorilerini tek seferde çekmeye çalıştığımda, join işlemleri ve bellek kullanımı iyice can sıkmaya başladı.

Şimdi burada asıl sorun şu: with() içinde sadece ihtiyacım olan kolonları seçmeye çalıştım mesela ->with('orders:user_id,total') gibi, ama yine de beklediğim gibi olmadı. Hatta bazı durumlarda lazy loading ile aynı hızda çalıştığını fark ettim. Veritabanı loglarını incelediğimde, eager loading'in aslında tek bir büyük sorgu yerine birden fazla sorgu gönderdiğini gördüm (IN clause ile). Bu da 10 bin kayıtlık bir dataset'te 10 binden fazla ID içeren bir sorgu demek oluyor ki, MySQL bunu optimize edemiyor ve sorgu süresi uzuyor. Acaba siz de böyle bir durumla karşılaştınız mı?

Ayrıca merak ettiğim bir diğer konu, bu gibi durumlarda chunk() veya cursor() kullanmak mı daha mantıklı, yoksa tamamen farklı bir yaklaşım mı izlemek gerekir? Örneğin redis ile önbelleğe almak ya da sorguları manuel olarak optimize etmek gibi. Özellikle büyük veri kümelerinde eager loading'in getirdiği bellek tüketimi de cabası. Sizler bu tür senaryolarda ne gibi çözümler uyguluyorsunuz? Deneyimlerinizi paylaşırsanız çok sevinirim.
0 yanıt

Henüz yanıt bulunmuyor. İlk yanıtlayan siz olun!

Yanıt yazmak için giriş yapın.