Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Symfony:Fixação de dados do Doctrine:como lidar com arquivos csv grandes?


Duas regras a serem seguidas ao criar grandes importações em lote como esta:

  • Desabilitar log SQL:($manager->getConnection()->getConfiguration()->setSQLLogger(null); ) para evitar grandes perdas de memória.

  • Lave e limpe com frequência em vez de apenas uma vez no final. Eu sugiro que você adicione if ($i % 25 == 0) { $manager->flush(); $manager->clear() } dentro do seu loop, para liberar a cada 25 INSERTs.

EDITAR: Uma última coisa que esqueci:não mantenha suas entidades dentro de variáveis ​​quando não precisar mais delas. Aqui, em seu loop, você só precisa da entidade atual que está sendo processada, portanto, não armazene a entidade anterior em um $coordinatesfrcity variedade. Isso pode levar a um estouro de memória se você continuar fazendo isso.