Ben Symfony 1.4 ve doktrin 1.2 kullanarak bir veritabanına nesneleri toplu ekleme ile ilgili sorunlar yaşıyorum.
Benim modeli (genellikle 50 ila 200.000 kadar değişen) tip "Cupo" çeşitli nesneler vardır, her biri "Sektör" denilen nesnenin belirli bir tür vardır. Bu nesneler oldukça küçük; sadece kısa bir tanımlayıcı bir dize ve bir ya da iki tamsayı. Sektörlerin bir grup kullanıcı tarafından oluşturulan zaman, otomatik olarak veritabanına "Cupo" tüm bu örneklerini eklemek gerekir. Bir şey yanlış giderse durumda, her şeyi geri almak için bir doktrin işlem kullanıyorum. Sorun php bellek dolmadan sadece yaklaşık 2000 örnekleri oluşturabilirsiniz olmasıdır. Bu şu anda az 100 bayt kullanmak nesneleri işlemek için fazlasıyla yeterli olmalıdır 128MB sınırı vardır. Ben 512 kadar hafıza limitini artırmak denedim, ama php yine çöker ve bu sorunu çözmüyor. Ben doğru toplu ekleme yapıyor ya da daha iyi bir yolu var muyum?
İşte hata var:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /Users/yo/Sites/grifoo/lib/vendor/symfony/lib/log/sfVarLogger.class.php on line 170
Ve burada kod:
public function save($conn=null){
$conn=$conn?$conn:Doctrine_Manager::connection();
$conn->beginTransaction();
try {
$evento=$this->object;
foreach($evento->getSectores() as $s){
for($j=0;$j<$s->getCapacity();$j++){
$cupo=new Cupo();
$cupo->setActivo($s->getActivo());
$cupo->setEventoId($s->getEventoId());
$cupo->setNombre($j);
$cupo->setSector($s);
$cupo->save();
}
}
$conn->commit();
return;
}
catch (Exception $e) {
$conn->rollback();
throw $e;
}
Bir kez daha, bu kod az 1000 nesneler için çalışıyor, ama 1500 daha büyük bir şey başarısız olur. Yardımlarınız için teşekkürler.