Langsung ke konten utama

Cara Efisien Melakukan Bulk Insert dan Update Data di Laravel

Pendahuluan

Bayangin lagi ngerjain fitur import data skala besar, tapi aplikasinya malah timeout karena Laravel sibuk banget nge-looping ribuan query ke database. Ini masalah klasik yang sering banget bikin performa aplikasi drop drastis kalau kita cuma pakai model save biasa di dalam loop. Saya sendiri pernah kena masalah ini di project dashboard inventaris yang mengharuskan update stok ribuan barang sekaligus, dan ternyata solusinya bukan sekadar menambah limit memory PHP.

Tips & Best Practices

Di banyak project, biasanya saya mulai dari membatasi ukuran chunk agar memory tetap aman. Pertama, jangan pernah nge-insert data sekaligus jutaan baris dalam satu query karena bisa kena limit packet database; selalu pecah jadi bagian-bagian kecil (chunking) agar proses lebih stabil. Kedua, manfaatkan fitur upsert bawaan Laravel. Waktu dulu harus update ribuan user sekaligus, saya sadar kalau nge-query satu-satu itu membunuh performa, jadi pakai query builder yang lebih dekat ke raw SQL jauh lebih ngebut. Ketiga, kurangi pemanggilan event model. Kadang kita lupa kalau Eloquent itu punya banyak overhead seperti event saving atau updating yang bisa bikin proses jadi lambat kalau dijalankan ribuan kali.

Contoh Kode

Berikut adalah cara paling efisien menggunakan method upsert yang sangat powerful untuk skenario insert sekaligus update:

// Update jika ID sudah ada, insert jika belum
DB::table('products')->upsert([
    ['id' => 1, 'stock' => 50, 'updated_at' => now()],
    ['id' => 2, 'stock' => 30, 'updated_at' => now()],
], ['id'], ['stock', 'updated_at']);

Variasi Implementasi

Kalau datanya sangat kompleks dan butuh relasi, mungkin kalian butuh library pihak ketiga seperti thiagoprz/laravel-bulk-upsert. Tapi kalau cuma buat tabel flat, native DB::table()->upsert() sudah lebih dari cukup. Bedanya, pakai Eloquent model memang terasa lebih elegan, tapi untuk performa tinggi, langsung tembak lewat Query Builder jauh lebih enteng di RAM karena kita bypass instansiasi object model yang berat.

Kesalahan Umum

1. Lupa mematikan disableQueryLog() saat proses bulk, yang akhirnya malah bikin RAM jebol. 2. Melakukan query di dalam loop foreach tanpa pembatasan, ini musuh utama database. 3. Tidak memberikan index pada kolom yang jadi acuan upsert, jadi database harus scan ulang tabel terus-terusan. 4. Menaruh logika bisnis yang berat di dalam model event yang dipicu setiap kali insert satu baris. 5. Terlalu percaya diri dengan memory limit server tanpa melakukan testing dengan data dummy yang besar.

Ringkasan

Intinya, handling data dalam jumlah masif di Laravel itu soal menyeimbangkan antara kemudahan fitur Eloquent dan kecepatan Query Builder. Setelah paham pola bulk insert dan update ini, project saya yang tadinya lemot pas import data jadi jauh lebih enteng. Jangan takut buat bereksperimen dengan raw query kalau memang performa jadi prioritas utama di tahap akhir pengembangan.

Komentar

Postingan populer dari blog ini

Fungsi lain tombol penerima panggilan di headset

Kegunaan tombol yang berada di headset utamanya adalah untuk menerima panggilan dan pause panggilan. Dan headset itu sendiri, kadang juga digunakan untuk mendengarkan music, digunakan bersama saat main game, supaya suara yang dikeluarkan oleh gadget tidak terlalu keras sehingga mengurangi beban gadget. Dengan mengurangi beban gadget, ada beberapa yang beranggapan kalau itu akan menghemat batere.

Cara Reset Password Database MySQL Menggunakan Laragon

Cara Reset Password Database MySQL Menggunakan Laragon Laragon adalah salah satu lingkungan pengembangan lokal (local development environment) yang populer di antara para pengembang web. Dalam beberapa kasus, mungkin kita perlu mereset password database MySQL pada Laragon jika lupa password atau untuk alasan keamanan tertentu. Berikut adalah langkah-langkah yang dapat kita ikuti untuk melakukan reset password database MySQL menggunakan Laragon:

Apa Itu R dan L di Headset? Ini Dia Perbedaan dan Fungsinya yang Perlu Anda Ketahui

Arti R dan L di Headset: Apa Perbedaannya? Headset adalah alat yang digunakan untuk mendengarkan suara dari sumber audio seperti ponsel, komputer, atau pemutar musik. Headset biasanya terdiri dari dua bagian, yaitu earphone yang dimasukkan ke dalam telinga dan mikrofon yang digunakan untuk berbicara. Pada earphone, kita sering melihat ada tulisan R dan L. Apa arti dan perbedaan dari kedua huruf tersebut?