Belki 10 kere yazmısımdır.Eager loading developeri cok rahatlatan bir kullanım şeklidir evet doğrudur kullanıyoruz.
Ancak nasıl çalıştığını bilmiyorsanız başınıza bela açar.
Basitce ornekleyeyim.
1- products (ürünleriniz) var.
2- bu ürünlere bağlı items (öğeleriniz) var
Ürünleri normal çektiğinizde her ürüne bağlı ilişkiyi kullanarak ürün sayısı kadar sorgu yapmanız gerekir normal kullanımda,böylelike itemları her urunun altına gruplayabilirsiniz.
20 urun icin (n +1) kuralı ile 20+1 = 21 query gerektirir.Bu kullanım da çok sorgu var uygulamanın durumuna göre gereksiz gibi durabilir ve gereksiz her query maliyet demektir.Evet haklısınız..
Eager Loading burada yardımınıza koşar.Urunler sorgunuz icin : product::with(items)->pagine(20); gibi bir sorgu kullanırsanız sadece 2 sorgu yapar bu.
select * from products;
select * from items whereIn (product_code,product_code,product_code....);
2 sorgu ile kurtulursunuz ve cokda güzel olur.
Ancaaaaaakkkkk.....Dikkat edilmesi gereken husus su.
Paginate yapmaz bu eager loading.
Kullanıcının tüm orderlarını eager loading ile aldıgınızda bu sefer kaynak tüketimi ile karsı karsıya kalacaksınız.
Bir anda 10 binlerce orderi bir anda veren bir result set ile karsı karsıya kalacaksınız.
Mesele bu işte..Kullanıcının tüm takipcilerini vermek icin kolay diye eager loading kullanmayın.
Hele hele api yazıyorsanız buna cok dikkat etmeniz lazım.Çarşaf gibi uzun, bir de indexleri yalnıs datayı response etmeye kalktıgınızı dusundugunuzde..Database iops tan threshold alarmı cakmış ve artı coktaaaannnn bangır bangır bağırmış ve kendini kapatmış olur...
Sonuc olarak:talep edilmeyen datayı vermemelisiniz.Bir kaynak 10 larca ayrı kaynagın verisini tasımamalı.
Saglıcakla