リードレプリカ
リードレプリカを使用すると、トラフィックの多いワークロードのために、ワークロードをデータベースレプリカに分散できます。リードレプリカ拡張機能 read replicas extension, @prisma/extension-read-replicas
は、Prisma Client に読み取り専用データベースレプリカのサポートを追加します。
リードレプリカ拡張機能は、Prisma ORM バージョン 5.2.0 以降をサポートしています。バグを見つけた場合やフィードバックがある場合は、GitHub issue をこちらに作成してください。
リードレプリカ拡張機能のセットアップ
拡張機能をインストール
npm install @prisma/extension-read-replicas
Prisma Client インスタンスを拡張して拡張機能を初期化し、拡張機能の 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 issue をこちらに作成してください。
複数のデータベースレプリカの設定
`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(...)