Skip to content
返回云服务

Cloudflare D1 SQLite 数据库

边缘 SQLite 数据库,全球只读副本,Worker 查询延迟低于 10ms。

Cloudflare进阶

为什么

D1 在边缘放 SQLite,自动只读副本 — 全球读取 5-10ms vs 单区域 Postgres 50-200ms。免费:5GB 存储、500 万行读/天。适合读多应用。

何时使用

用于博客、目录、配置、会话存储和读多 API。避免重写(单主库)、大连接(>5MB 结果)或需 Postgres 特性的应用。

如何做

1. 创建 DB — wrangler d1 create mydb(返回 database_id) 2. 绑定 — [[d1_databases]] binding="DB" database_name="mydb" database_id="..." 3. 迁移 — wrangler d1 migrations create mydb init,wrangler d1 migrations apply mydb 4. 查询 — env.DB.prepare("SELECT * FROM users WHERE id=?").bind(id).first() 5. 批量 — env.DB.batch([stmt1, stmt2]) 事务多语句 6. 备份 — wrangler d1 backup create mydb(时间点恢复) 7. 只读副本 — 自动,无需配置;写去主库,读命中最近副本

示例

// migrations/0001_init.sql CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT UNIQUE, created_at TEXT DEFAULT CURRENT_TIMESTAMP); CREATE INDEX idx_users_email ON users(email); // src/index.ts — D1 预处理语句查询 export default { async fetch(request: Request, env: Env): Promise<Response> { const url = new URL(request.url); if (url.pathname === "/api/users") { const { results } = await env.DB.prepare("SELECT id, email FROM users ORDER BY created_at DESC LIMIT 20").all(); return Response.json(results); } const id = url.pathname.split("/").pop(); const user = await env.DB.prepare("SELECT * FROM users WHERE id = ?").bind(id).first(); return user ? Response.json(user) : new Response("未找到", { status: 404 }); }, };

常见问题

  • ⚠写延迟 50-200ms — 单主区域,写不像读那样边缘本地
  • ⚠5MB 查询结果限制 — 大 SELECT 截断,用 LIMIT/OFFSET 分页
  • ⚠无实时触发器 — D1 不发变更事件,轮询或用 Durable Objects

最佳实践

  • ✓读取用只读副本 — D1 自动路由到最近副本,别在 KV 缓存
  • ✓CI 中跑迁移 — 部署步骤加 wrangler d1 migrations apply --remote
  • ✓事务用 batch() — 原子多语句,避免部分写入

常见问题解答

什么是Cloudflare D1 SQLite 数据库?它解决什么问题?

边缘 SQLite 数据库,全球只读副本,Worker 查询延迟低于 10ms。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手Cloudflare D1 SQLite 数据库?

两步即可跑通:① 创建 DB — wrangler d1 create mydb(返回 database_id);② 绑定 — [[d1_databases]] binding="DB" database_name="mydb" database_id="..."。建议先用免费套餐验证流程,再接入生产环境。

Cloudflare D1 SQLite 数据库 最容易踩的坑是什么?

最高频的问题是:写延迟 50-200ms — 单主区域,写不像读那样边缘本地。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

Cloudflare D1 SQLite 数据库 的最佳实践有哪些?

Cloudflare D1 SQLite 数据库 的最佳实践包括:读取用只读副本 — D1 自动路由到最近副本,别在 KV 缓存;CI 中跑迁移 — 部署步骤加 wrangler d1 migrations apply --remote;事务用 batch() — 原子多语句,避免部分写入。其中首条「读取用只读副本 — D1 自动路由到最近副本,别在 KV 缓存」应作为团队默认规范写入 IaC 模板。

Cloudflare D1 SQLite 数据库 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Cloudflare D1 SQLite 数据库 多数提供免费套餐,先在免费额度内验证再放量。