SevkiBilge

PHP ile büyük veri işleme: En hızlı yöntemler hangileri?

JaleYalvacMax
· 5 gün önce · 2 görüntülenme
Arkadaşlar selam, uzun süredir PHP ile çalışıyorum ve son zamanlarda büyük veri setleriyle uğraşmak zorunda kaldım. Özellikle 500 bin satırlık CSV dosyaları, API'den çekilen yüzbinlerce kayıt derken performans canımı sıkmaya başladı. Normal döngülerle işin içinden çıkmak imkansız hale geliyor, script ya zaman aşımına uğruyor ya da bellek hatası veriyor. Bu yüzden sizlere sormak istiyorum: PHP ile büyük veri işlerken hangi yöntemler en hızlı sonucu veriyor? Mesela generator kullanımı, chunking, ya da doğrudan veritabanı tarafında işlem yapmak mı daha mantıklı?

Kendi deneyimlerimden bahsedecek olursam, birkaç ay önce bir log dosyasını parse etmem gerekiyordu. İlk başta file_get_contents ile tüm dosyayı belleğe alıp işlemeye çalıştım, ama 2 GB'lık bir dosyada patladı tabii ki. Sonra fread ile parça parça okumaya geçtim ve işin içinden çıktım. Ama bu sefer de her parçayı işlerken döngü içinde regex kullanmak performansı düşürdü. preg_match gibi fonksiyonlar büyük veride gerçekten yavaşlıyor. Acaba alternatif olarak strpos veya substr gibi daha hafif fonksiyonlar mı kullanmalıyım? Ya da belki de işin tamamını veritabanına yükleyip SQL sorgularıyla halletmek daha doğru olur?

Bir de şu var: PHP'nin bellek yönetimi büyük veride kritik. unset ile değişkenleri temizlesem bile bazen bellek şişiyor, garbage collector'u zorlamak yetmiyor. Sizce bu gibi durumlarda Redis veya Memcached gibi ara katmanlar kullanarak veriyi parçalamak mantıklı mı? Yoksa direkt olarak iteratör desenleri mi daha verimli? Özellikle Symfony ya da Laravel kullananlar var mı, onların built-in chunk metodları iş görüyor mu? Deneyimlerinizi ve önerilerinizi merak ediyorum, çünkü bu konuda kafam hala çok karışık.
1 yanıt
UlkuTeksoyFan560
2 gün önce
PHP'de büyük veri işlerken generator kullanmak ve veriyi parça parça okumak en iyisi bence, belleği şişirmeden çalışmanı sağlıyor. Ayrıca array yerine SplFixedArray gibi yapılar da daha hızlı olabiliyor, özellikle döngülerde farkı hissediyorum.

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