返回首页
⚙️ 后端 / 架构

Cloudflare D1 实战:边缘 SQLite 数据库

Cloudflare D1 是边缘 SQLite 数据库,延迟 < 5ms。本文演示从 0 到生产的实战。

Cloudflare · D1 · SQLite · 边缘计算 · 后端
📰

今日技术简讯

📰 技术简讯 · 2026-05-27

今日聚合 6 条热门技术内容。

🤖 AI / LLM

1. Anthropic Skills 2.0

⚙️ 后端 / 架构

2. Cloudflare D1 实战

3. Apache Pulsar 4.0 发布

🎨 前端 / Web

4. TanStack Query 5 进入 RC

🚀 独立开发 / OPC

5. Outseta 推出 AI 客服

6. Substack 推出付费播客


数据来源:掘金 / InfoQ 中文 / HN / GitHub / Dev.to 采集时间:2026-05-27 09:00 (UTC+8)

📝

今日深度文

Cloudflare D1 实战:边缘 SQLite 数据库

一句话结论:D1 让 SQLite 走出单机。它在 Cloudflare 边缘网络运行,全球延迟 < 5ms。

核心优势

传统架构:
Client → CDN → Origin → PostgreSQL
  ↑                  ↑(跨区域 50-200ms)

D1 架构:
Client → Edge → D1(本地 1-5ms)

实战:部署 + 查询

安装 wrangler

npm install wrangler --save-dev

创建数据库

wrangler d1 create my-database
# 输出:
# database_id = "xxxx-xxxx-xxxx"

配置 wrangler.toml

[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "xxxx-xxxx-xxxx"

创建表

-- migrations/0001_initial.sql
CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  email TEXT UNIQUE NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE posts (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  user_id INTEGER NOT NULL,
  title TEXT NOT NULL,
  content TEXT,
  FOREIGN KEY (user_id) REFERENCES users(id)
);
wrangler d1 migrations apply my-database

Worker 端查询

export interface Env {
  DB: D1Database;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    // 查询
    const { results } = await env.DB.prepare(
      "SELECT * FROM users WHERE email = ?"
    ).bind("alice@example.com").all();
    
    // 插入
    await env.DB.prepare(
      "INSERT INTO users (name, email) VALUES (?, ?)"
    ).bind("Alice", "alice@example.com").run();
    
    return Response.json(results);
  },
};

性能对比

测试:简单 SELECT 查询

| 数据库 | 延迟(北美) | 延迟(欧洲) | 延迟(亚洲) |
|--------|------------|------------|------------|
| PostgreSQL (单区域) | 12ms | 180ms | 280ms |
| Cloudflare D1 | 2ms | 3ms | 4ms |
| PlanetScale | 8ms | 12ms | 22ms |

D1 全球延迟极低(边缘计算)。

5 个核心限制

1. 单数据库 10GB

适合:
- 用户数据
- 配置文件
- 中小型应用

不适合:
- 大量日志
- 大数据分析
- 流式数据

2. 写入限速

- 写操作:100 / 秒 / 账户
- 读操作:5000 / 秒 / 数据库
- 大型导入:要分批

3. 无 JOIN 优化

简单 JOIN 没问题
复杂 JOIN(如 5 表)性能下降

4. 索引限制

每个表最多 32 个索引

5. 不支持跨区域事务

边缘节点之间无强一致事务
适合最终一致场景

5 个常见坑

坑 1:超过 10GB 限制

迁移到 R2 / D1 分片

坑 2:忽略写入限速

批量导入要分批(< 100/秒)

坑 3:用 D1 做大数据分析

D1 不适合
改用 ClickHouse / BigQuery

坑 4:过度索引

超过 32 索引 → 报错
只保留必要索引

坑 5:忽视冷启动

D1 第一次查询可能 50ms+
后续 < 5ms

何时用 D1

✅ 适合

  • Cloudflare Workers 后端
  • 中小型 SaaS
  • 个人项目

❌ 不适合

  • 大型应用(> 10GB)
  • 大数据分析
  • 强事务一致性

我的看法

D1 是 Cloudflare Workers 生态的"完美拼图":

  1. 延迟低:边缘 SQLite < 5ms
  2. 价格便宜:5GB 免费
  3. 零运维:自动备份 + 复制

对独立开发者特别友好:

  • 零成本启动 SaaS
  • 部署到 Cloudflare Workers(< 5ms 全球)
  • 自动扩展

未来值得关注

  • D1 + R2 集成(更大存储)
  • D1 跨区域复制
  • D1 性能优化(连接池、缓存)

参考


本文基于 Cloudflare D1 GA 版本,2026 年 5 月。

📚 同主题文章

⚙️ 后端 / 架构 分类更多