Mysql
 sql >> Database >  >> RDS >> Mysql

dottrina2 - Come migliorare l'efficienza dello scarico?

Lo stai facendo bene:è solo lento, perché l'astrazione aggiunta dell'ORM significa che non puoi apportare il tipo di ottimizzazione che desideri.

Detto questo, EntityManager rallenta con transazioni così grandi. Se non ti servono assolutamente tutti in una grande transazione, probabilmente puoi ottenere un codice più performante svuotando() e poi cancellando() l'EM ogni 20-200 iterazioni del tuo ciclo.

Se ciò non ti offre prestazioni sufficienti, l'unica alternativa che mi viene in mente è ripristinare il codice personalizzato che esegue SQL personalizzato direttamente sul tuo DBMS.

So che questa non è un'ottima risposta, ma almeno posso dirti che non sei pazzo.

------ modifica ------

Dall'articolo ufficiale di Doctrine2 su Elaborazione batch :

Inoltre, c'è una differenza significativa nelle prestazioni quando si utilizza telecomando e locale il database come sovraccarico dell'invio di ogni query al server remoto è piuttosto grande. L'overhead è molto più basso durante l'utilizzo del database locale grazie alle transazioni e alle ottimizzazioni del DB. (es. 70sec ridotti a 300ms nel caso dell'esempio nella domanda)