跳转到内容
搜索文档

快速入门

最后更新 查看 MarkdownAgent 设置

Hyperdrive 加速从 Cloudflare Workers 访问现有数据库,使单区域数据库也能像全球分布式一样。

通过在 Cloudflare 网络内维护到数据库的连接池,Hyperdrive 在发送查询前可减少七次到数据库的往返:TCP 握手(1 次)、TLS 协商(3 次)和数据库认证(3 次)。

Hyperdrive 能区分数据库的读查询和写查询,并缓存最常见的读查询,提升性能并减轻源数据库负载。

本指南将引导你完成:

  • 创建第一个 Hyperdrive 配置。
  • 创建 Cloudflare Worker 并将其绑定到 Hyperdrive 配置。
  • 从 Worker 建立到公有数据库的连接。

前置条件

开始之前,请确保已完成以下步骤:

  1. 若尚未注册,请注册 Cloudflare 账户
  2. 安装 Node.js。建议使用 nvmVolta 等 Node 版本管理器以避免权限问题并切换 Node.js 版本。Wrangler 需要 Node 16.17.0 或更高版本。
  3. 拥有可公开访问的 PostgreSQL 或 MySQL(或兼容)数据库。若数据库在私有网络中,请参阅使用 Workers VPC 连接私有数据库

1. 登录

创建 Hyperdrive 绑定前,运行以下命令使用 Cloudflare 账户登录:

npx wrangler login

将跳转到要求登录 Cloudflare 仪表板的网页。登录后会询问是否允许 Wrangler 更改 Cloudflare 账户。向下滚动并选择 Allow(允许) 继续。

2. 创建 Worker

运行以下命令创建名为 hyperdrive-tutorial 的新项目:

npm create cloudflare@latest -- hyperdrive-tutorial

进行设置时,请选择以下选项:

  • 对于 What would you like to start with?,选择 Hello World example
  • 对于 Which template would you like to use?,选择 Worker only
  • 对于 Which language do you want to use?,选择 TypeScript
  • 对于 Do you want to use git for version control?,选择 Yes
  • 对于 Do you want to deploy your application?,选择 No(部署前我们还会做一些修改)。

这将创建新的 hyperdrive-tutorial 目录,包含:

  • 位于 src/index.ts"Hello World" Worker
  • wrangler.jsonc 配置文件。wrangler.jsonchyperdrive-tutorial Worker 连接 Hyperdrive 的方式。

启用 Node.js 兼容性

数据库驱动需要 Node.js 兼容性,须为 Workers 项目配置。

要为 Worker 或 Pages 项目启用内置运行时 API 和 polyfill,请在你的 Wrangler 配置文件中添加 nodejs_compat 兼容性标志,并将兼容性日期设置为 2024 年 9 月 23 日或更高版本。这将为 Workers 项目启用 Node.js 兼容性

{
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Set this to today's date
	"compatibility_date": "2026-08-17"
}
compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-17"

3. 将 Hyperdrive 连接到数据库

Hyperdrive 通过连接数据库、全球池化数据库连接并通过 Cloudflare 网络加速数据库访问来工作。

它将提供仅可从 Worker 访问的安全连接字符串,用于通过 Hyperdrive 连接数据库。 这意味着可将 Hyperdrive 连接字符串与现有驱动或 ORM 库配合使用,无需对代码做重大更改。

要创建第一个 Hyperdrive 数据库配置,进入刚为 Workers 项目创建的目录:

cd hyperdrive-tutorial

创建第一个 Hyperdrive 需要:

  • 数据库的 IP 地址(或主机名)和端口。
  • 数据库用户名(例如 hyperdrive-demo)。
  • 该用户名对应的密码。
  • 希望 Hyperdrive 连接的数据库名称,例如 postgresmysql

Hyperdrive 接受数据库驱动常用的连接字符串格式组合上述参数:


postgres://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name

大多数数据库提供商会提供可直接复制到 Hyperdrive 的连接字符串。

要创建 Hyperdrive 连接,运行 wrangler 命令,将 --connection-string 标志的占位值替换为现有数据库的值:

npx wrangler hyperdrive create <YOUR_CONFIG_NAME> --connection-string="postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"

