𝗧𝘂𝗿𝘀𝗼 𝗹𝗶𝗯𝗦𝗤𝗟 𝘃𝘀 𝗖𝗹𝗼𝘂𝗱𝗳𝗹𝗮𝗿𝗲 𝗗𝟭
Het kiezen van een database voor een Astro monorepo draait om je workflow.
Onlangs heb ik een gedeelde database gebouwd voor drie Astro SSG-sites. Ik had twee keuzes: Turso (libSQL) of Cloudflare D1.
Ik koos voor Turso.
Dit is waarom het praktische verschil ertoe deed.
Cloudflare D1 is gebouwd voor Cloudflare Workers. Als je Workers gebruikt voor server-side rendering, is D1 de winnaar. Het bevindt zich op de plek waar je code draait.
Mijn setup is anders. Mijn sites zijn statische Astro 5 SSG op Cloudflare Pages. Ik gebruik geen Workers. Mijn ETL-pipeline draait in GitHub Actions.
D1 gebruiken vanuit GitHub Actions is lastig. Je moet de Cloudflare API of de Wrangler CLI gebruiken. Geen van beide geeft je een lokaal SQLite-bestand om tijdens de ontwikkeling queries op uit te voeren. Je eindigt met het aanroepen van een externe database voor elke test.
Turso lost dit op met het @libsql/client pakket. Het accepteert een URL. Die URL kan een externe link zijn of een lokaal bestandspad.
Mijn code ziet er zo uit:
De URL is een externe Turso-link in CI. Op mijn laptop opent de client een lokaal bestand. Het pakket, de queries en het schema blijven hetzelfde.
Het codepad is identiek.
Dit stelt me in staat om:
- ETL-scripts lokaal uit te voeren.
- De database te inspecteren met elke willekeurige SQLite-viewer.
- Migraties uit te voeren met dezelfde functie die in productie wordt gebruikt.
Ik heb geen Docker nodig. Ik heb geen speciale flags nodig. Dezelfde SQL werkt overal.
Ik gebruik een idempotente aanpak voor migraties. Mijn code controleert of een tabel bestaat voordat deze wordt aangemaakt. Hierdoor is het veilig om deze herhaaldelijk uit te voeren.
Wanneer moet je voor D1 kiezen? Als je Cloudflare Workers gebruikt voor zoekfuncties of API-routes, is D1 beter. De verbinding is sneller omdat deze binnen hetzelfde datacenter blijft.
Mijn architectuur is volledig statisch. Omdat ik geen Workers gebruik, verliest D1 zijn belangrijkste voordeel.
Huidige afwegingen:
- Schrijfprestaties: Mijn ETL voert taken één voor één uit. Ik heb geen hoge snelheden met gelijktijdige schrijfacties getest.
- Schema-wijzigingen: Kolommen toevoegen is eenvoudig. Kolommen hernoemen vereist meer zorgvuldigheid.
- Prijsstelling: Beiden hebben royale gratis pakketten. Voor drie sites zijn mijn kosten nul.
De keuze voor de database was niet het hoofddoel. De mogelijkheid om terug te vallen op een lokaal bestand was de reden dat ik voor Turso koos. Het maakt ontwikkeling eenvoudig.
