跳至主要内容

入门

先决条件

要开始使用加速,您需要以下内容

  • 一个 Prisma 数据平台工作区.
  • 一个使用 Prisma Client 4.16.1 或更高版本的项目。如果您的项目使用交互式事务,则需要使用 5.1.1 或更高版本。(我们始终建议使用最新版本的 Prisma。)
  • 一个托管的 PostgreSQL、MySQL/MariaDB、PlanetScale、CockroachDB 或 MongoDB 数据库。

1. 启用加速

导航到您的 Prisma 数据平台项目,选择一个环境,并通过提供您的数据库连接字符串并选择最靠近您数据库的区域来启用 Accelerate。

info

如果您需要 IP 允许列表或使用受信任 IP 地址的防火墙配置,请启用静态 IP 以增强安全性

2. 将 Accelerate 添加到您的应用程序

2.1. 更新您的数据库连接字符串

启用后,系统会提示您生成一个 API 密钥,您将在新的 Accelerate 连接字符串中使用该密钥来验证请求。

将您的直接数据库 URL 替换为新的 Accelerate 连接字符串。

.env
# New Accelerate connection string with generated API_KEY
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"

# Previous (direct) database connection string
# DATABASE_URL="postgresql://user:password@host:port/db_name?schema=public"

更新后的连接字符串将用作 Prisma 模式文件中的数据源 url

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

Prisma Migrate 和 Introspection 不适用于 prisma:// 连接字符串。为了继续使用这些功能,请在 .env 文件中添加一个名为 DIRECT_DATABASE_URL 的新变量,其值为直接数据库连接字符串

.env
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
DIRECT_DATABASE_URL="postgresql://user:password@host:port/db_name?schema=public"

然后在您的 Prisma 模式中的 datasource 块中添加一个名为 directUrl 的字段,内容如下

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_DATABASE_URL")
}

提供此配置后,迁移和内省将使用 directUrl 连接字符串,而不是 url 中定义的连接字符串。

directUrl 对您执行迁移和内省很有用。但是,您不需要 directUrl 就可以在应用程序中使用 Accelerate。

2.2. 安装 Accelerate Prisma Client 扩展

info

💡 Accelerate 需要 Prisma Client 版本 4.16.1 或更高版本,以及 @prisma/extension-accelerate 版本 1.0.0 或更高版本

安装最新版本的 Prisma Client 和 Accelerate Prisma Client 扩展

npm install @prisma/client@latest @prisma/extension-accelerate

2.3. 为 Accelerate 生成 Prisma Client

如果您使用的是 Prisma 版本 5.2.0 或更高版本,Prisma Client 将根据数据库连接字符串中的协议自动确定它应该如何连接到数据库。如果 DATABASE_URL 中的连接字符串以 prisma:// 开头,Prisma Client 将尝试使用 Prisma Accelerate 连接到您的数据库。

在使用 Prisma Accelerate 的长期运行应用程序服务器(例如部署在 AWS EC2 上的服务器)中,您可以通过执行以下命令生成 Prisma Client

npx prisma generate

在无服务器或边缘应用程序中使用 Prisma Accelerate 时,我们建议您运行以下命令来生成 Prisma Client

npx prisma generate --no-engine
info

--no-engine 标志可以防止在生成的 Prisma Client 中包含查询引擎文件,这可以确保应用程序的捆绑包大小保持较小。

警告

如果您的 Prisma 版本低于 5.2.0,请使用 --accelerate 选项生成 Prisma Client

npx prisma generate --accelerate

如果您的 Prisma 版本低于 5.0.0,请使用 --data-proxy 选项生成 Prisma Client

2.4. 使用 Accelerate 扩展您的 Prisma Client 实例

添加以下内容以使用 Accelerate 扩展您现有的 Prisma Client 实例

import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'

const prisma = new PrismaClient().$extends(withAccelerate())

如果您要部署到边缘运行时(如 Cloudflare Workers、Vercel Edge Functions、Deno Deploy 或 Supabase Edge Functions),请使用我们的边缘客户端

import { PrismaClient } from '@prisma/client/edge'
import { withAccelerate } from '@prisma/extension-accelerate'

const prisma = new PrismaClient().$extends(withAccelerate())

如果 VS Code 无法识别 $extends 方法,请参考 本节了解如何解决此问题。

info

如果您在应用程序中使用 Prisma 中间件,请确保它们在任何 Prisma Client 扩展(如 Accelerate)之前添加。例如

const prisma = new PrismaClient().$use(middleware).$extends(withAccelerate())

2.5. 在您的数据库查询中使用 Accelerate

withAccelerate 扩展主要做两件事

  • 它允许你在每个适用的模型方法中访问 cacheStrategy 字段,以便你为每个查询定义缓存策略。
  • 它将所有查询路由到连接池。

没有缓存策略,只使用连接池

如果你只是想利用 Accelerate 的连接池功能,而不应用缓存策略,你可以像以前一样运行查询,就像没有 Accelerate 一样。

通过启用 Accelerate 并提供 Accelerate 连接字符串,你的查询现在默认使用连接池。

定义缓存策略

使用新的 cacheStrategy 属性更新查询,该属性允许你为该特定查询定义缓存策略

const user = await prisma.user.findMany({
where: {
email: {
contains: '[email protected]',
},
},
cacheStrategy: { swr: 60, ttl: 60 },
})

在上面的示例中,swr: 60ttl: 60 表示 Accelerate 将在 60 秒内提供缓存数据,然后在 Accelerate 在后台获取最新数据的同时,再提供 60 秒的缓存数据。

你现在应该看到缓存查询的性能有所提高。

info

有关最适合你的应用程序的策略信息,请参阅 选择缓存策略

info

从 Prisma 版本 5.2.0 开始,你可以使用 Prisma Studio 和 Accelerate 连接字符串。