Cara Get Big Data Pada Laravel Dengan Chunk – Haloo semuanya, Assalaamualaikum wr wb..
Sebelumnya kita sudah pernah membahas tentang 27 Trik Belajar Eloquent Pada Laravel..
Kali ini kita akan mencoba salah satu trick lagi pada laravel yang mungkin jarang diketahui oleh banyak pengguna nya.. Yaitu metode chunk..
Ketika dalam suatu project kita sudah memiliki database yang berukuran sangat besar, anggap saja terdapat 1 juta records, kemudian kita ingin get semua nya untuk kebutuhan tertentu, maka pasti akan memakan memori yang sangat besar..
Atau bahkan terkadang jika perangkat nya tidak sanggup untuk menangani task tersebut, pasti akan muncul error out of memory..
Cara Get Big Data Pada Laravel Dengan Chunk
Nah dengan chunk, hal tersebut bisa diatasi, yaitu caranya dengan memecah penarikan data nya menjadi beberapa bagian..
Misalkan kita ingin menarik 100.000 data records, maka sistem tidak langsung mengget nya sebanyak tersebut..
Tetapi memecah nya misalkan menjadi per 1000 records, dan akan terus di pecah sampai data yang ingin diambil sudah benar-benar habis..
Dan kita juga bisa menentukan sendiri berapa nilai pecahan nya, mau di pecah per 1000 records, atau per 500 records juga bisa..
Untuk contoh koding nya adalah seperti berikut:
Sale::orderBy('id')->chunk(2000, function ($sales) { foreach ($sales as $sale) { // lanjutkan proses koding nya didalam sini.. } });
Pada contoh diatas kita menarik data dari table sales, yang anggap saja memiliki 1 juta records..
Kemudian kita tarik datanya dengan memecah nya per 2000 records saja.. Kemudian kita collection kedalam $sales.. berarti sekarang variable $sales berisi 2000 data records..
Didalam nya variable $sales nya kita foreach lagi, dan begitu seterusnya sampai data yang ada didalam table sales ketarik semua..
Untuk contoh lain, agar lebih mudah untuk memahami nya, kalian bisa lihat gambar berikut ini:
Coba kalian perhatikan gambar diatas, kita memiliki sebuah Collection yang didalam nya memiliki 6 item..
Kemudian kita pecah menjadi per 3 bagian dengan perintah chunk(3).. Maka hasilnya seperti pada output gambar diatas..
Insert Data dengan Metode Chunk..
Misalkan kita ingin menduplikat isi data dari table A ke table B yang memiliki struktur table yang sama, tujuan nya untuk melakukan backup data..
Jika ternyata data nya sudah sangat besar, anggap saja sudah jutaan records, maka kalian bisa menggunakan metode chunk untuk proses pemindahan nya seperti berikut ini:
.... DB::table('orders')->orderBy('id')->chunk(1000, function ($datas) { foreach ($datas as $data) { DB::table('order_backup')->insert($data->toArray()); } }); ....
Kelebihan Chunk
Chunk memliki kelebihan dalam penggunaan memori, dimana pada saat kita menggunakan metode chunk, memori yang digunakan sangat sedikit sekali walaupun kita sedang menarik data yang berjumlah besar..
Berikut adalah table perbandingan jika kita menggunakan query get() biasa dengan chunk()..
Kita bisa lihat gambar diatas, pada metode chunk, memori yang digunakan lebih konsisten dan sangat sedikit sekali..
Bahkan ketika kita nge get 100 ribu data, memori yang digunakan masih dibawah 50 MB, ini sangat luar biasa sekali..
Cara kerja Chunk
Cara kerja chunk sebetulnya sama seperti pagination, yang mana pada pagination menggunakan limit dan offset dalam penarikan data nya..
Chunk juga seperti itu, hanya saja sudah dibungkus kedalam function tertentu oleh laravel agar mempermudah dalam penulisan nya..
Kelebihan nya memang akan memakan memori yang jauh lebih sedikit, tapi kelemahan nya yaitu bisa membutuhkan waktu yang lebih lama dari biasanya..
Gimana? tertarik untuk menggunakan Chunk() ?
Support Us
Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid
Terima kasih..
[…] Mimin sendiri juga sudah membuatkan artikel tersendiri khusus untuk membahas chunk saja, silahkan buka: Cara Get Big Data pada Laravel dengan Chunk.. […]