Cloudflare D1
Cloudflare D1 ,云端 SQLite 数据库,表现怪异,不建议生产使用。2022 年 11 月内测,2023 年 09 月公测,2024 年 04 月 01 日正式上线。
使用
D1 可以用于缓存主站的脱敏、活跃数据,供副站使用,如 Vercel 。建库 db ,建表 kv ,两个字段 k、v ,其中 v 是 JSON 格式文本。
推送表结构到 D1
- Prisma.js 6 支持
npx prisma db push到 D1 ,Prisma.js 7 建议使用 Cloudflare 官方的 wrangler npx drizzle-kit push
访问官网,选择 D1 数据库。
- 已读取行
- 已写入行
- 计量存储
- 总存储
点击数据库。
- 查询总数
- 已读取行
- 已写入行
- 已用存储
- 表数量
对 D1 使用 COUNT(*) 为全表扫描,假设表有 1 万行,查询 500 次就达到单日免费额度限制。建议另行建表,存储行数等数据,避免全表扫描。
点击控制台。输入 SQL 查询数据库,上下方向键浏览历史查询。查询完成,显示响应时间、查询时间、更改、已读取行、已写入行。
斜杠命令
| 命令 | 作用 |
|---|---|
| /clear | 清除控制台输出 |
| /help or /? | 显示提示 |
| /tables | 显示数据库的表。 |
| /bookmark | 数据库当前状态的书签 |
| /bookmark yyyy-mm-ddThh:mm:ss.mmmZ | 获取时间戳最近的书签 |
| /restore bookmark-id | 将数据库还原到特定时间点 |
API
// a.ts
import Cloudflare from 'cloudflare';
import dotenv from 'dotenv';
import fs from 'node:fs';
dotenv.config({ path: './.env', quiet: true });
const client = new Cloudflare({
apiToken: process.env.CLOUDFLARE_D1_TOKEN as string
});
const account_id = process.env.CLOUDFLARE_ACCOUNT_ID as string;
const d1_id = process.env.CLOUDFLARE_D1_ID as string;
(async () => {
const data = await client.d1.database.query(d1_id, {
account_id,
sql: 'SELECT v FROM KV WHERE k = ?',
params: ['books']
});
const rows = data.result[0].results as Array<{ v: string }>;
fs.writeFileSync('a.json', rows?.[0]?.v ?? '[]');
})();