SevkiBilge

PHP ile büyük veri setlerini işlerken performans sorunu yaşıyorum

RustuKaya
· 4 gün önce · 1 görüntülenme
Arkadaşlar merhaba, uzun süredir PHP ile çalışıyorum ama son zamanlarda büyük veri setleriyle uğraşırken ciddi bir performans sorunu yaşıyorum. Özellikle 100 bin satırın üzerindeki CSV veya JSON dosyalarını işlerken scriptlerim ya zaman aşımına uğruyor ya da bellek limitini aşıyor. Normalde foreach döngüleriyle ve array işlemleriyle hallediyordum ama bu boyutlarda işler çığırından çıkıyor. Mesela bir dosyayı okuyup her satırı veritabanına insert etmeye çalıştığımda ram tüketimi 256 MB'ı bile aşıyor. Sizce bu işi nasıl optimize edebilirim? Belki chunk kullanarak parçalara bölmek işe yarar diye düşünüyorum ama performans artışı tam olarak nasıl sağlanır emin değilim.

Ayrıca veriyi döngü içinde işlerken her satırda veritabanına ayrı ayrı sorgu göndermek yerine toplu insert (batch insert) denedim. Bu biraz yardımcı oldu ama yine de büyük setlerde işlem süresi çok uzuyor. Acaba PDO'nun prepared statement özelliğiyle bu işi daha da hızlandırabilir miyim? Yoksa PHP'nin bellek yönetimiyle ilgili daha farklı bir yaklaşım mı izlemeliyim? Örneğin generator kullanımı veya yield ile veriyi akışkan hale getirmek bana avantaj sağlar mı? Tecrübesi olan arkadaşlar varsa yöntemlerini duymak isterim.

Bir de fark ettim ki veritabanına yazma işlemi sırasında MySQL'in kendisi de darboğaz yaratabiliyor. İndeksleme veya sorgu optimizasyonuyla ilgili bir öneriniz var mı? Özellikle büyük INSERT sorgularında InnoDB motorunu kullanıyorum ama yine de yavaş kalıyor. Belki LOAD DATA INFILE gibi alternatifler daha hızlı olabilir mi? Yoksa redis gibi bir cache katmanı eklemek mi daha mantıklı? Siz benzer sorunlarla karşılaştınız mı, çözüm için hangi yöntemleri kullandınız?
0 yanıt

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

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