Paket driver tidak kecil. Satu paket bisa mencapai beberapa gigabyte, dan orang yang mengunggahnya sering memakai koneksi kantor yang putus. POST multipart/form-data biasa adalah alat yang salah: saat koneksi mati di 80 persen, seluruh unggahan dimulai dari awal.
Pecah, catat, lanjutkan
Protokolnya memecah file menjadi chunk berukuran tetap di sisi klien. Setiap chunk diunggah sendiri dengan tiga identitas: sesi unggahan, indeks chunk, dan jumlah total. Server menulis chunk ke lokasi sementara dan mencatatnya.
Bagian pentingnya adalah catatan itulah yang membuat pelanjutan mungkin. Saat klien terhubung lagi, ia bertanya chunk mana yang sudah dimiliki server. Ia hanya mengirim yang belum ada. Tidak ada yang diulang buta, dan tidak ada yang terkirim dua kali.
const received = await db.uploadChunk.findMany({
where: { sessionId },
select: { index: true },
});
// Klien hanya mengirim bagian yang kosong.
Finalisasi adalah panggilan terpisah. Ia memverifikasi jumlah chunk yang diharapkan sudah lengkap, menyusun bagian-bagiannya, dan baru setelah itu memindahkan file ke tempatnya. Unggahan yang terputus meninggalkan bagian sementara, tidak pernah paket driver setengah jadi yang terlihat lengkap.
Membersihkan sisa kegagalan
Jalur kegagalan layak mendapat perhatian yang sama dengan jalur sukses. Sesi yang tidak pernah finalisasi menumpuk chunk, jadi pekerjaan terjadwal mengedaluwarsakan sesi yang melewati tenggat dan menghapus bagian-bagiannya. Tanpa itu penyimpanan sementara tumbuh terus, dan pertumbuhannya tidak terlihat sampai disk penuh.
Kedaluwarsa dihitung dari chunk terakhir yang diterima, bukan dari kapan sesi dimulai. Unggahan yang lambat tapi sehat tidak boleh dibersihkan saat masih ada kemajuan.
Pencarian yang tetap cepat
Sisi katalog dari sistem yang sama punya masalah lain: menemukan driver berdasarkan seri, model, SKU, kategori, atau hardware ID di tabel besar. ILIKE '%kata%' tidak memakai indeks dan cepat memburuk.
Indeks trigram memakainya, dan ia menangani pencarian sebagian yang benar-benar diketik orang. Dipadukan dengan pagination keyset alih-alih OFFSET, halaman hasil tetap cepat di kedalaman berapa pun. OFFSET 40000 membuat database membaca lalu membuang empat puluh ribu baris; pagination keyset hanya membaca yang dikembalikan.
Tidak ada bagian yang cerdik. Keduanya adalah beda antara sistem yang berjalan di dataset demo dan yang berjalan di data sungguhan.



