Le calcul serverless a résolu le problème du « pas de serveur à gérer » pour le code applicatif, mais les bases de données étaient le maillon faible et embarrassant. Vous pouviez exécuter un Worker en périphérie en quelques millisecondes, puis le regarder attendre une base de données installée dans une seule région lointaine. Cloudflare D1 comble cet écart : c’est une véritable base de données SQL, bâtie sur SQLite, qui vit sur le réseau de Cloudflare et se lie directement à vos Workers. Vous écrivez du SQL ordinaire et vous êtes facturé uniquement pour les requêtes que vous exécutez réellement.

Ce guide explique ce qu’est D1, ce qu’il coûte, comment l’interroger depuis un Worker et quand le préférer à KV ou à une base de données Postgres classique.

En résumé

  • D1 est une base de données SQL serverless bâtie sur SQLite, liée directement à Cloudflare Workers
  • L’offre gratuite est généreuse : 5 millions de lignes lues et 100 000 lignes écrites par jour, plus 5 Go de stockage
  • Vous êtes facturé pour les lignes lues et écrites, pas pour la disponibilité : les bases inactives ne coûtent rien
  • Elle utilise un SQL familier avec des requêtes préparées, donc il n’y a presque aucune courbe d’apprentissage
  • Elle s’associe au reste de la plateforme, Workers AI , R2 et KV, pour bâtir des applications complètes
  • Gérez vos bases de données visuellement avec mon application de bureau gratuite Easy Cloudflare D1

Ce qu’est Cloudflare D1

Cloudflare D1 est une base de données managée et serverless : un magasin SQL relationnel bâti sur SQLite, l’un des moteurs de base de données les plus éprouvés au monde. « Serverless » signifie ici que vous ne provisionnez jamais d’instance, ne choisissez pas de taille et ne maintenez rien en fonctionnement. Vous créez une base de données, la liez à un Worker et exécutez du SQL. Cloudflare gère le stockage, la durabilité et la mise à l’échelle.

Comme elle parle le SQL standard, D1 paraît immédiatement familière à quiconque a déjà utilisé une base de données relationnelle. Vous définissez des tables, écrivez des instructions SELECT, INSERT, UPDATE et DELETE, créez des index et utilisez des transactions. La différence est opérationnelle : il n’y a pas de pool de connexions à régler, pas de serveur à corriger et aucun coût à l’arrêt.

Tarifs et offre gratuite de Cloudflare D1

Le modèle de facturation de D1 est inhabituel de la meilleure façon : vous payez pour les requêtes, mesurées en lignes lues et écrites, pas pour le temps. Une base inactive ne coûte rien car aucune instance ne tourne. D’après les tarifs officiels de D1 pour 2026 :

Offre Workers Free

RessourceLimite quotidienne
Lignes lues5 millions par jour
Lignes écrites100 000 par jour
Stockage5 Go au total

Offre Workers Paid

RessourceInclus, puis
Lignes lues25 milliards premières / mois, puis 0,001 $ par million
Lignes écrites50 millions premières / mois, puis 1,00 $ par million
Stockage5 Go premiers, puis 0,75 $ par Go-mois

Il n’y a pas de frais de transfert de données ni d’egress. Un détail d’optimisation utile : les index peuvent réduire considérablement les lectures de lignes facturables en permettant aux requêtes de parcourir moins de lignes, au prix d’une légère hausse du volume d’écriture. Pour les charges à forte lecture, un bon indexage garde à la fois votre latence et votre facture basses.

Interroger D1 depuis un Worker

Vous liez une base de données D1 dans votre wrangler.toml, puis vous y accédez via env.DB. D1 utilise des requêtes préparées, qui protègent vos requêtes de l’injection SQL en séparant le texte de la requête des valeurs.

 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’insertion de données suit le même schéma :

1await env.DB
2  .prepare("INSERT INTO posts (title, body, published) VALUES (?, ?, ?)")
3  .bind("Hello D1", "My first edge database post", 1)
4  .run();

Vous pouvez aussi regrouper plusieurs instructions pour les exécuter efficacement en un seul aller-retour, ce qui est l’approche recommandée lorsque vous avez plusieurs écritures liées.

Cloudflare D1 vs KV vs Postgres

Choisir la bonne primitive de stockage compte. Voici comment D1 se compare aux deux auxquelles on l’oppose le plus souvent.

BesoinMeilleur choixPourquoi
Données relationnelles, requêtes, jointuresD1Vrai SQL avec tables, index et transactions
Recherches clé-valeur simples, configuration, mise en cacheKVOptimisé pour des lectures rapides de clés uniques en périphérie
Grosse charge relationnelle existante, extensions complexesPostgres (par ex. via Hyperdrive)Moteur mature pour des charges lourdes et riches en fonctionnalités

En bref : utilisez KV quand vous avez juste besoin de récupérer une valeur par une clé aussi vite que possible. Utilisez D1 quand vos données sont relationnelles et que vous voulez les interroger en SQL. Optez pour une base de données Postgres complète (à laquelle les Workers peuvent se connecter, accélérée par Hyperdrive) lorsque vous avez une charge relationnelle vaste et établie ou besoin de fonctionnalités spécifiques à Postgres que SQLite n’offre pas.

