SevkiBilge

PHP ile dinamik rapor oluştururken hafıza sorunu nasıl çözülür?

FahriSahinPlus
· 4 gün önce · 1 görüntülenme
Arkadaşlar merhaba, uzun zamandır PHP ile çalışıyorum ama son zamanlarda büyük veri setleriyle dinamik raporlar oluştururken ciddi bir hafıza sorunu yaşıyorum. Özellikle 100 bin satırı geçen verileri MySQL'den çekip PDF veya Excel'e dönüştürmeye çalıştığımda "Allowed memory size exhausted" hatası alıyorum. Normalde script'in hafıza limitini artırmak (ini_set('memory_limit','512M')) işe yarıyor ama bu sefer de sunucuda kaynak tüketimi patlıyor, hatta bazen zaman aşımına uğruyor. Sizce bu tür durumlarda hafıza sorununu kökten çözmek için nasıl bir yaklaşım izlemeliyim? Yoksa veriyi parçalara bölüp işlemek mi daha mantıklı?

PhpSpreadsheet veya TCPDF gibi kütüphanelerle çalışırken tüm veriyi bir anda belleğe yüklemek yerine, satır satır işleyip çıktıya yazdıran bir yapı kurmayı düşünüyorum. Örneğin, MySQL'den LIMIT ve OFFSET kullanarak sayfa sayfa veri çekmek ve her seferinde rapora eklemek. Ama bu sefer de dosyanın tutarlılığı bozulur mu, yoksa bu yöntem işe yarar mı? Deneyen var mı aranızda? Ayrıca, bu yöntemde rapor oluşturma süresi uzuyor, onu da optimize etmek için ne gibi püf noktaları kullanıyorsunuz?

Bir de alternatif olarak, veriyi CSV gibi daha hafif formatlarda dışa aktarmayı düşündüm ama proje gereği PDF çıktısı şart. Belki de sunucu tarafında bir kuyruk sistemi (örneğin RabbitMQ veya veritabanı tabanlı) kurup raporları arka planda asenkron oluşturmak daha sağlıklı olabilir mi? Bu konuda tecrübesi olan varsa, özellikle büyük ölçekli projelerde hangi yöntemi tercih ettiklerini merak ediyorum. Kendi çözüm önerilerinizi veya yaşadığınız benzer sorunları paylaşırsanız sevinirim, çünkü bu hafıza sorunu gerçekten can sıkıcı bir hal almaya başladı.
0 yanıt

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

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