メインコンテンツにスキップ

リードレプリカ

リードレプリカを使用すると、高トラフィックのワークロードに対して、データベースレプリカ間でワークロードを分散できます。リードレプリカ拡張機能 (@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などのすべての読み取り操作はデータベースレプリカに対して実行されます。createupdateなどのすべての書き込み操作、および$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(...)
© . All rights reserved.