MySQL Kayıtları hk.
Merhaba Arkadaşlar,
Sizden bir fikir bir bilgi almak istiyorum.
Elimde bir adet db var bunda 67.milyon küsür kayıt var.(bir adet tabloda)
Bu satır satır tutulan kayıtlara müşteri kodu ataması yapacağım fakat döngüye koysam belli süre sonra patlıyor.
Bu mevcut kayıtları nasıl hepsine müşteri kodunu sağlıklı bir şekilde atarım?
Bu arada her kayıt kendine özel müşteri kodu var sistemde benim amacım tabloda hangi satır hangi müşteriye ait eşleştirmek istiyorum ve tablo her gecen gün daha fazla büyüyor.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (7)
set_time_limit(0); komutunu kullanarak belli bir süre sonra durmasını engelleyebilirsin. Ayrıca bir linux sunucu üzerinde çalışıyorsan aşağıdaki komut ile arkaplanda açık kalmasını sağlayabilirsin:
sudo nohup php /yol/script.php >/dev/null 2>&1 &
Bu komut ile arkaplanda çalışmasını sağlarsın fakat her 2 durum içinde set_time_limit ile zaman sınırını kaldırman gerekiyor.
eğer belli başlı ayırt edici bir kolon varsa update sorgusunu join ile yazıp tek seferde halledebilirsin:
örnek kodlar var bu adreste:
https://stackoverflow.com/questions/11709043/mysql-update-column-with-value-from-another-table
Diyelim ki elinde 10K müşteri bilgisi ve ve kodları var. Bu müşterilerin toplam sipariş kayıtları 67M. Yani sen 67M kayıt döndürmeyeceksin, sadece müşteri sayın kadar kayıt döndürüp, her müşteride binlerce kaydı güncelleyeceksin.
Şuan buna benzer bir yöntem ile işlem yaptırıyorum.
Her 5 dakikada bir crontab te çalıştırıyorum gidiyor kayıtları okuyor ve hangi kayıt hangi müşteriye ait ise bilgiyi alıp direk müşteri kodunu tabloya kopyalıyor.
Ama bu böyle sürerse çok işim var demektir.
Biraz PHP kodu bir de cronjob ile çözebilirsiniz. Ne kadar aralıklarla yapacağınızı belirleyin, php dosyasını ilk açtığınızda atıyorum 1-100000 arası güncellensin. bu 100000 sayısını bir json veya text dosyasına kaydedin. Sayfa ikinci defa açıldığında dosyadaki değere bir 100000 daha ekleyip yine ikisi arasındaki veriyi güncellesin. Taa ki bitene kadar. Bu dosyayı da bir cronjob a koyun 2 dakika aralıklarla o kendisi halletsin.