Accelerate FAQ
Prisma Accelerateで静的IPを有効にするのはどのような場合ですか?
Accelerateの静的IPは、セキュリティ設定でIPホワイトリスト登録が必要な場合や、信頼された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
メソッドを認識しない
VS Codeで現在開いている既存のプロジェクトにAccelerate用のPrisma Client拡張機能を追加した場合、エディターがすぐに$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のRegionセクションにある設定タブにアクセスして、利用可能なリージョンを表示することもできます。
Accelerateはどのリージョンからキャッシュをフェッチするかをどのように認識しますか?
内部では、AccelerateはCloudflareを利用しており、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のような汎用キャッシュでは、外部APIなど、現在Accelerateがサポートしていない複数のソースからのデータをキャッシュできます。汎用キャッシュにご興味がある場合は、弊社の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 (無効化): キャッシュエントリが削除され、次のリクエストで新しいデータがフェッチされるため、キャッシュミスが発生します。これにより、古いデータが削除されますが、キャッシュが再投入されるまで応答が遅くなる可能性があります。
Revalidate (再検証): キャッシュエントリはプロアクティブに更新され、次のリクエストでキャッシュから新しいデータが使用されるようにします。これにより、キャッシュは有効に保たれ、キャッシュミスを回避することで応答時間が速く維持されます。
オンデマンドキャッシュ無効化とは何ですか?
オンデマンドキャッシュ無効化により、アプリケーションは定期的なキャッシュ更新サイクルを待つことなく、変更があった場合に特定のキャッシュデータを即座に更新できます。これにより、ユーザーにとって情報が正確かつ最新に保たれます。
キャッシュ無効化APIはいつ使用すべきですか?
データの整合性がキャッシュの標準的な有効期限切れや再検証を待てない場合、キャッシュ無効化APIが不可欠です。主な使用例は以下の通りです。
- コンテンツ更新: 公開記事の編集、製品の更新、プロファイルの変更など、すぐに表示される必要がある重要な変更が発生した場合。
- 在庫管理: 在庫レベル、利用可能性、予約状況が最新の情報を反映する必要がある、在庫管理システムや予約システムのようなリアルタイムアプリケーションの場合。
- 高優先度データ: 速報ニュースや緊急通知のような時間制約のあるデータで、ユーザーがすぐに最新情報を確認することが不可欠な場合。
これらのシナリオでオンデマンドキャッシュ無効化を使用すると、必要なデータのみを最新の状態に保ち、システムパフォーマンスを維持しつつ、ユーザーに正確で最新の情報を提供できます。
Accelerateは課金のためにクエリをどのようにカウントしますか?
Accelerateは、Prisma Clientの呼び出しレベルでクエリをカウントします。単一のPrismaクエリが内部で複数のSQLステートメントに変換されることがありますが、課金目的では1つのクエリとしてのみカウントされます。これにより、基礎となるSQL操作の複雑さではなく、Prisma Clientの使用状況を反映した、わかりやすく予測可能な課金が保証されます。
クエリは、キャッシュから提供されるかデータベースから提供されるかに関係なくカウントされます。クエリがキャッシュから取得された場合でも、クエリ制限にカウントされます。
GitHubログインからメールとパスワードログインに切り替えるにはどうすればよいですか?
以前にGitHubを使用してサインアップし、メールとパスワードでのログインに切り替えたい場合は、以下の手順に従ってください。
1. GitHubのメールアドレスを確認する
- GitHubアカウントに関連付けられている主要なメールアドレスを確認します(例: GitHubプロフィールまたは通知設定から)。
2. 新しいメール/パスワードアカウントを作成する
- メール/パスワードのサインアップページに移動します。
- GitHubアカウントにリンクされている同じメールアドレスを使用して、新しいアカウントを作成します。
- システムが新しいメール/パスワードアカウントを既存のデータに自動的に接続します。
3. ログインをテストする
- ログアウトし、作成したメールアドレスとパスワードでログインを試します。
注: 何か問題が発生した場合は、アカウントのリンクに関するサポートについて、弊社のサポートチームにご連絡ください。