Ben php işlemek için gereken büyük bir düz dosya var. Mysql bir normalize veritabanına düz bir dosya dönüştürmek. Düz bir dosya birkaç milyon hatları vardır.
Düz dosya alınırken ben aslında bir ORM sistemi kullanmaya çalıştı. Hatta nesnelerin dikkatli serbestleştirilmesi ile bu tasarım ile büyük bir php bellek sızıntısı sorunu vardı. Ben yeterli bellek olduğunu sağlamış olsa bile, komut benim masaüstünde çalıştırmak için yaklaşık 25 gün sürer.
Ben yükünü dışarı çıkardı ve doğrudan mysql komutları oluşturmak için komut dosyası yeniden yazdı. Bu Mysql ne son id girilen veri noktaları arasındaki ilişkileri yapmak için olduğu gibi bana gerekli beri Ben tasarım AUTO INCREMENT kaldırıldı. Ben sadece yerine veritabanı kimlikleri için küresel bir sayacı kullanmak ve herhangi aramalarını yapmak asla, sadece ekler.
Ben unix tekrar ve tekrar bir dosya işaretçisi kullanarak ilişkili bir bellek yükü olduğundan, küçük dosyalar yerine büyük bir bir sürü yapmak için komutu bölünmüş kullanın.
Bu iyileştirmeleri kullanarak yaklaşık 6 saat çalıştırmak için ithalat komut dosyası var (onlar başkası yardımcı umuyoruz).
Benim masaüstünde göre 5 kat daha fazla RAM ve yaklaşık 5 kat daha fazla işlemci gücü ile sanal bir örneği kiraladı ve tam olarak aynı hızda gittiğini fark ettim. Sunucu işlemi çalışır ama CPU döngülerini ve yedek RAM bulunuyor. Belki de sınırlayıcı faktör diski hızıdır. Ama RAM'i var. Ben bir şekilde belleğe dosyaları yükleyerek denemek mi? Büyük dosyaları işleme php komut satırı komut daha optimizasyonu için herhangi bir öneri bekliyoruz!