𝗧𝘂𝗿𝘀𝗼 𝗹𝗶𝗯𝗦𝗤𝗟 𝘃𝘀 𝗖𝗹𝗼𝘂𝗱𝗳𝗹𝗮𝗿𝗲 𝗗𝟭
Memilih database untuk monorepo Astro bergantung pada alur kerja Anda.
Baru-baru ini saya membangun database bersama untuk tiga situs Astro SSG. Saya memiliki dua pilihan: Turso (libSQL) atau Cloudflare D1.
Saya memilih Turso.
Berikut adalah alasan mengapa perbedaan praktis tersebut menjadi penting.
Cloudflare D1 dibangun untuk Cloudflare Workers. Jika Anda menggunakan Workers untuk server-side rendering, D1 adalah pemenangnya. Ia berada di tempat kode Anda berjalan.
Pengaturan saya berbeda. Situs-situs saya adalah Astro 5 SSG statis di Cloudflare Pages. Saya tidak menggunakan Workers. Pipeline ETL saya berjalan di GitHub Actions.
Menggunakan D1 dari GitHub Actions itu sulit. Anda harus menggunakan Cloudflare API atau Wrangler CLI. Keduanya tidak memberikan file SQLite lokal untuk dikueri selama pengembangan. Anda akhirnya harus mengakses database jarak jauh (remote) untuk setiap pengujian.
Turso mengatasi hal ini dengan paket @libsql/client. Ia menerima sebuah URL. URL tersebut bisa berupa tautan jarak jauh atau jalur file lokal.
Kode saya terlihat seperti ini:
URL-nya adalah tautan Turso jarak jauh di CI. Di laptop saya, client membuka file lokal. Paket, kueri, dan skemanya tetap sama.
Jalur kodenya identik.
Ini memungkinkan saya untuk:
- Menjalankan skrip ETL secara lokal.
- Memeriksa database dengan viewer SQLite apa pun.
- Menjalankan migrasi dengan fungsi yang sama yang digunakan di produksi.
Saya tidak butuh Docker. Saya tidak butuh flag khusus. SQL yang sama dapat bekerja di mana saja.
Saya menggunakan pendekatan idempotent untuk migrasi. Kode saya memeriksa apakah sebuah tabel sudah ada sebelum membuatnya. Hal ini membuatnya aman untuk dijalankan berulang kali.
Kapan Anda harus memilih D1? Jika Anda menggunakan Cloudflare Workers untuk pencarian atau rute API, D1 lebih baik. Koneksinya lebih cepat karena tetap berada di dalam pusat data (datacenter) yang sama.
Arsitektur saya sepenuhnya statis. Karena saya tidak menggunakan Workers, D1 kehilangan keunggulan utamanya.
Trade-off saat ini:
- Performa tulis (write performance): ETL saya menjalankan tugas satu per satu. Saya belum menguji penulisan konkuren berkecepatan tinggi.
- Perubahan skema: Menambah kolom itu mudah. Mengubah nama kolom memerlukan lebih banyak ketelitian.
- Harga: Keduanya memiliki tier gratis yang murah hati. Untuk tiga situs, biaya saya adalah nol.
Pemilihan database bukanlah tujuan utama. Kemampuan fallback ke file lokal adalah alasan saya memilih Turso. Hal ini membuat pengembangan menjadi sederhana.
