SQLite
Apa itu ini
Bayangkan satu file dokumen yang Anda buka dan edit langsung, tanpa program terpisah yang berjalan di latar belakang untuk mengelolanya. SQLite seperti itu untuk sebuah : ia adalah database relasional yang mandiri (self-contained) dan tanpa server (), yang menyimpan seluruh database dalam satu file. Tidak ada proses terpisah yang perlu dijalankan atau dikelola. Aplikasi Anda menautkan pustaka (library) ini secara langsung dan membaca serta menulis ke file tersebut. Ini adalah database yang paling banyak digunakan di dunia, tertanam di ponsel, browser, dan berbagai aplikasi lainnya.
Kelebihan
- Tanpa konfigurasi dan tanpa server yang perlu dioperasikan.
- Seluruh database adalah satu file portabel, mudah disalin atau dicadangkan.
- Cepat untuk pembacaan lokal dan beban kerja penulisan yang sedang.
- Dukungan (Structured Query Language) penuh dengan transaksi dan foreign key.
- Sangat cocok untuk pengujian, prototipe, runtime, dan penggunaan tertanam (embedded).
Kompromi (trade-off)
- Penulisan bersamaan (concurrent writes) terbatas. Seperti satu pena yang dipakai bergiliran oleh sekelompok orang, hanya satu orang yang bisa menulis pada satu waktu, meski yang lain masih bisa membaca (satu penulis dalam satu waktu; WAL — write-ahead logging, sebuah mode yang memungkinkan pembacaan dan penulisan terjadi bersamaan — membantu mengatasi ini).
- Tidak dirancang untuk banyak klien berjaringan atau throughput penulisan yang tinggi.
- Lebih sedikit tipe data lanjutan dan tidak ada sistem pengguna/izin (user/permission) bawaan.
- Untuk berkembang melampaui satu host, dibutuhkan penyimpanan lain atau lapisan tambahan seperti Turso/LiteFS.
Kapan menggunakannya
Gunakan SQLite untuk aplikasi lokal, alat (Command-Line Interface), perangkat lunak desktop dan mobile, rangkaian pengujian (test suites), dan situs kecil-menengah yang didominasi oleh pembacaan (reads). SQLite juga semakin layak dipakai di edge melalui replika yang di-hosting.
Kecocokan dengan vibe coding
Saat mengarahkan AI, minta AI untuk mengaktifkan pengaturan default yang aman terlebih dahulu: nyalakan PRAGMA foreign_keys = ON dan journaling WAL, karena SQLite secara default mematikan foreign key. Minta AI menggunakan parameterized statements (pernyataan berparameter) dan menyimpan migrasi skema dalam file .sql yang diberi versi. Satu tips berguna: beri tahu AI bahwa penulisan bersifat serial (serialized), sehingga AI sebaiknya mengelompokkan (batch) proses insert dalam satu transaksi dan menghindari write lock yang berjalan lama. Karena database hanyalah sebuah file, minta AI menyertakan langkah pencadangan (backup) sederhana (menyalin file atau menggunakan perintah .backup) dalam perkakas (tooling) Anda.
PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
body TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Batch many inserts in one transaction for speed
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;