Cloudflare Workers 可以连接并查询 SQL 和 NoSQL 数据库中的数据,包括:
- Cloudflare 自有的 D1,一款无服务器 SQL 数据库。
- 传统托管关系型数据库(包括 Postgres 和 MySQL),使用 Hyperdrive(推荐)显著加速访问。
- 无服务器数据库,包括 Supabase、MongoDB Atlas、PlanetScale 和 Prisma。
D1 是 Cloudflare 自有的基于 SQL 的无服务器数据库。它针对从 Workers 进行全球访问进行了优化,可通过多个较小的(10GB)数据库横向扩展,例如按用户、按租户或按实体划分的数据库。与部分无服务器数据库类似,D1 的定价基于查询和存储成本。
| 数据库 | 库或驱动 | 连接方式 |
|---|---|---|
| D1 | Workers 绑定(binding),可与 Prisma ↗、Drizzle ↗ 及其他 ORM 集成 | Workers 绑定(binding)、REST API |
传统数据库使用 SQL 驱动通过 TCP 套接字连接数据库。TCP 是许多数据库(如 PostgreSQL 和 MySQL)用于客户端连接的事实标准协议。 这些驱动也与你常用的 ORM 库和查询构建器广泛兼容。
这也包括与 PostgreSQL 或 MySQL 兼容的无服务器数据库,如 Supabase、Neon 或 PlanetScale(MySQL 或 PostgreSQL), 可通过原生 TCP 套接字和 Hyperdrive 或无服务器基于 HTTP 的驱动(详见下文)连接。
| 数据库 | 集成 | 库或驱动 | 连接方式 |
|---|---|---|---|
| Postgres | 直接连接 | node-postgres ↗、Postgres.js ↗ | 通过数据库驱动的 TCP 套接字,使用 Hyperdrive 获得最佳性能(可选,推荐) |
| MySQL | 直接连接 | mysql2 ↗、mysql ↗ | 通过数据库驱动的 TCP 套接字,使用 Hyperdrive 获得最佳性能(可选,推荐) |
无服务器数据库可能提供对底层数据库的直接连接,或提供基于 HTTP 的代理和驱动(也称为无服务器驱动)。
对于 PostgreSQL 和 MySQL 无服务器数据库,你可以使用熟悉的原生数据库驱动和 ORM 直接连接底层数据库,并使用 Hyperdrive(推荐)加速连接并池化数据库连接。使用 Hyperdrive 时,连接池在所有 Cloudflare 区域中统一管理,并针对 Workers 的使用进行了优化。
你也可以使用无服务器驱动库连接数据库提供商管理的基于 HTTP 的代理。这些库同样可以为传统 SQL 数据库提供连接池,并减少建立安全连接所需的往返次数,与 Hyperdrive 类似。
| 数据库 | 库或驱动 | 连接方式 |
|---|---|---|
| PlanetScale ↗ | Hyperdrive (MySQL)、Hyperdrive (PostgreSQL)、@planetscale/database ↗ | mysql2、mysql、node-postgres、Postgres.js,或通过客户端库的 API |
| Supabase ↗ | Hyperdrive、@supabase/supabase-js ↗ | node-postgres、Postgres.js,或通过客户端库的 API |
| Prisma ↗ | prisma ↗ | 通过客户端库的 API |
| Neon ↗ | Hyperdrive、@neondatabase/serverless ↗ | node-postgres、Postgres.js,或通过客户端库的 API |
| Hasura ↗ | API | 通过 fetch() 的 GraphQL API |
| Upstash Redis ↗ | @upstash/redis ↗ | 通过客户端库的 API |
| TiDB Cloud ↗ | @tidbcloud/serverless ↗ | 通过客户端库的 API |
安装必要的包后,使用这些包提供的 API 连接数据库并执行操作。请参阅各服务的详细链接获取具体说明。
如果数据库需要身份验证,请使用 Wrangler secrets 安全存储凭据。为此,使用以下 wrangler secret 命令在 Cloudflare Workers 项目中创建 secret:
wrangler secret put <SECRET_NAME>然后,使用以下代码片段在代码中检索 secret 值:
const secretValue = env.<SECRET_NAME>;使用 secret 值对外部服务进行身份验证。例如,如果外部服务需要 API 密钥或数据库用户名和密码进行身份验证,请使用相关服务的库或 API 提供这些信息。
对于需要 mTLS 身份验证的服务,请使用 mTLS 证书 呈现客户端证书。
- 了解如何使用 Hyperdrive 连接现有 PostgreSQL 数据库。
- 发现可与 Workers 配合使用的其他存储选项。
- 使用 Cloudflare D1 创建你的第一个数据库。