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.
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 memberimu | Artinya |
|---|---|
| Kontrol concurrency | Dua penulis tidak bisa saling menimpa secara diam-diam |
| Atomicity | Perubahan multi-langkah terjadi sepenuhnya atau tidak terjadi |
| Constraint | Data tidak valid ditolak oleh penyimpanannya sendiri |
| Kemampuan query | "booking berbayar di atas 3 malam, terbaru dulu" tanpa memuat semuanya |
| Index | Menemukan satu baris dari sejuta tanpa membaca sejuta |
| Durability | Tulisan yang sudah di-commit bertahan meski listrik mati di tengah request |
SQL dan NoSQL
| SQL (relasional) | NoSQL (dokumen) | |
|---|---|---|
| Bentuk | Tabel dengan skema tetap | Dokumen, skema per dokumen |
| Relasi | Join, dipaksakan oleh database-nya | Biasanya diduplikasi atau di-join di kode |
| Contoh | PostgreSQL, MySQL, SQLite | MongoDB, Firestore, DynamoDB |
| Cocok saat | Data punya relasi — hampir selalu | Satu 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.