[ PROMPT_NODE_24124 ]
Hyperdrive 设计模式
[ SKILL_DOCUMENTATION ]
# 模式 (Patterns)
请参阅 [README.md](./README.md), [configuration.md](./configuration.md), [api.md](./api.md)。
## 高流量读密集型
typescript
const sql = postgres(env.HYPERDRIVE.connectionString, {max: 5, prepare: true});
// 可缓存:热门内容
const posts = await sql`SELECT * FROM posts WHERE published = true ORDER BY views DESC LIMIT 20`;
// 可缓存:用户资料
const [user] = await sql`SELECT id, username, bio FROM users WHERE id = ${userId}`;
**优势:** 热门内容/资料已缓存(60秒),连接池可处理流量峰值。
## 读写混合型
typescript
interface Env {
HYPERDRIVE_CACHED: Hyperdrive; // max_age=120
HYPERDRIVE_REALTIME: Hyperdrive; // 禁用缓存
}
// 读取:已缓存
if (req.method === "GET") {
const sql = postgres(env.HYPERDRIVE_CACHED.connectionString, {prepare: true});
const products = await sql`SELECT * FROM products WHERE category = ${cat}`;
}
// 写入:无缓存(即时一致性)
if (req.method === "POST") {
const sql = postgres(env.HYPERDRIVE_REALTIME.connectionString, {prepare: true});
await sql`INSERT INTO orders ${sql(data)}`;
}
## 分析仪表板
typescript
const client = new Client({connectionString: env.HYPERDRIVE.connectionString});
await client.connect();
// 聚合查询已缓存(使用固定时间戳以支持缓存)
const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
const dailyStats = await client.query(`
SELECT DATE(created_at) as date, COUNT(*) as orders, SUM(amount) as revenue
FROM orders WHERE created_at >= $1
GROUP BY DATE(created_at) ORDER BY date DESC
`, [thirtyDaysAgo]);
const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
const topProducts = await client.query(`
SELECT p.name, COUNT(oi.id) as count, SUM(oi.quantity * oi.price) as revenue
FROM order_items oi JOIN products p ON oi.product_id = p.id
WHERE oi.created_at >= $1
GROUP BY p.id, p.name ORDER BY revenue DESC LIMIT 10
`, [sevenDaysAgo]);
**优势:** 昂贵的聚合查询已缓存(避免使用 NOW() 以确保可缓存性),仪表板加载即时,降低数据库负载。
## 多租户
typescript
const tenantId = req.headers.get("X-Tenant-ID");
const sql = postgres(env.HYPERDRIVE.connectionString, {prepare: true});
// 租户范围的查询被单独缓存
const docs = await sql`
SELECT * FROM documents
WHERE tenant_id = ${tenantId} AND deleted_at IS NULL
ORDER BY updated_at DESC LIMIT 50
`;
**优势:** 每个租户