Apa Itu SQLite ?

Model serverless SQLite, tempat ia berjalan, dan alasan basis data satu berkas ini ada di mana-mana.

Daftar isi

SQLite adalah mesin basis data relasional yang berjalan di dalam proses aplikasi tanpa proses server terpisah. Seluruh isinya tersimpan dalam satu berkas biasa yang dapat disalin dan dipindahkan seperti berkas dokumen. Topik ini menjelaskan model serverless yang menjadi ciri SQLite, membandingkannya dengan arsitektur client-server melalui sebuah diagram, dan menampilkan sesi pertama di command line. Setelah membacanya, alasan SQLite hadir di hampir semua perangkat modern dapat dijelaskan dari desainnya sendiri.

Mesin basis data di dalam aplikasi#

SQLite adalah library basis data relasional yang ditautkan langsung ke dalam program aplikasi, yakni kumpulan kode siap pakai yang dipanggil seperti fungsi milik program itu sendiri. Apabila aplikasi meminta data, ia memanggil fungsi library tersebut dan pernyataan SQL ditafsirkan di utas yang sama dengan program pemanggilnya. Tidak ada proses lain yang dihidupkan dan tidak ada pesan yang dikirim melalui jaringan. Setelah pemanggilan selesai, tidak ada tugas latar yang tertinggal berjalan.

Sifat ini disebut serverless, yakni model kerja tanpa proses server yang harus dipasang, dijalankan, dan diawasi secara terpisah. Perbandingannya adalah MySQL dan PostgreSQL yang bekerja sebagai proses server tersendiri, sehingga pemasangannya menuntut pengaturan akun, port, dan jaringan terlebih dahulu. Pada SQLite, seluruh pekerjaan itu tidak ada karena mesinnya dibawa di dalam aplikasi. Pembaruan aplikasi sekaligus membawa versi mesin basis datanya.

Konsekuensi desain ini menjelaskan dua sifat yang langsung terasa. Pertama, tahap pemasangan praktis tidak ada karena cukup satu berkas library atau satu paket. Kedua, tidak ada port, akun pengguna, dan izin jaringan yang harus diatur sebelum pernyataan SQL pertama dijalankan.

Perbandingan dengan arsitektur client-server#

Pada arsitektur client-server, banyak program klien mengirim permintaan ke satu proses server yang menjadi satu-satunya pengelola basis data. Server berjalan di mesin tersendiri, membaca dan menulis berkas basis datanya, lalu mengembalikan hasil kepada klien melalui jaringan. Model ini tepat untuk aplikasi yang klien-kliennya tersebar di banyak mesin dan menulis data secara serentak.

SQLite mengambil jalur yang berbeda, sebagaimana dibandingkan diagram berikut.

Arsitektur client-serverKlien 1Klien 2Klien 3Server basis dataBasis dataArsitektur serverless SQLiteProgramdengan library SQLiteProgramdengan library SQLiteberkas basis data
Perbandingan arsitektur client-server dan arsitektur serverless SQLite

Pada panel kanan, setiap program membawa library SQLite di dalam dirinya dan membuka berkas basis data secara langsung. Tidak ada lompatan jaringan, tidak ada antrean pesan di server, dan tidak ada proses tambahan yang harus hidup sebelum aplikasi dapat membaca data. Jarak antara aplikasi dan datanya tinggal satu panggilan fungsi. Model inilah yang membuat penyimpanan terstruktur terasa seperti membaca berkas biasa, tetapi tetap disertai jaminan transaksi dan bahasa SQL yang lengkap.

Query pertama di command line#

Mengenal SQLite dapat dimulai dari program sqlite3 di terminal, yaitu antarmuka command line tempat perintah diketik dalam bentuk teks. Program sqlite3 membaca pernyataan SQL yang diketik atau diberikan sebagai argumen, meneruskannya ke mesin SQLite, lalu menampilkan jawabannya. Setiap pernyataan yang meminta data disebut query. Query berikut membuat satu tabel, mengisinya dengan satu baris data, lalu membacanya kembali.

sql Contoh: query pertama
CREATE TABLE buku (id INTEGER PRIMARY KEY, judul TEXT, pengarang TEXT, tahun INTEGER);
INSERT INTO buku (judul, pengarang, tahun) VALUES ('Dasar Statistika', 'Citra Handayani', 2021);
SELECT judul, pengarang FROM buku;
text Keluaran
Dasar Statistika|Citra Handayani

Keluaran bawaan sqlite3 memformat setiap baris hasil sebagai nilai yang dipisahkan tanda garis tegak, tanpa nama kolom. Format ringkas ini dipilih karena mudah diurai oleh program lain, dan sqlite3 menyediakan pengaturan lain yang mengubah bentuk keluarannya. Yang penting pada tahap ini, SQL yang sama persis berjalan di mesin SQLite mana pun tanpa penyesuaian.

