Menu

Apa Itu SQLite? Penjelasan Database SQL Tertanam

SQLite adalah database SQL tanpa server berbasis file yang berjalan di dalam aplikasimu. Inilah penjelasan apa sebenarnya SQLite, bedanya dengan server database, dan kapan ia unggul.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

SQLite Adalah Database di Dalam Programmu

Sebagian besar database yang pernah kamu dengar, seperti MySQL, Postgres, dan SQL Server, berjalan sebagai program terpisah. Kamu menyalakan server, server itu mendengarkan di sebuah port, dan aplikasimu terhubung lewat jaringan untuk mengajukan pertanyaan. SQLite membuang seluruh model itu.

SQLite adalah library. Kamu menautkannya ke dalam programmu, dan ia memberimu database SQL yang tersimpan dalam satu file di disk. Tidak ada server, tidak ada port, tidak ada daemon, tidak ada pg_ctl start. Aplikasimu membuka sebuah file, dan file itulah database-nya.

sqlite3 mydata.db

Perintah itu membuka (atau membuat) file bernama mydata.db dan memberimu prompt SQL. Semua yang kamu lakukan, baik tabel, baris, maupun index, disimpan di satu file itu. Salin ke mesin lain, dan database-nya ikut pindah. Hapus file-nya, dan database-nya hilang.

Sekilas tentang SQL-nya

SQL-nya sendiri terlihat seperti SQL di tempat lain. Jika kamu pernah memakai database lain, hampir semuanya akan terasa akrab:

SQL standar: CREATE TABLE, INSERT, SELECT, ORDER BY. SQLite mendukung bagian standar SQL yang benar-benar kamu pakai sehari-hari, ditambah fitur modern seperti CTE, window function, dan fungsi JSON. Perbedaannya dengan Postgres atau MySQL sebagian besar ada pada tipe data dan beberapa keanehan sintaks, yang akan kita bahas nanti.

Arti Sebenarnya dari "Tertanam" dan "Tanpa Server"

Dua istilah terus muncul saat membicarakan SQLite. Keduanya perlu dipahami dengan benar.

Tertanam (embedded) berarti SQLite berjalan di proses yang sama dengan aplikasimu. Tidak ada proses database terpisah. Saat script Python-mu memanggil sqlite3.connect("data.db"), engine SQL-nya berjalan di dalam proses Python-mu, membaca dan menulis file secara langsung.

Tanpa server (serverless) berarti tidak ada server yang perlu dipasang, dikonfigurasi, dijalankan, diamankan, atau di-backup. Bandingkan langkah-langkah untuk mulai memakai database:

  • Postgres: pasang Postgres, jalankan layanannya, buat user, buat database, konfigurasi pg_hba.conf, hubungkan lewat TCP.
  • SQLite: buka sebuah file.

Itulah seluruh perbedaannya. Kemampuan lebih sedikit, tapi jauh lebih sedikit repotnya.

Seluruh Database Adalah Satu File

Bagian inilah yang mengejutkan banyak orang. Format file-nya terdokumentasi dan stabil, berupa file .db (atau .sqlite, atau .sqlite3, ekstensinya hanya kebiasaan) yang bisa kamu:

  • Kirim lewat email ke rekan kerja.
  • Commit ke git (setidaknya yang kecil).
  • Salin dengan cp untuk backup instan.
  • Buka dengan alat SQLite apa pun di sistem operasi apa pun.
ls -lh mydata.db
# -rw-r--r--  1 you  staff   28K  Apr 23 14:02 mydata.db

Satu file itu menyimpan tabel, index, skema, dan datamu. Database SQLite di disk identik byte demi byte di Windows, macOS, Linux, iOS, dan Android. Format-nya begitu stabil sampai Perpustakaan Kongres AS merekomendasikannya untuk pelestarian data jangka panjang.

Di Mana Kamu Sudah Memakai SQLite

Hampir pasti ada ratusan database SQLite di perangkat yang sedang kamu pakai untuk membaca ini. SQLite menjalankan:

  • Penyimpanan sistem iOS dan Android serta banyak aplikasi di kedua platform.
  • Firefox, Chrome, dan Safari (riwayat, bookmark, cookie).
  • macOS (Mail, Photos, dock).
  • Sebagian besar aplikasi desktop Linux yang butuh penyimpanan lokal.
  • Skype, WhatsApp, Signal: riwayat chat.
  • Katalog Adobe Lightroom, metadata Dropbox, library Steam.

