Problema em persistir muitos objetos

Pessoal,

Estou importando para o meu sistema um arquivo CSV, cada linha representa um objeto, então eu itero o arquivo, instancio, populo e salvo os objetos. Quando chego mais ou menos no objeto 5000 o sistema para, já vi "timeout" e limite de memória mas não adiantou muita coisa! Utilizo o Postgres, alguma sugestão?

Usa SQL direto.


Yii::app->db->createCommand(<meu SQL>)->execute();

Não lembro bem, fiz de cabeça, mas é algo por ai …

É, eu havia pensado nisso, mas não queria perder a molezinha das rules… vou seguir seu conselho!

Um abraço e obrigado!

saquei … mas qual erro que dá? Ou não dá erro?

Esse é um dos problemas, não da erro, retorna 200 OK.

Estranho, muito estranho

Tenta comitar tb a cada 1000 registros pra ver se ele completa. Com o ActiveRecord mesmo.

Tenta fazer alguns testes com um arquivo menor e veja se ele importa tudo, tipo uns 1000 registros. Como não amostra a causa, talvez o problema não seja o ActiveRecord, o que vai fazer com que mudar pra SQL direto não resolva o problema exatamente(Apesar que, provavelmente vai ficar mais rápido a importação)

Com certeza a importação ficará mais rápida.

Tive um problema parecido ao fazer a instalação para testes de uma aplicação. Ao popular a base de dados com milhares de entradas geradas automaticamente, o instalador encontrava sempre um limite: ou a memória ou o tempo de execução. Quando mudei para SQL direto, não só ficou mais rápido como funcionou.

Mas o retorno com código 200 é muito estranho. Não há nada anormal nos logs da aplicação, do PHP e do servidor Web?

É pessoal, mudei algumas configurações do postgresql, aumentei ainda mais a memória do PHP e pasme, funcionou!.. Aparentemente ainda era memória. Muito obrigado pela ajuda!

curiosidade

Qual era os seus limites de memoria anteriores e atuais?

O que você pode fazer, se tiver usando foreach() para inserir no seu banco de dados, usar os flush() do PHP que ele vai liberando memoria a cada inserção no banco de dados.

http://br.php.net/flush