读取副本
读取副本允许您在数据库副本之间分配工作负载,以处理高流量工作负载。该 读取副本扩展,@prisma/extension-read-replicas
,为 Prisma 客户端添加了对只读数据库副本的支持。
读取副本扩展支持 Prisma ORM 版本 5.2.0 及更高版本。如果您遇到错误或有任何反馈,请在 GitHub 上创建一个问题 这里.
设置读取副本扩展
安装扩展
npm install @prisma/extension-read-replicas
通过扩展 Prisma 客户端实例来初始化扩展,并在扩展的url
选项中提供指向您的读取副本的连接字符串。
import { PrismaClient } from '@prisma/client'
import { readReplicas } from '@prisma/extension-read-replicas'
const prisma = new PrismaClient().$extends(
readReplicas({
url: process.env.DATABASE_URL_REPLICA,
})
)
// Query is run against the database replica
await prisma.post.findMany()
// Query is run against the primary database
await prisma.post.create({
data: {/** */},
})
所有读取操作,例如 findMany
,将在上述设置的数据库副本上执行。所有写入操作(例如 create
、update
)和 $transaction
查询将在您的主数据库上执行。
如果您遇到错误或有任何反馈,请在 GitHub 上创建一个问题 这里.
配置多个数据库副本
url
属性还接受一个值数组,即您要配置的所有数据库副本的数组。
const prisma = new PrismaClient().$extends(
readReplicas({
url: [
process.env.DATABASE_URL_REPLICA_1,
process.env.DATABASE_URL_REPLICA_2,
],
})
)
如果您配置了多个读取副本,则将随机选择一个数据库副本来执行您的查询。
对您的主数据库执行读取操作
您可以使用 $primary()
方法显式地对您的主数据库执行读取操作。
const posts = await prisma.$primary().post.findMany()
对数据库副本执行操作
您可以使用 $replica()
方法显式地对副本而不是您的主数据库执行您的查询。
const result = await prisma.$replica().user.findFirst(...)