mysql://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name

大多数数据库提供商会提供可直接复制到 Hyperdrive 的连接字符串。

要创建 Hyperdrive 连接,运行 wrangler 命令,将 --connection-string 标志的占位值替换为现有数据库的值:

npx wrangler hyperdrive create <YOUR_CONFIG_NAME> --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"

若成功,命令会输出新的 Hyperdrive 配置:

{
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<example id: 57b7076f58be42419276f058a8968187>"
		}
	]
}

复制 id 字段:下一步将用它使 Worker 脚本可访问 Hyperdrive。

4. 将 Worker 绑定到 Hyperdrive

你必须在 Wrangler 配置文件 中创建绑定,Worker 才能连接 Hyperdrive 配置。绑定(binding) 使 Worker 能够访问 Cloudflare 开发者平台上的资源(如 Hyperdrive)。

要将 Hyperdrive 配置绑定到 Worker,请在 Wrangler 文件末尾添加以下内容:

{
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<YOUR_DATABASE_ID>" // the ID associated with the Hyperdrive you just created
		}
	]
}
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"

具体说明:

  • binding(绑定名称)设置的值(字符串)将在 Worker 中引用此数据库。本教程中将绑定命名为 HYPERDRIVE
  • 绑定必须是有效的 JavaScript 变量名。例如 binding = "hyperdrive"binding = "productionDB" 均为有效名称。
  • 绑定在 Worker 中可通过 env.<BINDING_NAME> 访问。

若开发时使用本地数据库,可在 Hyperdrive 配置中添加 localConnectionString,填入数据库连接字符串:

{
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<YOUR_DATABASE_ID>", // the ID associated with the Hyperdrive you just created
			"localConnectionString": "<LOCAL_DATABASE_CONNECTION_URI>"
		}
	]
}
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"
localConnectionString = "<LOCAL_DATABASE_CONNECTION_URI>"

5. 对数据库运行查询

创建 Hyperdrive 配置并绑定到 Worker 后,可对数据库运行查询。

安装数据库驱动

连接数据库需要数据库驱动以进行认证和查询。本教程使用 node-postgres (pg),最常用的 PostgreSQL 驱动之一。

要安装 pg,确保在 hyperdrive-tutorial 目录中。打开终端运行以下命令:

# This should install v8.13.0 or later
npm i pg

若使用 TypeScript,还应安装 pg 的类型定义:

# This should install v8.13.0 or later
npm i -D @types/pg

安装驱动后,即可创建查询数据库的 Worker 脚本。

连接数据库需要数据库驱动以进行认证和查询。本教程使用 mysql2,最常用的 MySQL 驱动之一。

要安装 mysql2,确保在 hyperdrive-tutorial 目录中。打开终端运行以下命令:

# This should install v3.13.0 or later
npm i mysql2

安装驱动后,即可创建查询数据库的 Worker 脚本。

编写 Worker

设置数据库后,将从 Worker 内运行 SQL 查询。

打开 hyperdrive-tutorial Worker 的 index.ts 文件。

index.ts 是配置 Worker 与 Hyperdrive 交互的地方。

用以下代码填充 index.ts 文件:

// pg 8.13.0 or later is recommended
import { Client } from "pg";

export interface Env {
	// If you set another name in the Wrangler config file as the value for 'binding',
	// replace "HYPERDRIVE" with the variable name you defined.
	HYPERDRIVE: Hyperdrive;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		// Create a new client on each request. Hyperdrive maintains the underlying
		// database connection pool, so creating a new client is fast.
		const sql = new Client({
			connectionString: env.HYPERDRIVE.connectionString,
		});

		try {
			// Connect to the database
			await sql.connect();

			// Sample query
			const results = await sql.query(`SELECT * FROM pg_tables`);

			// Return result rows as JSON
			return Response.json(results.rows);
		} catch (e) {
			console.error(e);
			return Response.json(
				{ error: e instanceof Error ? e.message : e },
				{ status: 500 },
			);
		}
	},
} satisfies ExportedHandler<Env>;

