Prismaのトランザクションを使うと、データの一貫性を保つことができるので便利です。
しかし、注意点として prisma.$transaction()
を使用する際にタイムアウトが発生する可能性があります。
タイムアウトの原因
- 処理を多過ぎる
- クエリが複雑すぎる
- データ量が多い
- ネットワークやDBの負荷が高い
これらの要因で処理時間が長くなると、**Prismaのデフォルトタイムアウト5秒(5000ms
)に引っかかることがあります。
回避策
-
トランザクション内の処理を最適化
・不要な処理が要因となって処理に時間がかかっていないか -
タイムアウト時間を延長する(timeout オプションを指定)
・await prisma.$transaction(transactions, { timeout: 10000 }); // 10秒に延長
-
トランザクション内の処理を見直す
・トランザクションを使用し、一貫性を保証する必要が本当にあるかを見直す
まとめ
最初は問題なく動作していても、データが増えるにつれて処理が重くなり、予期しないタイムアウトが発生する可能性があります。
開発環境で問題なくても、本番環境等で問題が起きてしまった際に取り返しのつかないケースが出てくるかと思われます。
そのため、将来的なデータ量の増加やパフォーマンスの劣化を考慮しながら開発を進めていくことをおすすめします!!