FAQ
Prisma Accelerateで静的IPを有効にするのはいつですか?
セキュリティ設定でIP許可リストが必要な場合、または信頼できるIPからのアクセスのみを許可するファイアウォールを実装している場合は、Accelerateの静的IPを有効にして、制御された安全なデータベース接続を確保します。
Platform ConsoleでAccelerateの静的IPを有効にする方法の詳細をご覧ください。
静的IPとは何ですか?
静的IPアドレスは、固定されたIPv4またはIPv6アドレスです。予測不可能に変化する動的IPアドレスとは異なり、静的IPアドレスからのトラフィックは簡単に識別できます。
ℹ️ 既存または新規プロジェクト環境でAccelerateの静的IPサポートを有効にするには、ワークスペースがProまたはBusinessプランである必要があります。詳細については、料金ページをご覧ください。
予期しないキャッシュの動作が時々見られるのはなぜですか?
Accelerateのキャッシュは、プロジェクトからの負荷が高い場合に最高のパフォーマンスを発揮します。キャッシュへのデータのコミットや古いデータの更新など、多くのキャッシュ操作は非同期的に行われます。Accelerateのベンチマークを行う際は、ループまたは負荷テストのアプローチで行うことをお勧めします。これにより、高負荷のシナリオをより良く模倣し、低頻度操作からの外れ値を減らすことができます。
Prismaの操作はHTTP経由でAccelerateに送信されます。その結果、Accelerateへの最初のリクエストはHTTPハンドシェイクを確立する必要があり、その結果として追加の遅延が発生する可能性があります。将来的には、この初回リクエストの遅延を削減する方法を検討しています。
Accelerateの料金はいくらですか?
詳細については、Accelerateの料金ページをご覧ください
VS Codeが$extends
メソッドを認識しません
Accelerate用のPrisma Client拡張機能を、現在VS Codeで開いている既存のプロジェクトに追加すると、エディタが$extends
メソッドをすぐに認識しない場合があります。
これは、TypeScriptサーバーが再生成されたPrisma Clientをまだ認識していない問題である可能性があります。これを解決するには、TypeScriptを再起動する必要があります。
- VS Codeで、コマンドパレットを開きます。F1キーを押すか、表示 > コマンドパレットを選択して実行できます。
typescript
と入力し、TypeScript: TSサーバーの再起動コマンドを選択して実行します。
VS Codeは$extends
メソッドを認識するようになるはずです。
Accelerateのキャッシュノードはどのリージョンで利用できますか?
AccelerateはCloudflareのネットワーク上で実行され、キャッシュヒットはCloudflareの300以上のロケーションから提供されます。Accelerateのキャッシュノードが利用可能なリージョンは、こちらで確認できます: https://www.cloudflare.com/network/。
Accelerateの接続プールはどのリージョンで利用できますか?
キャッシュ戦略が指定されていない場合、またはキャッシュミスが発生した場合、Prisma ClientクエリはAccelerateの接続プール経由でルーティングされます。現在、クエリは利用可能な16のロケーションの中から選択されたリージョン経由でルーティングできます。
現在、利用可能なリージョンの一覧は以下の通りです
- アジアパシフィック、ムンバイ (
ap-south-1
) - アジアパシフィック、ソウル (
ap-northeast-2
) - アジアパシフィック、シンガポール (
ap-southeast-1
) - アジアパシフィック、シドニー (
ap-southeast-2
) - アジアパシフィック、東京 (
ap-northeast-1
) - カナダ、中央 (
ca-central-1
) - ヨーロッパ、フランクフルト (
eu-central-1
) - ヨーロッパ、アイルランド (
eu-west-1
) - ヨーロッパ、ロンドン (
eu-west-2
) - ヨーロッパ、パリ (
eu-west-3
) - ヨーロッパ、ストックホルム (
eu-north-1
) - 南米、サンパウロ (
sa-east-1
) - 米国東部、バージニア北部 (
us-east-1
) - 米国東部、オハイオ (
us-east-2
) - 米国西部、北カリフォルニア (
us-west-1
) - 米国西部、オレゴン (
us-west-2
)
Accelerateの設定時、またはPrisma Cloud PlatformのダッシュボードのリージョンセクションにあるAccelerateの設定タブにアクセスして、利用可能なリージョンを確認することもできます。
Accelerateはどのリージョンからキャッシュを取得するかをどのように認識するのですか?
内部的には、AccelerateはCloudflareを使用しており、ネットワークアドレス指定とルーティングにAnycastを使用しています。受信リクエストは、リクエストを効率的に処理する能力を持つネットワーク内の最寄りのデータセンターまたは「ノード」にルーティングされます。この仕組みの詳細については、Anycastをご覧ください。
Accelerateでキャッシュを無効にするにはどうすればよいですか?
有料プランをご利用の場合は、$accelerate.invalidate
APIを使用してオンデマンドでキャッシュを無効にできます。または、プロジェクトレベルでキャッシュ全体を1日に最大5回無効にできます。この制限は、プランに基づいて設定されています。これは、Accelerate構成ページで管理できます。
Accelerateの整合性モデルは何ですか?
Accelerateには整合性モデルはありません。ノードが合意に達する必要がある分散システムではありません(データはユーザーに最も近いキャッシュノードにのみ保存されるため)。ただし、Accelerateのキャッシュノードにキャッシュされたデータは他のノードに伝播されないため、設計上、Accelerateは整合性モデルを必要としません。
Accelerateは、特に読み取り負荷の高いワークロードに適したリードスルーキャッシュ戦略を実装しています。
キャッシュによって提供されるデータの鮮度は、クエリで定義されたキャッシュ戦略によって異なります。クエリに適したキャッシュ戦略の選択の詳細については、このセクションを参照してください。
Accelerateは、Redisなどの他のキャッシュツールとどのように異なりますか?
- Accelerateは、キャッシュ戦略を使用してクエリレベルでコード内のデータアクセスを最適化できる特化されたキャッシュです。一方、RedisやMemcachedなどのツールは、適応性と柔軟性を備えた汎用キャッシュとして設計されています。
- Accelerateは、キャッシュサービスの構築と保守にかかる時間、リスク、およびエンジニアリングの労力を削減するマネージドサービスです。
- デフォルトでは、Accelerateはグローバルに分散されており、クエリのレイテンシを削減します。他のキャッシュツールをグローバルに利用できるようにするには、追加の構成が必要です。
Accelerateのキャッシュ機能を使用すべきでないのはいつですか?
Accelerateは、グローバルデータキャッシュと接続プールであり、クエリレベルでコード内のデータアクセスを最適化できます。Accelerateによるキャッシュはアプリのパフォーマンスを大幅に向上させる可能性がありますが、ユースケースにとって常に最適な選択肢とは限りません。
Accelerateのグローバルキャッシュ機能は、次の場合、アプリに適していない可能性があります
-
アプリが特定のリージョン内でのみ使用され、アプリケーションサーバーとデータベースの両方が同じネットワーク上の同じリージョンに配置されている場合。たとえば、アプリケーションサーバーとデータベースが同じリージョンおよびネットワークにある場合、データベースクエリはおそらくはるかに高速になります。ただし、アプリケーションサーバーがデータベースとは異なるリージョンまたはネットワークにある場合、データはアプリケーションに最も近いデータセンターにキャッシュされるため、Accelerateはクエリを高速化します。
-
汎用キャッシュのみが必要な場合。Accelerateは、接続プーラーであり、コード内のデータベースクエリ応答のみをキャッシュする特化されたキャッシュです。Redisなどの汎用キャッシュを使用すると、Accelerateが現在サポートしていない外部APIなど、複数のソースからのデータをキャッシュできます。汎用キャッシュに興味がある場合は、Discord経由でフィードバックをお寄せください。
-
アプリケーションデータが常に取得時に最新である必要があり、合理的なキャッシュ戦略を確立することが困難な場合。
Accelerateのグローバルキャッシュを使用しなくても、特にサーバーレスまたはエッジ関数で、データベース接続の管理とスケーリングが困難な場合、接続プールを使用することでAccelerateから大きなメリットを得ることができます。サーバーレスの課題の詳細については、こちらをご覧ください。
Accelerateを他のORM/クエリビルダー/ドライバーで使用できますか?
いいえ。現在、他のORM/クエリビルダーまたはドライバーのサポートを計画していません。ただし、他のライブラリのサポートに関心がある場合は、Discordコミュニティの#help-and-questions
チャンネルでお知らせください。
cacheStrategy
を設定する際のttl
パラメーターの最大許容値は何ですか?
Time-to-live (ttl
) パラメーターは、最大1年まで設定できます。ただし、キャッシュ内のアイテムは、頻繁にアクセスされない場合、削除される可能性があることに注意することが重要です。
私たちの実験に基づくと、キャッシュアイテムは約18時間持続することが確認されています。アイテムがアクティブにアクセスされている場合、キャッシュに長期間残る可能性がありますが、保証はありません。
注記: 頻繁にアクセスされるアイテムでも、キャッシュから時折削除されることがあります。アイテムがアクティビティレベルに関係なく、最大1か月以上存続することは考えにくいです。
サービス中断時に、Accelerateが直接接続文字列にフォールバックしないのはなぜですか?
まれにサービスが中断した場合、直接接続にフォールバックすると、接続プールがバイパスされます。これにより、データベースの利用可能な接続が枯渇し、データベースレベルで他の問題が発生する可能性があります。
サービスが中断した場合は、ステータスページで確認することをお勧めします。Prismaのサポートチャネルのいずれかに連絡して支援を求めることができます。
注記: さらに、一部のエッジ関数ランタイム環境では、Prisma ORMとの直接接続をサポートしていない場合があることに注意してください。詳細については、エッジ関数ドキュメントを参照してください。
インタラクティブトランザクション内の各クエリは、課金のために個別にカウントされますか?
はい、インタラクティブトランザクションは、トランザクション内の個々の操作に基づいて課金されます。トランザクション自体の開始、コミット、またはロールバックに対する料金はかかりません。たとえば、次のクエリでは、2つの課金対象クエリがあります
await prisma.$transaction(async (tx) => {
await tx.user.deleteMany({ where: { name: 'John Doe' } });
await tx.user.createMany({ data });
});
ただし、シーケンシャルクライアント操作用の$transaction
APIを使用する場合、配列内のクエリの数に関係なく、1つの課金対象クエリとしてのみカウントされます。例
await prisma.$transaction([
prisma.user.deleteMany({ where: { name: 'John Doe' } }),
prisma.user.createMany({ data }),
]);
インタラクティブトランザクションが必要ない場合は、シーケンシャル操作トランザクションを使用することでコストを節約し、パフォーマンスを向上させることができます。シーケンシャル操作トランザクションは、データベースへの1回のラウンドトリップで実行されるため、Accelerateでより優れたパフォーマンスを発揮しますが、インタラクティブトランザクションは、開始、コミット、およびトランザクション上の個々の操作ごとに別々のラウンドトリップが必要です。
Accelerateのクエリ継続時間と応答サイズ制限を増やすことはできますか?
はい、サブスクリプションプランに基づいてAccelerateの制限を増やすことができます。構成可能な制限は次のとおりです
制限 | Starter | Proプラン | Businessプラン |
---|---|---|---|
クエリタイムアウト | 最大10秒 | 最大20秒 | 最大60秒 |
インタラクティブトランザクションタイムアウト | 最大15秒 | 最大30秒 | 最大90秒 |
応答サイズ | 最大5MB | 最大10MB | 最大20MB |
利用可能なプランと対応する制限の詳細については、料金ページを確認してください。
サブスクリプションプランに基づいてこれらの制限を増やすことはできますが、データベース操作を最適化することを依然としてお勧めします。トラブルシューティングガイドで詳細をご覧ください。
キャッシュクエリ結果を無効にするのにどのくらい時間がかかりますか?
キャッシュはグローバルにクリアする必要があるため、具体的な時間枠を提供することは困難です。ただし、キャッシュされたデータは最終的に整合性が取れており、通常は数秒以内にすべてのPoPに伝播されます。非常にまれなケースでは、時間がかかる場合があります。
キャッシュクエリ結果を無効にするのにかかる時間をテストするためのデモアプリはこちらです。
InvalidateとRevalidateの違いは何ですか?
Invalidate: キャッシュエントリが削除され、次のリクエストで新しいデータがフェッチされ、キャッシュミスが発生します。これにより、古いデータが削除されますが、キャッシュが再populateされるまで応答が遅くなる可能性があります。
Revalidate: キャッシュエントリが事前に更新され、次のリクエストでキャッシュからの新しいデータが使用されるようになります。これにより、キャッシュが有効な状態に保たれ、キャッシュミスを回避することで応答時間が短縮されます。
オンデマンドキャッシュ無効化とは何ですか?
オンデマンドキャッシュ無効化を使用すると、アプリケーションは、定期的なキャッシュ更新サイクルを待つのではなく、特定のキャッシュされたデータが変更されたときに即座に更新できます。これにより、情報を正確かつユーザーにとって最新の状態に保ちます。
キャッシュ無効化APIはいつ使用する必要がありますか?
キャッシュ無効化APIは、データ整合性がキャッシュの標準的な有効期限または再検証を待つことができない場合に不可欠です。主なユースケースは次のとおりです
- コンテンツの更新: 公開された記事の編集、製品の更新、プロファイルの変更など、重要な変更がすぐに表示される必要がある場合。
- 在庫管理: 在庫または予約システムなどのリアルタイムアプリケーションで、在庫レベル、可用性、または予約ステータスが最新情報を反映する必要がある場合。
- 優先度の高いデータ: 速報ニュースや緊急通知など、時間的制約のあるデータの場合、ユーザーが最新情報をすぐに確認することが不可欠です。
これらのシナリオでオンデマンドキャッシュ無効化を使用すると、必要なデータのみを更新し続けることができ、システムパフォーマンスを維持しながら、ユーザーに正確で最新の情報を提供できます。
Accelerateは課金のためにクエリをどのようにカウントしますか?
Accelerateは、Prisma Clientの呼び出しレベルでクエリをカウントします。1つのPrismaクエリは、内部的には複数のSQLステートメントに変換される場合がありますが、課金目的では1つのクエリとしてのみカウントされます。これにより、基盤となるSQL操作の複雑さではなく、Prisma Clientの使用状況を反映した、わかりやすく予測可能な課金が保証されます。
クエリは、キャッシュまたはデータベースのどちらから提供されるかに関係なくカウントされます。クエリがキャッシュから取得された場合でも、クエリ制限にカウントされます。
GitHubログインからメールとパスワードログインに切り替えるにはどうすればよいですか?
以前にGitHubを使用してサインアップし、メールとパスワードログインに切り替えたい場合は、次の手順に従ってください
1. GitHubメールアドレスの確認
- GitHubアカウントに関連付けられているプライマリアドレスを確認します(例:GitHubプロファイルまたは通知設定から)。
2. 新しいメール/パスワードアカウントの作成
- メール/パスワードサインアップページに移動します。
- GitHubアカウントにリンクされている同じメールアドレスを使用して、新しいアカウントを作成します。
- システムは、新しいメール/パスワードアカウントを既存のデータに自動的に接続します。
3. ログインのテスト
- ログアウトし、メールアドレスと作成したばかりのパスワードでログインしてみてください。
注記: 問題が発生した場合は、アカウントのリンクについてサポートチームにお問い合わせください。