收到请求后,上述代码执行以下操作:

  1. 使用 Hyperdrive 连接字符串创建通过 Hyperdrive 连接数据库的新数据库客户端。
  2. 通过 await sql.query() 发起查询,输出数据库中所有表(用户和系统创建)作为示例查询。
  3. 以 JSON 将响应返回客户端。请求结束时 Hyperdrive 自动清理客户端连接,并在池中保持底层数据库连接打开以供复用。

设置数据库后,将从 Worker 内运行 SQL 查询。

打开 hyperdrive-tutorial Worker 的 index.ts 文件。

index.ts 是配置 Worker 与 Hyperdrive 交互的地方。

用以下代码填充 index.ts 文件:

// mysql2 v3.13.0 or later is required
import { createConnection } from "mysql2/promise";

export interface Env {
	// If you set another name in the Wrangler config file as the value for 'binding',
	// replace "HYPERDRIVE" with the variable name you defined.
	HYPERDRIVE: Hyperdrive;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		// Create a new connection on each request. Hyperdrive maintains the underlying
		// database connection pool, so creating a new connection is fast.
		const connection = await createConnection({
			host: env.HYPERDRIVE.host,
			user: env.HYPERDRIVE.user,
			password: env.HYPERDRIVE.password,
			database: env.HYPERDRIVE.database,
			port: env.HYPERDRIVE.port,

			// The following line is needed for mysql2 compatibility with Workers
			// mysql2 uses eval() to optimize result parsing for rows with > 100 columns
			// Configure mysql2 to use static parsing instead of eval() parsing with disableEval
			disableEval: true,
		});

		try {
			// Sample query
			const [results, fields] = await connection.query("SHOW tables;");

			// Return result rows as JSON
			return new Response(JSON.stringify({ results, fields }), {
				headers: {
					"Content-Type": "application/json",
					"Access-Control-Allow-Origin": "*",
				},
			});
		} catch (e) {
			console.error(e);
			return Response.json(
				{ error: e instanceof Error ? e.message : e },
				{ status: 500 },
			);
		}
	},
} satisfies ExportedHandler<Env>;

收到请求后,上述代码执行以下操作:

  1. 使用 Hyperdrive 连接字符串创建通过 Hyperdrive 连接数据库的新数据库客户端。
  2. 通过 await connection.query 发起查询,输出数据库中所有表(用户和系统创建)作为示例查询。
  3. 以 JSON 将响应返回客户端。请求结束时 Hyperdrive 自动清理客户端连接,并在池中保持底层数据库连接打开以供复用。

在开发模式下运行(可选)

部署前可通过 wrangler dev 在本地测试 Worker。这会在本机运行 Worker 代码同时连接数据库。

localConnectionString 字段支持本地和远程数据库,允许从本地运行的 Worker 项目直接连接数据库。需要时须指定 SSL/TLS 模式(Postgres 为 sslmode=require,MySQL 为 sslMode=REQUIRED)。

本地开发连接数据库时,在 wrangler.jsonc 中配置 localConnectionString

{
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "your-hyperdrive-id",
			"localConnectionString": "postgres://user:password@your-database-host:5432/database",
		},
	],
}

或设置环境变量:

export CLOUDFLARE_HYPERDRIVE_LOCAL_CONNECTION_STRING_HYPERDRIVE="postgres://user:password@your-database-host:5432/database"

然后启动本地开发:

npx wrangler dev

6. 部署 Worker

现在可部署 Worker 使项目在 Internet 上可访问。部署 Worker 请运行:

npx wrangler deploy
# Outputs: https://hyperdrive-tutorial.<YOUR_SUBDOMAIN>.workers.dev

现在可访问新创建项目的 URL 以查询实时数据库。

例如,若新 Worker 的 URL 为 hyperdrive-tutorial.<YOUR_SUBDOMAIN>.workers.dev,访问 https://hyperdrive-tutorial.<YOUR_SUBDOMAIN>.workers.dev/ 会向 Worker 发送直接查询数据库的请求。

完成本教程后,你已创建 Hyperdrive 配置、访问该数据库的 Worker,并在全球部署项目。

后续步骤

若有功能请求或发现 bug,请加入 Cloudflare 开发者 Discord 社区 直接向 Cloudflare 团队反馈。

这篇文档对您有帮助吗?