У меня возникают проблемы с пакетной вставкой объектов в базу данных с использованием symfony 1.4 и doctrine 1.2.
Моя модель имеет определенный объект, называемый "сектор", каждый из которых имеет несколько объектов типа "Cupo" (обычно от 50 до 200000). Эти объекты довольно малы; просто короткая строка идентификатора и один или два целых числа. Всякий раз, когда группа Секторов создается пользователем, мне нужно автоматически добавлять все эти экземпляры "Cupo" в базу данных. Если что-то пойдет не так, я использую транзакцию доктрины, чтобы откатить все. Проблема в том, что я могу создать только около 2000 экземпляров, прежде чем у php закончится нехватка памяти. В настоящее время он имеет предел в 128 МБ, которого должно быть более чем достаточно для обработки объектов, которые используют менее 100 байт. Я попытался увеличить лимит памяти до 512 МБ, но php все еще падает, и это не решает проблему. Я правильно делаю пакетную вставку или есть лучший способ?
Здесь ошибка:
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
И вот код:
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;
    }
И снова этот код отлично работает для менее чем 1000 объектов, но ничего больше 1500 терпит неудачу. Спасибо за помощь.
