Como hacer Bulk Insert con Doctrine DBAL

Blog Single

Los ORM te dan por un  lado muchas ventajas, pero por otro lado lo que ganas en sencillez, en abstracción  y en encapsulación lo pierdes en  rendimiento. Hoy mismo me he encontrado con un problema de rendimiento al realizar un bulk insert dentro del contexto de una Request con Doctrine. Depende tu tipo de proyecto y necesidades, a veces hay que salirse fuera de los mandos del ORM y trabajar directamente contra nuestro sistema de base de datos.

Para ello vamos a conocer más profundo nuestro ORM. Doctrine está dividido en tres principales paquetes:

  • Common
  • DBAL (inclue Common)
  • ORM (incluye Common+DBAL)

El que nos interesa parte este artículo es el paquete DBAL. Esta pieza de la arquitectura contiene una capa de abstracción de acceso a base de datos situada encima de PDO cuyo objetivo es proporcionar una API que haga de puente entre los diferentes sistemas gestores de bases de datos. En la siguiente slide podéis ver los componentes de la arquitectura:

Slide obtenida de la presentación de Juan Ramón Laguardia

La necesidad que me ha surgido era realizar la inserción de una cantidad de registros altas.  Buscando distintas opciones para hacer un bulk insert de estas entidades y optimizar estas inserciones me he encontrado con la siguiente clase BulkInsertQuery que me ha resultado de gran utilidad y he reducido el tiempo de ejecución de mi insert masivo a través de la capa de ORM. Espero que os sea util y podáis aprovecharla como yo lo he hecho hoy:

Bulk Insert Query

Para utilizar esta clase debemos de instanciarla pasándole la conexión de Doctrine y el nombre de la tabla tal cual se encuentra en nuestro esquema. Se deben rellenar las columnas que queremos llenar en el insert y sus valores. Tras ejecutar serás feliz y verás como los tiempos de inserción se han reducido considerablemente.

Enjoy Progamming 😀

 

Nube de Tags

bulk insertdoctrineorm
Comparte el artículo si te ha resultado interesante: