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