Ketiga pernyataannya mewakili pekerjaan yang paling sering dilakukan pada basis data. CREATE TABLE mendefinisikan struktur tabel beserta tipe tiap kolomnya, INSERT menambahkan baris data baru, dan SELECT membaca baris yang telah tersimpan. Kolom id diberi tipe INTEGER PRIMARY KEY, yaitu penanda identitas baris yang nilainya dibuat otomatis oleh mesin apabila barisnya dimasukkan tanpa nilai id.

Basis data sebagai satu berkas#

Seluruh isi satu basis data SQLite, mulai dari definisi tabel beserta seluruh datanya, tersimpan dalam satu berkas biasa. Ukuran berkas mengikuti isinya, sedangkan formatnya terdokumentasi dengan baik sehingga tetap terbaca lintas sistem operasi dan arsitektur prosesor. Menyalin berkas itu sama saja dengan mengarsipkan seluruh basis data, dan memindahkannya ke mesin lain tidak memerlukan prosedur impor.

Sesi berikut menunjukkan sifat itu. Tiga pemanggilan sqlite3 yang berbeda membuat tabel, mengisinya, dan membacanya kembali. Di antara pemanggilan-pemanggilan itu, proses sqlite3 selesai dan tidak meninggalkan proses apa pun, tetapi data tetap ada karena tersimpan di berkas, bukan di memori proses.

bash
# membuat basis data percobaan di direktori kerja
rm -f percobaan.db
sqlite3 percobaan.db "CREATE TABLE buku (id INTEGER PRIMARY KEY, judul TEXT, pengarang TEXT, tahun INTEGER);"
sqlite3 percobaan.db "INSERT INTO buku (judul, pengarang, tahun) VALUES ('Dasar Statistika', 'Citra Handayani', 2021);"
sqlite3 percobaan.db "SELECT judul, pengarang, tahun FROM buku;"
# memastikan seluruh basis data memang tersimpan dalam satu berkas
ls percobaan.db
text Keluaran
Dasar Statistika|Citra Handayani|2021
percobaan.db

Baris pertama keluaran berasal dari query SELECT, sedangkan baris kedua berasal dari ls yang memastikan berkasnya benar-benar ada di direktori kerja. Pola ini adalah pola kerja SQLite sehari-hari, yaitu membuka berkas, menjalankan pernyataan, lalu menutupnya, tanpa tahap penyambungan ke server. Perintah rm -f di awal hanya menghapus sisa percobaan sebelumnya agar sesi dapat diulang dengan hasil yang sama.

Tempat SQLite berjalan#

Desain tanpa server dan satu berkas membuat SQLite mudah dibundel, sehingga mesin ini ikut terpasang di banyak perangkat tanpa sepengetahuan penggunanya. Dokumentasi resmi SQLite mencatat bahwa setiap perangkat Android dan setiap perangkat iPhone membawa SQLite sebagai bagian dari sistem operasinya. Pada ponsel, SQLite menyimpan data internal aplikasi seperti pengaturan, pesan, dan tanda buku aplikasi.

Browser juga membawanya. Firefox, Chrome, dan Safari menggunakan SQLite untuk kebutuhan internal seperti riwayat penjelajahan, sehingga mesin basis data ini berjalan di setiap komputer yang memiliki browser modern. Di sisi lain, macOS dan Windows menyertakan SQLite dalam instalasi standar sistemnya, dan bahasa pemrograman seperti Python serta PHP mengirim modul SQLite bawaannya. Aplikasi desktop yang menyimpan data lokal, perangkat televisi, dan sistem multimedia kendaraan turut memakainya.

Jumlah pastinya sulit dihitung karena SQLite berada di bawah antarmuka aplikasi, tetapi dokumen yang sama menyebutnya mesin basis data dengan penyebaran paling luas. Posisi tersebut juga sulit diukur dengan metode lain karena SQLite jarang tampil sebagai produk yang terlihat oleh penggunanya. Angka pasaran tidak diperlukan untuk memahaminya, cukup gambaran bahwa ponsel dan komputer yang digunakan sehari-hari hampir pasti membawanya.

Ringkasan#

  • SQLite adalah library yang ditautkan ke aplikasi tanpa proses server, sehingga pemasangan dan konfigurasinya nyaris tidak ada.
  • Satu basis data lengkap tersimpan dalam satu berkas biasa yang portabel lintas sistem operasi dan arsitektur prosesor.
  • Program membaca dan menulis berkas basis data secara langsung, sehingga akses data berupa panggilan fungsi tanpa jaringan.
  • Sifat tersebut membuat SQLite dibundel oleh sistem operasi ponsel, browser, bahasa pemrograman, dan aplikasi desktop.

Referensi#