Quand Cloudflare D1 est le bon choix

D1 convient parfaitement lorsque :

  • Vos données sont relationnelles et profitent de requêtes SQL, de jointures et d’index
  • Vous bâtissez sur Workers et voulez votre base de données sur la même plateforme
  • Votre charge est sporadique ou faible à modérée, de sorte que le paiement à la requête bat une instance toujours active
  • Vous voulez zéro surcharge opérationnelle : pas de provisionnement, de correctifs ni de pooling de connexions
  • Vous vous contentez de l’ensemble de fonctionnalités de SQLite, qui couvre la grande majorité des besoins applicatifs

Elle convient moins aux très grands jeux de données qui dépassent ses limites, ou aux charges qui dépendent d’extensions spécifiques à Postgres. Pour celles-ci, connectez plutôt une base de données dédiée depuis votre Worker.

Un cas d’usage réaliste

Une application D1 typique : un blog ou un petit backend SaaS où un Worker sert les requêtes, interroge des articles ou des enregistrements utilisateurs depuis D1, stocke les fichiers et images téléversés dans R2 , met en cache les valeurs chaudes dans KV et appelle éventuellement Workers AI pour une fonction comme le résumé. Tout tourne sur une seule plateforme, en périphérie, sans serveur et avec une facture qui évolue selon l’usage réel. C’est le même schéma d’architecture que celui derrière le système d’utilisateurs Cloudflare Pages que j’ai construit.

Gérer D1 visuellement

Exécuter des migrations et inspecter les données via la ligne de commande convient, mais un client graphique rend le travail quotidien plus rapide. Mon application de bureau gratuite Easy Cloudflare D1 vous permet de parcourir bases et tables, d’exécuter des requêtes et de gérer vos données D1 depuis une interface claire sous Windows, macOS et Linux, avec vos identifiants chiffrés localement sur votre propre machine. Et si votre stack associe D1 à KV pour la mise en cache, mon application gratuite Easy Cloudflare KV fait de même pour vos espaces de noms clé-valeur.

Points clés à retenir

  • D1 est une base de données SQL serverless bâtie sur SQLite, liée directement à Cloudflare Workers
  • L’offre gratuite couvre 5 millions de lectures et 100 000 écritures par jour avec 5 Go de stockage
  • La facturation se fait par ligne lue et écrite, pas par heure ; les bases inactives ne coûtent rien
  • Elle utilise un SQL standard avec des requêtes préparées sûres, donc la courbe d’apprentissage est minime
  • Utilisez KV pour les recherches clé-valeur, D1 pour le SQL relationnel et un Postgres dédié pour les charges lourdes ou spécifiques aux extensions
  • D1 se combine avec R2, KV et Workers AI pour bâtir des applications complètes en périphérie

Foire aux questions

Qu’est-ce que Cloudflare D1 ? D1 est une base de données SQL serverless bâtie sur SQLite qui tourne sur le réseau de Cloudflare et se lie directement aux Workers. Vous écrivez du SQL standard et ne provisionnez ni ne gérez jamais de serveur. Cloudflare gère le stockage, la durabilité et la mise à l’échelle.

Cloudflare D1 est-il gratuit ? Il y a une offre gratuite dans l’offre Workers Free : 5 millions de lignes lues et 100 000 lignes écrites par jour, avec 5 Go de stockage. Beaucoup de petites applications fonctionnent entièrement dans ces limites. L’offre Workers Paid relève substantiellement les quantités incluses.

Comment D1 est-il tarifé ? Vous payez pour les lignes lues et écrites, pas pour la disponibilité. Dans l’offre Paid, les 25 premiers milliards de lignes lues et les 50 premiers millions de lignes écrites par mois sont inclus, puis c’est 0,001 $ par million de lectures et 1,00 $ par million d’écritures, avec le stockage à 0,75 $ par Go-mois au-delà des 5 premiers Go. Il n’y a pas de frais d’egress.

Quelle est la différence entre D1 et KV ? KV est un magasin clé-valeur optimisé pour des lectures rapides de clés uniques, idéal pour la mise en cache et la configuration. D1 est une base de données SQL relationnelle pour des données structurées que vous voulez interroger avec jointures, index et transactions. Utilisez KV pour les recherches par clé, D1 pour les requêtes relationnelles.

D1 peut-il remplacer Postgres ? Pour de nombreuses applications petites à moyennes, oui, car SQLite couvre les besoins relationnels courants. Pour de très grands jeux de données, de lourdes charges d’écriture concurrentes ou des extensions spécifiques à Postgres, une base de données Postgres dédiée connectée depuis votre Worker (accélérée par Hyperdrive) est le meilleur choix.

Comment interroger D1 depuis un Worker ? Liez la base de données dans votre configuration wrangler et accédez-y via env.DB. Utilisez des requêtes préparées avec des paramètres liés, par exemple env.DB.prepare(“SELECT … WHERE id = ?”).bind(id).all(), ce qui protège les requêtes de l’injection SQL.