SQLite disebut-sebut sebagai engine database yang paling banyak dipakai di dunia, dan itu mungkin benar. Alasannya sederhana: saat sebuah aplikasi butuh penyimpanan lokal yang terstruktur, SQLite adalah jalan yang paling mudah.

Apa yang Bukan SQLite

SQLite bukan database client-server. Dua program di mesin yang berbeda tidak bisa sama-sama terhubung ke database SQLite lewat jaringan, karena tidak ada lapisan jaringan untuk dihubungi. Jika kamu butuh itu, pilih Postgres atau MySQL.

SQLite tidak dibuat untuk konkurensi penulisan yang tinggi. SQLite memakai penguncian tingkat file (dengan beberapa optimasi cerdas di mode WAL), jadi meskipun banyak pembaca bisa bekerja paralel, hanya satu penulis pada satu waktu yang bisa melakukan commit. Untuk aplikasi satu user atau situs web dengan trafik rendah, ini bukan masalah. Untuk SaaS multi-tenant yang menerima ribuan penulisan per detik, ini alat yang salah.

SQLite tidak mengelola user atau hak akses. Akses database adalah akses file: siapa pun yang bisa membaca file-nya bisa membaca datanya. Itu tidak masalah untuk aplikasi yang memiliki file database-nya sendiri. Tapi tidak cocok untuk setup multi-tenant yang dipakai bersama.

Kenapa Kamu Memilihnya

Yang kamu tukar adalah kesederhanaan dengan ruang skala yang mungkin tidak akan pernah kamu butuhkan:

  • Tanpa setup. Tidak ada layanan yang perlu dijalankan. Tidak ada perbedaan versi antara dev dan prod. Tidak ada "database-nya mati" karena memang tidak ada server database.
  • Cepat. Untuk sebagian besar beban kerja, terutama yang banyak membaca, SQLite lebih cepat daripada database jaringan, karena tidak ada perjalanan bolak-balik socket pada setiap query.
  • Andal. SQLite diuji dengan sangat teliti. Proyek SQLite punya kode pengujian yang jauh lebih banyak daripada kode sumbernya, dan format-nya stabil sejak 2004.
  • Domain publik. Gratis untuk penggunaan apa pun, termasuk komersial. Tidak ada lisensi yang perlu dibaca.
  • Portabel. Satu file, semua platform.

Untuk aplikasi lokal, prototipe, perangkat tertanam, alat CLI, test suite, script analisis data, dan situs web kecil sampai menengah, SQLite sering kali merupakan pilihan default yang tepat, bukan sekadar batu loncatan menuju database yang "sungguhan".

Berikutnya: SQLite vs MySQL

Pertanyaan berikutnya yang wajar adalah bagaimana SQLite dibandingkan dengan server database yang mungkin lebih sering kamu dengar. Kita mulai dengan MySQL: di mana masing-masing unggul, dan cara mengetahui mana yang cocok untuk proyek di hadapanmu.

Pertanyaan yang sering diajukan

Apa itu SQLite?

SQLite adalah engine database SQL yang berjalan sebagai library di dalam aplikasimu, bukan sebagai server terpisah. Seluruh database, yaitu tabel, index, skema, dan data, tersimpan dalam satu file di disk. Kamu berkomunikasi dengannya lewat library C (atau binding untuk bahasa pemrogramanmu) memakai SQL biasa.

SQLite dipakai untuk apa?

Di mana pun kamu butuh database SQL sungguhan tanpa menjalankan server: aplikasi mobile (iOS dan Android sama-sama menyertakannya), aplikasi desktop, browser, perangkat tertanam, situs web kecil, cache lokal, test suite, dan script analisis. Jika datamu muat di satu mesin dan hanya satu proses yang menulis pada satu waktu, SQLite biasanya cocok.

Apakah SQLite database sungguhan?

Ya. SQLite mendukung transaksi, jaminan ACID, foreign key, join, subquery, window function, CTE, trigger, view, dan JSON. Ada hal-hal yang dimiliki server database tapi tidak dimiliki SQLite, seperti akses jaringan, konkurensi banyak penulis, dan akun user, karena memang bukan tugasnya. Untuk aplikasi dengan satu proses, SQLite sama 'sungguhan'-nya dengan Postgres.

Apakah SQLite gratis?

Ya. SQLite berada di domain publik, yang bahkan lebih longgar daripada open source. Kamu bisa memakainya di produk komersial, mengubahnya, dan mendistribusikannya tanpa atribusi atau biaya lisensi. Karena itulah SQLite menjadi salah satu perangkat lunak yang paling banyak dipakai di dunia.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai