独立开发者最头疼的事之一就是数据库。

租个 RDS?最便宜的 MySQL 也要 $10/月起,还没算存储和流量。自己装?要操心备份、升级、主从复制、连接池……Supabase 和 PlanetScale 很好,但免费套餐一过期就开始烧钱。

D1 是 Cloudflare 的 Serverless 数据库,基于 SQLite。免费 5GB 存储、每天 500 万次读、10 万次写,永久免费。付费后 $0.001/百万次读,存储 $0.75/GB-月,而且出口流量完全免费

对独立开发者来说,这意味着你可以在 $0 的成本下跑一个正经的数据库,等到真正有用户了再按量付费。

  • 免费额度大:5GB 存储 + 500 万行读/天,永久免费
  • SQLite 兼容:标准 SQL 语法,迁移零成本
  • 全球读副本:自动跨区域复制,延迟低
  • 零出口费:数据传出完全免费
  • 与 Workers 原生集成:一个 Binding 搞定,不需要连接字符串

D1 是一个 Serverless SQL 数据库,底层基于 SQLite。你可以把它理解为”不用运维的 SQLite”——你写标准的 SQL,D1 帮你处理存储、备份、复制、扩展。

和传统数据库最大的区别是:没有连接池的概念。D1 通过 Workers Binding 直接调用,每次查询都是一个独立的请求,不需要维护数据库连接。这意味着你不用担心连接数耗尽、连接泄漏这些问题。

D1 的架构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
用户请求

┌─────────────┐
Worker │ ← 你的业务逻辑
└─────────────┘
↓ (Binding)
┌─────────────┐
D1 │ ← Serverless 数据库
│ ┌───────┐ │
│ │ Primary│ │ ← 写入节点
│ └───┬───┘ │
│ ↓ │
│ ┌─────────┐ │
│ │Replicas │ │ ← 全球只读副本(ENAM, WNAM, WEUR, EEUR, APAC
│ └─────────┘ │
└─────────────┘

写入流程:Worker 通过 Binding 发起写请求 → D1 Primary 节点处理 → 返回结果。写入总是走 Primary 节点,保证强一致性。

读取流程:Worker 发起读请求 → D1 根据 Session 配置路由到最近的 Replica → 返回结果。使用 Sessions API 可以保证读到最新写入的数据(Sequential Consistency)。

D1 vs 其他数据库:到底差在哪?

对比项 Cloudflare D1 Supabase PlanetScale Neon
免费存储 5GB 500MB 5GB 512MB
免费读操作 500 万行/天 无限(有限制) 10 亿行/月 191 小时/月
免费写操作 10 万行/天 无限(有限制) 5000 万行/月 191 小时/月
出口费 免费 5GB 后收费 免费 免费
数据库类型 SQLite PostgreSQL MySQL(兼容) PostgreSQL
全球分布 自动读副本 单区域 多区域 多区域
Workers 集成 原生 Binding 需连接字符串 需连接字符串 需连接字符串
付费起步 $5/月(Workers) $25/月 $29/月 $19/月