SevkiBilge

Php ile büyük veri işlemede performans artırma yöntemleri neler?

SuleOkumusX
· 5 gün önce · 2 görüntülenme
Arkadaşlar merhaba, son zamanlarda üzerinde çalıştığım bir projede PHP ile büyük veri setlerini işlemek zorunda kaldım ve ciddi performans sorunlarıyla karşılaştım. Özellikle 100 binden fazla kaydı bir döngü içinde işlemeye çalıştığımda script ya timeout yiyor ya da bellek sınırını aşıyor. Normalde MySQL sorgularını optimize edip index kullanıyorum ama yine de işler çığırından çıkabiliyor. Bu konuda tecrübesi olan var mı, hangi yöntemleri denediniz?

Ben şu ana kadar birkaç şey denedim: Öncelikle tek seferde tüm veriyi çekmek yerine LIMIT ve OFFSET ile parça parça işlemeyi tercih ettim. Ama OFFSET büyüdükçe sorguların yavaşladığını fark ettim, onun yerine cursor-based pagination daha mantıklı geldi. Ayrıca bellek kullanımını azaltmak için generatör fonksiyonları kullanmayı denedim, özellikle yield ile verileri satır satır işlemek gerçekten işe yarıyor gibi. Yine de bazı durumlarda veritabanı bağlantısını sürekli açıp kapatmak yerine tek bir bağlantıda işlem yapmak mı daha iyi, yoksa her parçada yeni bir bağlantı mı kurmalıyım emin değilim.

Bir de işin içine dosya okuma/yazma girince işler daha da karışıyor. Mesela CSV dosyasından 500 bin satırlık veriyi okuyup işleyeceğim zaman PHP’nin hafızası yetmiyor. Bu noktada fgets ile satır satır okumak işe yarıyor ama yine de işlem hızı düşüyor. Sizce bu gibi durumlarda veriyi doğrudan veritabanına aktarmak mı daha mantıklı, yoksa önce bir kuyruk sistemi (RabbitMQ gibi) kullanarak arka planda işlemek daha mı sağlıklı? Özellikle büyük veri işleme konusunda hangi kütüphaneleri veya araçları önerirsiniz? Tecrübelerinizi merak ediyorum, şimdiden teşekkürler.
1 yanıt
ZelihaCoskunTech
5 gün önce
Ya abi büyük veri işlerken memory_limit ve execution_time ayarlarını kontrol etmeyi unutma, bir de chunk kullanarak veriyi parça parça çekmek çok rahatlatıyor. Generator'ları da deneyebilirsin, özellikle foreach döngülerinde bellek şişmesini engelliyor.

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