# Deno 数据库选型

Deno 能通过 npm 兼容层使用成熟数据库驱动，也能使用 Web/JSR 生态模块。选择依据应是数据模型、事务和部署环境，而不是“哪个包最像 Deno”。

| 数据层 | 适合 | Deno 接入 |
| --- | --- | --- |
| PostgreSQL | 关系数据、事务、复杂查询 | `npm:postgres`、`npm:pg`、Drizzle、Kysely |
| [SQLite](/docs/database/sqlite) | 单机、嵌入式、测试、轻服务 | `node:sqlite` 或兼容库；核对运行版本 |
| MongoDB | 文档模型、既有 Mongo 体系 | 官方 npm driver / Mongoose |
| Redis | cache、rate limit、短期状态 | 官方 npm client 或兼容服务 |
| [Supabase](/docs/database/supabase) | 托管 Postgres + Auth/Storage | 官方 npm SDK 或直接 Postgres |
| [Deno KV](/docs/database/kv) | 简单 key-value、原子操作、Deno 平台集成 | `Deno.openKv()`；先核对部署平台支持 |

## 通用连接边界

```bash
deno run \
  --allow-env=DATABASE_URL \
  --allow-net=db.example.com:5432 \
  src/main.ts
```

- 在模块或应用生命周期内复用连接池，不要每次请求新建。
- 密钥只来自环境或 secret store，不进入源码、日志和错误响应。
- migration 是发布步骤；应用启动时自动改 schema 会放大并发风险。
- serverless 实例会并发扩容，连接池上限要结合实例数计算。
- 测试至少覆盖连接失败、事务回滚、唯一约束与超时。

新 Deno Deploy 提供 PostgreSQL 关联、timeline 隔离和 Deno KV，但不同 timeline 的数据与迁移策略必须单独设计。详见 [Deploy 数据与 Cron](/docs/deploy/data-and-cron)。

官方参考：[Connecting to databases](https://docs.deno.com/examples/connecting_to_databases_tutorial/)、[Deno database examples](https://docs.deno.com/examples/?category=databases)。
