Chunk: fragmentando múltiples registros

10/17

Lectura

En la clase anterior aprendimos a usar el modelo Project para traer datos de la tabla projects de una manera bastante simple, ahora imagina que esta tabla creció en registros y ahora se tarda mucho tiempo trayendo, por ejemplo, 900 registros, el rendimiento de la aplicación baja, se puede morir el servidor y ya no logramos tener todos los datos.

Para evitar este problema tenemos un comando que nos va a traer los registros por secciones, este es chunk, al cual le pediremos un bloque menor de registros y fragmentará la cantidad de valores hasta tenerlos todos.

Esto lo logramos implementando un Closure que procesará los datos en los bloques que van llegando.

Project::chunk(200, function ($projects) {
    foreach ($projects as $project) {
        //Aquí escribimos lo que haremos con los datos (operar, modificar, etc)
    }
});

Esto lo podemos leer de la siguiente manera:

Traer del modelo Project (que traduce a la tabla projects) bloques de 200 registros y guardarlos temporalmente en la variable $projects como un array, luego recorre este array con los 200 registros y por cada uno ejecuta lo que está dentro del foreach, repite esta acción hasta que lleguen todos los registros de Project.

En la siguiente imagen puedes ver cómo tenemos un gran lote de datos y van cayendo microlotes más pequeños que se procesan y finalmente llegan a su destino final, todo este proceso se ejecuta de manera cíclica hasta que se procesan todos los datos.

image15.jpg

De esta manera, estamos salvando el rendimiento y la memoria de nuestra aplicación cuando necesitemos operar con grandes cantidades de información desde la base de datos.

Aportes 28

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Los chunks son muy importantes cuando trabajas con cantidades de datos enormes y necesitas traer demasiados datos,sin duda creo que es una de las mejores implementaciones de Laravel.

Chunk es posible gracias a los generadores de PHP y yield por si gustan adentrarse un poco más en el cómo funciona

https://www.php.net/manual/en/language.generators.overview.php

Genial curso, el mejor hasta entonces, falta actualizarlo con la version nueva de laravel, sin embargo opto mas por estos cursos por escrito es diferente y muy facil de volver a él y seguir las indicciones.
Por fin me quedo claro el concepto de laravel y su funcionamiento.

Esto es algo nuevo que no tenía conocimiento de ello. Muchas Gracias por el aporte!!

Otra opción es usar limit

Project::select('*')
    ->limit(200)
])->get();

La forma de explicarlo es tan sencillo que lo hace entendible, sin importar las versiones futuras de laravel que salgan, ese es el detalle del curso. (Apréndete la definición y lo básico… lo demás es puro …)

Chunk no permite limitar la cantidad de resgistro en nuestra aplicacion

Chunk es una gran alternativa para procesar grandes volúmenes de información, sin tener que saturar el procesamiento del servidor y de la base de datos.

conocimiento nuevo adquirido

Muy interesante, siempre tuve la duda de como hacer cuando tenemos muchos registro y queremos alterar sin comprometer los recursos de nuestro server.

        $projects = Project::all();

        return collect($projects)->chunk(200);

woow que bien que se den ejemplos con los que nos podemos enfrentar adelante como traer 900 registros o más, no sabía el uso de chunk junto con su closure ahora nunca lo olviadaré :3

esto si no lo conocia 😃 lo que se aprende dia a dia

Además del Chunk, ¿Existe otra forma?

Un tema muy imporante para ternerlo desde el inicio en las tablas que van a ir creciendo, pero me causo mucha gracia el siguiente texto “se puede morir el servidor”,

Chunk es muy útil cuando trabajas con grandes cantidades de registros. Optimiza muchísimo el rendimiento.

Los chunks los empleamos mucho más que todo para reportes e informes que necesitemos desarrollar es una excelente práctica para este tipo de cosas.

Mi duda es donde aplicamos el chunk, en el controlador? o en la vista?

Que clase tan interesante

Chunk es una herramienta magnifica que se utiliza para la generación de reportes con gran cantidad de datos, en importaciones con miles de registros. Y muy útil cuando se combina con el acceso a campos de relaciones del modelo.

Excelete detalle, para optimizar la recuperación de datos de forma seccionada.

Gracias, Interesante dato de ahora en adelante lo implementare.
https://laravel.com/docs/5.0/eloquent#basic-usage

que buenas clases!!! ahora a ponerlo en practica

Excelente

Muy interesante este tema de los chunks, siempre me preguntaba como recuperar de una forma mas optima todos los datos de una tabla. 👏👏

Muy bien. Gracias.

Entendido.

Muy buenas clases, muy prácticas!!