Il calcolo serverless ha risolto il problema del «nessun server da gestire» per il codice applicativo, ma i database erano l’eccezione scomoda. Potevi eseguire un Worker all’edge in millisecondi, poi guardarlo aspettare un database situato in un’unica regione lontana. Cloudflare D1 colma quel divario: è un vero database SQL, costruito su SQLite, che vive sulla rete di Cloudflare e si collega direttamente ai tuoi Workers. Scrivi SQL ordinario e ti viene addebitato solo per le query che esegui davvero.
Questa guida spiega cos’è D1, quanto costa, come interrogarlo da un Worker e quando preferirlo a KV o a un database Postgres tradizionale.
In breve
- D1 è un database SQL serverless costruito su SQLite, collegato direttamente a Cloudflare Workers
- Il piano gratuito è generoso: 5 milioni di righe lette e 100.000 righe scritte al giorno, più 5 GB di archiviazione
- Ti viene addebitato per le righe lette e scritte, non per il tempo di attività: i database inattivi non costano nulla
- Usa un SQL familiare con istruzioni preparate, quindi non c’è quasi alcuna curva di apprendimento
- Si abbina al resto della piattaforma, Workers AI , R2 e KV, per costruire app complete
- Gestisci i tuoi database in modo visivo con la mia app desktop gratuita Easy Cloudflare D1
Cos’è Cloudflare D1
Cloudflare D1 è un database gestito e serverless: un archivio SQL relazionale costruito su SQLite, uno dei motori di database più collaudati al mondo. «Serverless» qui significa che non provvigioni mai un’istanza, non scegli una dimensione e non tieni nulla in esecuzione. Crei un database, lo colleghi a un Worker ed esegui SQL. Cloudflare gestisce archiviazione, durabilità e scalabilità.
Poiché parla SQL standard, D1 risulta immediatamente familiare a chiunque abbia usato un database relazionale. Definisci tabelle, scrivi istruzioni SELECT, INSERT, UPDATE e DELETE, crei indici e usi transazioni. La differenza è operativa: non c’è un pool di connessioni da regolare, nessun server da aggiornare e nessun costo a riposo.
Prezzi e piano gratuito di Cloudflare D1
Il modello di fatturazione di D1 è insolito nel modo migliore: paghi per le query, misurate in righe lette e scritte, non per il tempo. Un database inattivo non costa nulla perché non c’è alcuna istanza in esecuzione. Dai prezzi ufficiali di D1 per il 2026:
Piano Workers Free
| Risorsa | Limite giornaliero |
|---|---|
| Righe lette | 5 milioni al giorno |
| Righe scritte | 100.000 al giorno |
| Archiviazione | 5 GB totali |
Piano Workers Paid
| Risorsa | Incluso, poi |
|---|---|
| Righe lette | Primi 25 miliardi / mese, poi 0,001 $ per milione |
| Righe scritte | Primi 50 milioni / mese, poi 1,00 $ per milione |
| Archiviazione | Primi 5 GB, poi 0,75 $ per GB-mese |
Non ci sono costi di trasferimento dati o di egress. Un dettaglio di ottimizzazione utile: gli indici possono ridurre drasticamente le letture di righe fatturabili facendo sì che le query scansionino meno righe, al costo di un piccolo aumento del volume di scrittura. Per i carichi a forte lettura, una buona indicizzazione mantiene bassa sia la latenza sia la bolletta.
Interrogare D1 da un Worker
Colleghi un database D1 nel tuo wrangler.toml, poi vi accedi tramite env.DB. D1 usa istruzioni preparate, che proteggono le tue query dall’SQL injection separando il testo della query dai valori.
1export default {
2 async fetch(request, env) {
3 // Read with a parameterised query
4 const { results } = await env.DB
5 .prepare("SELECT id, title FROM posts WHERE published = ? ORDER BY created_at DESC LIMIT 10")
6 .bind(1)
7 .all();
8
9 return Response.json(results);
10 },
11};
L’inserimento dei dati segue lo stesso schema:
1await env.DB
2 .prepare("INSERT INTO posts (title, body, published) VALUES (?, ?, ?)")
3 .bind("Hello D1", "My first edge database post", 1)
4 .run();
Puoi anche raggruppare più istruzioni per eseguirle in modo efficiente in un solo viaggio di andata e ritorno, che è l’approccio consigliato quando hai diverse scritture correlate.
Cloudflare D1 vs KV vs Postgres
Scegliere la giusta primitiva di archiviazione conta. Ecco come D1 si confronta con le due con cui viene messo a confronto più spesso.
| Esigenza | Scelta migliore | Perché |
|---|---|---|
| Dati relazionali, query, join | D1 | Vero SQL con tabelle, indici e transazioni |
| Ricerche chiave-valore semplici, configurazione, caching | KV | Ottimizzato per letture veloci di singole chiavi all’edge |
| Grande carico relazionale esistente, estensioni complesse | Postgres (ad es. tramite Hyperdrive) | Motore maturo per carichi pesanti e ricchi di funzioni |
In breve: usa KV quando devi solo recuperare un valore tramite una chiave il più velocemente possibile. Usa D1 quando i tuoi dati sono relazionali e vuoi interrogarli con SQL. Ricorri a un database Postgres completo (a cui i Workers possono connettersi, accelerato da Hyperdrive) quando hai un carico relazionale ampio e consolidato o ti servono funzioni specifiche di Postgres che SQLite non offre.
Quando Cloudflare D1 è la scelta giusta
D1 è un’ottima soluzione quando:
- I tuoi dati sono relazionali e traggono vantaggio da query SQL, join e indici
- Stai costruendo su Workers e vuoi il tuo database sulla stessa piattaforma
- Il tuo carico è discontinuo o da basso a moderato, così il pagamento per query batte un’istanza sempre attiva
- Vuoi zero oneri operativi: nessun provisioning, aggiornamento o pooling delle connessioni
- Ti accontenti del set di funzioni di SQLite, che copre la stragrande maggioranza delle esigenze applicative
È meno adatto a dataset molto grandi che superano i suoi limiti, o a carichi che dipendono da estensioni specifiche di Postgres. Per quelli, collega invece un database dedicato dal tuo Worker.
Un caso d’uso realistico
Un’applicazione D1 tipica: un blog o un piccolo backend SaaS dove un Worker serve le richieste, interroga post o record utente da D1, archivia file e immagini caricati in R2 , mette in cache i valori caldi in KV e chiama facoltativamente Workers AI per una funzione come la sintesi. Tutto gira su una sola piattaforma, all’edge, senza server e con una bolletta che scala con l’uso effettivo. È lo stesso schema architetturale dietro il sistema utenti di Cloudflare Pages che ho costruito.
Gestire D1 in modo visivo
Eseguire migrazioni e ispezionare i dati dalla riga di comando va bene, ma un client grafico rende il lavoro quotidiano più rapido. La mia app desktop gratuita Easy Cloudflare D1 ti permette di sfogliare database e tabelle, eseguire query e gestire i tuoi dati D1 da un’interfaccia pulita su Windows, macOS e Linux, con le tue credenziali cifrate localmente sulla tua macchina. E se il tuo stack abbina D1 a KV per il caching, la mia app gratuita Easy Cloudflare KV fa lo stesso per i tuoi namespace chiave-valore.
Punti chiave
- D1 è un database SQL serverless costruito su SQLite, collegato direttamente a Cloudflare Workers
- Il piano gratuito copre 5 milioni di letture e 100.000 scritture al giorno con 5 GB di archiviazione
- La fatturazione è per riga letta e scritta, non per ora; i database inattivi non costano nulla
- Usa SQL standard con istruzioni preparate sicure, quindi la curva di apprendimento è minima
- Usa KV per le ricerche chiave-valore, D1 per l’SQL relazionale e un Postgres dedicato per carichi pesanti o specifici di estensioni
- D1 si combina con R2, KV e Workers AI per costruire applicazioni edge complete
Domande frequenti
Cos’è Cloudflare D1? D1 è un database SQL serverless costruito su SQLite che gira sulla rete di Cloudflare e si collega direttamente ai Workers. Scrivi SQL standard e non provvigioni né gestisci mai un server. Cloudflare gestisce archiviazione, durabilità e scalabilità.
Cloudflare D1 è gratuito? C’è un piano gratuito nel piano Workers Free: 5 milioni di righe lette e 100.000 righe scritte al giorno, con 5 GB di archiviazione. Molte piccole applicazioni girano interamente entro questi limiti. Il piano Workers Paid aumenta sostanzialmente le quantità incluse.
Come viene tariffato D1? Paghi per le righe lette e scritte, non per il tempo di attività. Nel piano Paid i primi 25 miliardi di righe lette e 50 milioni di righe scritte al mese sono inclusi, poi è 0,001 $ per milione di letture e 1,00 $ per milione di scritture, con l’archiviazione a 0,75 $ per GB-mese oltre i primi 5 GB. Non ci sono costi di egress.
Qual è la differenza tra D1 e KV? KV è un archivio chiave-valore ottimizzato per letture veloci di singole chiavi, ideale per caching e configurazione. D1 è un database SQL relazionale per dati strutturati che vuoi interrogare con join, indici e transazioni. Usa KV per le ricerche per chiave, D1 per le query relazionali.
D1 può sostituire Postgres? Per molte applicazioni piccole e medie sì, perché SQLite copre le comuni esigenze relazionali. Per dataset molto grandi, carichi di scrittura concorrenti pesanti o estensioni specifiche di Postgres, un database Postgres dedicato collegato dal tuo Worker (accelerato da Hyperdrive) è la scelta migliore.
Come interrogo D1 da un Worker? Collega il database nella tua configurazione wrangler e accedivi tramite env.DB. Usa istruzioni preparate con parametri associati, ad esempio env.DB.prepare(“SELECT … WHERE id = ?”).bind(id).all(), che protegge le query dall’SQL injection.
Commenti