[ PROMPT_NODE_24054 ]
D1 说明文档
[ SKILL_DOCUMENTATION ]
# Cloudflare D1 数据库
关于 Cloudflare D1 的专家指南,这是一个专为跨多个数据库水平扩展而设计的无服务器 SQLite 数据库。
## 概述
D1 是 Cloudflare 的托管式无服务器数据库,具有以下特点:
- SQLite SQL 语义和兼容性
- 通过时间旅行(Time Travel,30 天时间点恢复)实现内置灾难恢复
- 水平扩展架构(每个数据库 10 GB)
- 支持 Worker 和 HTTP API 访问
- 定价仅基于查询和存储成本
**架构理念**:D1 针对每个用户、每个租户或每个实体的数据库模式进行了优化,而不是单一的大型数据库。
## 快速入门
bash
# 创建数据库
wrangler d1 create
# 执行迁移
wrangler d1 migrations apply --remote
# 本地开发
wrangler dev
## 核心查询方法
typescript
// .all() - 返回所有行;.first() - 返回第一行或 null;.first(col) - 返回单列值
// .run() - 执行 INSERT/UPDATE/DELETE;.raw() - 返回数组的数组(高效)
const { results, success, meta } = await env.DB.prepare('SELECT * FROM users WHERE active = ?').bind(true).all();
const user = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first();
## 批量操作
typescript
// 在单次往返中执行多个查询(原子事务)
const results = await env.DB.batch([
env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(1),
env.DB.prepare('SELECT * FROM posts WHERE author_id = ?').bind(1),
env.DB.prepare('UPDATE users SET last_access = ? WHERE id = ?').bind(Date.now(), 1)
]);
## 会话 API(付费计划)
typescript
// 为分析/迁移创建长时间运行的会话(最长 15 分钟)
const session = env.DB.withSession();
try {
await session.prepare('CREATE INDEX idx_heavy ON large_table(column)').run();
await session.prepare('ANALYZE').run();
} finally {
session.close(); // 务必关闭以释放资源
}
## 读取副本(付费计划)
typescript
// 从最近的副本读取以降低延迟(自动故障转移)
const user = await env.DB_REPLICA.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first();
// 写入操作始终发送到主库
await env.DB.prepare('UPDATE users SET last_login = ? WHERE id = ?').bind(Date.now(), userId).run();
## 平台限制
| 限制 | 免费层级 | 付费计划 |
|-------|-----------|------------|
| 数据库大小 | 500 MB | 每个数据库 10 GB |
| 行大小 | 最大 1 MB | 最大 1 MB |
| 查询超时 | 30 秒 | 30 秒 |