Lompat ke konten
Kembali ke modul

Data: Database dan SQL · 1/7

Apa itu database dan kenapa file saja tidak cukup

Concurrency, durability, dan kemampuan query — tiga hal yang tidak bisa diberikan file JSON.

Baca 22 menit

Setelah pelajaran ini kamu bisa

  • Menyebutkan apa yang diberikan database yang tidak diberikan sebuah file
  • Menjelaskan apa itu lost update
  • Menjelaskan arti ACID secara praktis
  • Memilih antara SQL dan NoSQL untuk aplikasi biasa

Kamu sudah tahu cara membaca dan menulis file JSON dengan node:fs. Jadi kenapa tidak menyimpan semuanya seperti itu? Jawabannya bukan "kecepatan" — tapi karena sebuah file tidak memberimu bantuan sama sekali saat dua hal terjadi bersamaan.

Coba sendiri

Dua request datang di saat yang sama, terhadap sebuah file JSON. Keduanya membaca, keduanya menulis, dan satu booking hilang.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Itulah lost update, dan ini argumen terbaik untuk memakai database. Kedua handler-nya benar secara terpisah. Bug-nya hanya ada karena keduanya tumpang tindih, artinya ia muncul saat beban tinggi dan tidak pernah saat pengujian.

Database tidak cuma menyimpan data. Ia menengahi antar pemanggil yang bersamaan, dan ia menjamin hal-hal yang tidak bisa dijamin sebuah file.

Database memberimuArtinya
Kontrol concurrencyDua penulis tidak bisa saling menimpa secara diam-diam
AtomicityPerubahan multi-langkah terjadi sepenuhnya atau tidak terjadi
ConstraintData tidak valid ditolak oleh penyimpanannya sendiri
Kemampuan query"booking berbayar di atas 3 malam, terbaru dulu" tanpa memuat semuanya
IndexMenemukan satu baris dari sejuta tanpa membaca sejuta
DurabilityTulisan yang sudah di-commit bertahan meski listrik mati di tengah request

SQL dan NoSQL

SQL (relasional)NoSQL (dokumen)
BentukTabel dengan skema tetapDokumen, skema per dokumen
RelasiJoin, dipaksakan oleh database-nyaBiasanya diduplikasi atau di-join di kode
ContohPostgreSQL, MySQL, SQLiteMongoDB, Firestore, DynamoDB
Cocok saatData punya relasi — hampir selaluSatu bentuk, skala raksasa, sedikit relasi

Tugas praktik

Di proyek ini, jalankan sqlite3 data/learning-path.db ".tables" kalau kamu punya CLI sqlite3, atau node -e 'const {DatabaseSync}=require("node:sqlite"); const db=new DatabaseSync("data/learning-path.db"); console.log(db.prepare("SELECT name FROM sqlite_master WHERE type=?").all("table"))' kalau tidak. Yang kamu lihat adalah tabel sungguhan yang dibuat oleh pendaftaranmu sendiri.

Hasil yang diharapkan

users, sessions, dan lesson_progress.