drWeb Merhaba direkt konuya gireyim, bu tabloda created_at ' e indeks atanmış vaziyette son 7 günün kayıtlarını çekmem gerekiyor ve bunun performanslı çalışması gerekiyor.Cacheleme yapamıyorum çünkü tablo saniyede bir veri kaydı oluyor.Her sorguda güncel bilgiyi en performanslı şekilde almam gerekiyor.Bana ne önerirsiniz ?
beyondelayer drWeb Hocam ek olarak bildiğiniz farklı yöntemler varsa geçen incelemiştim Benchmark:: kullanarak kodun performansını kontrol edebilirsiniz.
mkeremcansev Sorguyu görmeden öneri vermek biraz zor olur ama cursor() ya da lazy() kullanabilirsiniz.
drWeb Örnek olarak bu sorguyu verebilirim. $example = ExampleTable::select([ 'group_id', 'created_at' ])->whereBetween('created_at', [$start_date, $end_date]) ->groupBy('group_id') ->orderBy('created_at', 'desc') ->get();
mkeremcansev drWeb Bu sorguda cursor() kullanarak ve kullanmayarak iki sorgu şeklinde Benchmark çalıştırabilir misiniz?
mgsmus drWeb group_id için de bir index lazım (hatta $table->index(['group_id', 'created_at']) şeklinde composite index), ayrıca created_at alanını bu şekilde select içinde alamazsınız. MAX(created_at) AS last_created_at gibi bir şey yapmanız lazım. Eğer son 7 gün için çok fazla kayıt gelmiyorsa performans problemi yaşayacağınızı sanmıyorum ama eğer çok fazla kayıt geliyorsa sayfalama yapmanız gerekebilir yoksa ram/cpu sıkıntısı çıkar.
drWeb mgsmus selam üstadım group_id de indeks var belirtmeyi unutmuşum fakat ben burada bir istatistik veriyorum bu yüzden sayfalama yapamıyorum.Son 7 günde bir hayli kayıt geliyor.Staging serverda arkadaşların belirttiği cursor() olayını deneme fırsatım hala olmadı onu deneyeceğim.
mgsmus drWeb Eğer gerçekten belleğe sığmayacak kadar veri geliyorsa ve sayfalama yapmak istemiyorsanız ayrı bir tabloda günlük istatistikleri önceden hesaplatıp, gün gün kaydedip, 7 günlük istatistiği o tablodan alabilirsiniz. Eğer almak istediğiniz veri binlerce, yüzbinlerce kayıt getiriyorsa, sayfalama da yapmak istemiyorsanız yapabileceğiniz bir şey yok. Diğer olasılıklar ise; bize yeterince bilgi vermediniz ya da yapmak istediğiniz şey aslında düşündüğünüz şey değil.