PHP veritabanı çoğaltması için bir araç yazdım. Bu para cezası çalışıyor ama bir sorun var:
Ben bu uygulama için çok önemlidir herhangi bir RDBMS, bağımsız tutmak için farklı veritabanlarına bağlanmak için PDO kullanıyorum.
Araç, belirli türleri ve diğer bazı şeyler dönüştürmek için nasıl karar masalarda bazı analiz yapar. Sonra oldukça fazla yapacak bir "SELECT * FROM <tablename>
" kopyalanması gereken satırları almak için. Sonuç kümeleri (bazı masalarda yaklaşık 50k satırlar) oldukça büyük.
Bir while
döngü ayarlanan sonucu üzerinde o dolaşır sonra PDOStatement::fetch();
, bazı tür dönüşüm ve kaçan, bir INSERT
deyimi oluşturur ve beslemeleri olmadığını hedefe veritabanı.
Bütün bu bir istisna ile güzel çalışıyor. Sonuç kümesinden satırları, bir ata zaman, getirilirken, PHP süreci daha fazla bellek yiyor tutar. Benim assuption tüm sonuç kümesi işlenir kadar PDO bellekte zaten işlenmiş satır tutar olmasıdır.
Ben de aracı bir sonraki, bellek tüketimi bir masa ve gelirleri ile bittiğinde benim teoriyi destekler biçimde, anında düşer, o abserved.
I'm NOT keeping the data in PHP variables! I hold just one single row at any given moment for processing, so that's not the problem.
Şimdi soru: bellekteki tüm verileri tutmak için değil PDO'yu zorlamak için bir yolu var mı? Ben sadece bir defada bir satır işlemek, bu yüzden tüm bu çöp tutmak için kesinlikle gerek yoktur. Ben gerçekten bu şey üzerinde daha az bellek kullanmak istiyorum.