sqlite
Catatan teknis seputar web development, DevOps, dan integrasi AI.
5 artikel
- 16.01backend
Status Antrean Scraper yang Jujur: dari Empty sampai Recheck
Antrean scraper dengan dua status akhir menyembunyikan empat realitas. Pemisahan empty, incomplete, error, plus worklist berbasis umur data menutup celah itu.
TL;DR: Panen data macet gara-gara status cuma ada ok dan error, jadi halaman yang sukses dimuat tapi kosong nganggur di pending terus. Nambahin retry cuma buang jatah kunjungan, ternyata masalahnya bukan jaringan. Solusinya: perbanyak status jadi empty sama incomplete, tandain pas proses jalan, terus susun daftar recheck dari umur data.
#python#scraping#state-machine - 15.05backend
Rebuild Hanya untuk Pemulihan: Menjaga Ledger Tetap Sehat
Insiden rebuild yang mengubah 20 baris sehat jadi 77 UNKNOWN memaksa kontrak baru: alat pemulihan hanya mengisi kekosongan, tidak pernah menimpa baris sehat.
TL;DR: Gara-gara prinsip "raw is truth", alat rebuild malah merusak data sehat karena parser ikut baca berkas sub-tab yang bukan data detail. Kontraknya pun diubah jadi recovery-only: baris sehat dipertahankan, sub-tab diabaikan, dan ketemu UNKNOWN berarti nggak nulis apa-apa sama sekali. Karena raw-nya append-only, ledger yang sehat cukup dilengkapi, bukan ditimpa ulang.
#python#data-engineering#sqlite - 15.04backend
Melacak Jejak Panen Data dengan Log Audit SQLite
Dua penjaga lokal untuk pipeline panen data: rulebook AGENTS.md untuk agen koding dan log audit SQLite yang idempoten lewat UPSERT.
TL;DR: Pas panen data di DemandScope error terus, aku bingung commit mana yang ngasilin datanya karena Git cuma nyatet berkas berubah doang. Solusinya gampang: bikin AGENTS.md buat ngatur agen koding biar nggak sembarangan nulis data atau commit kredensial. Terus bikin log audit SQLite per target pakai UPSERT biar idempoten, jadi tiap data bisa dilacak asalnya.
#sqlite#scraping#audit-trail - 12.19backend
Field Turunan Saya Basi Lagi, Tiga Hari Setelah Di-Backfill
Commit backfill next_review basi lagi tiga hari kemudian. Solusinya: field turunan dihitung saat dibaca, nilai manual tetap dipertahankan.
TL;DR: Gue ngabisin waktu backfill manual field next_review, eh besoknya datanya basi cuma gara-gara satu berkas baru. Ternyata itu field turunan yang bisa dihitung sendiri dari last_updated plus 90 hari, jadi mending derive pas dibaca, gak perlu disimpen. SQLite sama PostgreSQL aja udah setuju lewat generated column dan view; nyimpen cuma worth it kalau ada override manual atau bacaannya berat banget.
#python#sqlite#postgresql - 02.47devops
Backup Database Aktif Itu Nggak Boleh Sekadar Cp
Menyalin file SQLite yang aktif bukan backup. Pelajaran dari script backup ringan: hot backup, tar atomik terverifikasi, dan prune berlapis.
TL;DR: Script ini menyalin SQLite aktif lewat perintah .backup, bukan cp mentah, supaya snapshot tetap konsisten di mode WAL. Arsip ditulis ke nama sementara, diverifikasi dengan tar -tzf, baru direname atomik, jadi tidak ada arsip setengah jadi. Penghapusan lama baru jalan setelah verify, dengan lantai minimal tiga arsip terbaru plus flock biar cron nggak dobel.
#backup#sqlite#cron