跳转到内容
搜索文档

连接数据库

最后更新 查看 MarkdownAgent 设置

Cloudflare Workers 可以连接并查询 SQL 和 NoSQL 数据库中的数据,包括:

  • Cloudflare 自有的 D1,一款无服务器 SQL 数据库。
  • 传统托管关系型数据库(包括 Postgres 和 MySQL),使用 Hyperdrive(推荐)显著加速访问。
  • 无服务器数据库,包括 Supabase、MongoDB Atlas、PlanetScale 和 Prisma。

D1 SQL 数据库

D1 是 Cloudflare 自有的基于 SQL 的无服务器数据库。它针对从 Workers 进行全球访问进行了优化,可通过多个较小的(10GB)数据库横向扩展,例如按用户、按租户或按实体划分的数据库。与部分无服务器数据库类似,D1 的定价基于查询和存储成本。

数据库 库或驱动 连接方式
D1 Workers 绑定(binding),可与 PrismaDrizzle 及其他 ORM 集成 Workers 绑定(binding)REST API

传统 SQL 数据库

传统数据库使用 SQL 驱动通过 TCP 套接字连接数据库。TCP 是许多数据库(如 PostgreSQL 和 MySQL)用于客户端连接的事实标准协议。 这些驱动也与你常用的 ORM 库和查询构建器广泛兼容。

这也包括与 PostgreSQL 或 MySQL 兼容的无服务器数据库,如 SupabaseNeon 或 PlanetScale(MySQLPostgreSQL), 可通过原生 TCP 套接字和 Hyperdrive无服务器基于 HTTP 的驱动(详见下文)连接。

数据库 集成 库或驱动 连接方式
Postgres 直接连接 node-postgresPostgres.js 通过数据库驱动的 TCP 套接字,使用 Hyperdrive 获得最佳性能(可选,推荐)
MySQL 直接连接 mysql2mysql 通过数据库驱动的 TCP 套接字,使用 Hyperdrive 获得最佳性能(可选,推荐)

无服务器数据库

无服务器数据库可能提供对底层数据库的直接连接,或提供基于 HTTP 的代理和驱动(也称为无服务器驱动)。

对于 PostgreSQL 和 MySQL 无服务器数据库,你可以使用熟悉的原生数据库驱动和 ORM 直接连接底层数据库,并使用 Hyperdrive(推荐)加速连接并池化数据库连接。使用 Hyperdrive 时,连接池在所有 Cloudflare 区域中统一管理,并针对 Workers 的使用进行了优化。

你也可以使用无服务器驱动库连接数据库提供商管理的基于 HTTP 的代理。这些库同样可以为传统 SQL 数据库提供连接池,并减少建立安全连接所需的往返次数,与 Hyperdrive 类似。

数据库 库或驱动 连接方式
PlanetScale Hyperdrive (MySQL)Hyperdrive (PostgreSQL)@planetscale/database mysql2mysqlnode-postgresPostgres.js,或通过客户端库的 API
Supabase Hyperdrive@supabase/supabase-js node-postgresPostgres.js,或通过客户端库的 API
Prisma prisma 通过客户端库的 API
Neon Hyperdrive@neondatabase/serverless node-postgresPostgres.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 证书 呈现客户端证书。

后续步骤

这篇文档对您有帮助吗?