Prisma Client のインスタンス化
次の例は、生成されたクライアントをデフォルトパスからインポートしてインスタンス化する方法を示しています。
- TypeScript
- JavaScript
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()
ヒント
PrismaClient
は、コンストラクタパラメータを使用してさらにカスタマイズできます。たとえば、ログレベル、トランザクションオプションを設定したり、エラーフォーマットをカスタマイズしたりできます。
PrismaClient
インスタンスの数が重要である
アプリケーションは通常、PrismaClient
のインスタンスを 1 つだけ作成する必要があります。これを実現する方法は、Prisma ORM を長時間実行アプリケーションで使用しているか、サーバーレス環境で使用しているかによって異なります。
その理由は、PrismaClient
の各インスタンスが接続プールを管理するため、多数のクライアントがデータベース接続制限を使い果たす可能性があるためです。これは、すべてのデータベースコネクタに当てはまります。
MongoDB コネクタを使用する場合、接続は MongoDB ドライバの接続プールによって管理されます。リレーショナルデータベースコネクタを使用する場合、接続は Prisma ORM の接続プールによって管理されます。PrismaClient
の各インスタンスは、独自のプールを作成します。
-
各クライアントは、クエリエンジンの独自のインスタンスを作成します。
-
各クエリエンジンは、デフォルトのプールサイズで接続プールを作成します。
- リレーショナルデータベースの場合は
num_physical_cpus * 2 + 1
- MongoDB の場合は
100
- リレーショナルデータベースの場合は
-
接続が多すぎると、データベースの速度が低下し始め、最終的には次のようなエラーが発生する可能性があります。
Error in connector: Error querying the database: db error: FATAL: sorry, too many clients already
at PrismaClientFetcher.request