プラットフォームキャッシュの使用開始
学習の目的
この単元を完了すると、次のことができるようになります。
- プラットフォームキャッシュの概要と用途を説明する。
- プラットフォームキャッシュの 2 つの種別とそれぞれの例を挙げる。
- パーティションとその使用方法を説明する。
キャッシュとは?
キャッシュとは一時的な保管場所です。コンピューターの世界では、キャッシュとは頻繁にアクセスされるデータベースデータの一時的な記憶領域です。たとえ話をしましょう。あなたが夕食の木の実とドングリを探しているシマリスだとします。5 時になったので食事の時間です。頬袋 (キャッシュ) に貯めていた木の実とドングリを食べますか? それとも森に戻って木 (データベース) から他の食料を集めますか? 頬袋にある一時的な食料保管場所にアクセスすれば、夕食は近くにあり、より早く食べ始めることができます。目的もより効率よく達成できます。データキャッシュにも同様の利点があります。もちろん、シマリスではなく人間にとっての利点です。
プラットフォームキャッシュとは?
プラットフォームキャッシュは、Salesforce セッションおよび組織のデータを後でアクセスするために保存するメモリレイヤーです。プラットフォームキャッシュを使用するとアプリケーションの実行速度を上げることができます。これは、再利用可能なデータがメモリに保存されているからです。アプリケーションはこのデータにすばやくアクセスできます。後続のトランザクションで計算やデータベースへの要求を繰り返す必要がありません。つまり、プラットフォームキャッシュはクラウドアプリケーションにとっての RAM だと考えてください。
プラットフォームキャッシュでは、キャッシュ空間を割り当てて一部のアプリケーションや操作が他の容量を横取りしないようにすることもできます。空間を分配するにはパーティションを使用します。パーティションについては後で説明します。
先へ進む前に.
ここで一度止まってプラットフォームキャッシュのトライアルを要求しましょう。デフォルトでは、Developer 組織のキャッシュ容量は 0 MB です。10 MB のトライアルキャッシュを要求できます。
トライアルを要求するには、Developer 組織の [設定] に移動します。[Quick Find (クイック検索)] ボックスに cache (キャッシュ) と入力して、[Platform Cache (プラットフォームキャッシュ)] をクリックします。[トライアル容量の要求] をクリックし、プラットフォームキャッシュトライアルが有効になったことを知らせるメールを待ちます。トライアル要求は Salesforce ですぐに承認されますが、メールを受信するまでに数分かかることがあります。
キャッシュトライアルがなくても、キャッシュ操作を実行してキャッシュの使用方法を学習できます。ただし、キャッシュ保存はスキップされ、取得した値は null になります (キャッシュの欠落)。
プラットフォームキャッシュトライアルを要求できたので、もう少し概念について学習しましょう。
プラットフォームキャッシュを使用できるのは?
同じデータに繰り返しアクセスするコード部分にはほぼすべて、プラットフォームキャッシュを使用できます。キャッシュデータを使用すると、アプリケーションのパフォーマンスが向上し、SOQL クエリや API コールを繰り返し実行したり、複雑な計算を行ったりするよりも高速になります。
キャッシュ対象として最適なデータは、次のとおりです。
- セッション全体を通して再利用されるか、すべてのユーザーや要求にまたがって再利用される
- 静的である (急速に変化しない)
- 計算や取得にコストがかかる
変更頻度が少ないデータを保存する
キャッシュを使用して保存するのは静的なデータまたは頻繁に変更されないデータにします。このデータは最初、API コールを介して第三者から、または SOQL クエリを介してローカルに取得されます。データが変更された場合、常に値の厳密な正確さが要求されるのでなければこのデータをキャッシュします。
たとえば、次の情報はこうした静的データに該当します。
- 公共交通機関の時刻表
- 会社のシャトルバスの時刻表
- すべてのユーザーに表示されるタブヘッダー
- アプリケーションの全ページに表示される静的なナビゲーションバー
- セッション中に保持するユーザーの買い物かご
- 換算レートの日次スナップショット (レートが変動するのは日中)
複雑な計算から取得されるデータを保存する
複雑な計算または長いクエリの結果の値は、キャッシュ保存に適しています。たとえば、次の情報はこうしたデータに該当します。
- 前週の総売上
- 会社の従業員が全体として行ったボランティア総時間数
- 売上ランキング上位
プラットフォームキャッシュをどこで使用するかの手がかりを得るには、コードを調べましょう。たとえば、現在 Visualforce のビューステートをオーバーロードすることでアプリケーションデータを保存していますか? これらの保存値はすべてプラットフォームキャッシュに適しています。
すべてのユースケースがプラットフォームキャッシュに適しているわけではありません。たとえば、株価など、頻繁に変更されるリアルタイムのデータはキャッシュには向きません。また、プラットフォームキャッシュの制限も理解しておく必要があります。たとえば、データが非同期 Apex でアクセスされる場合は、ユーザーのセッションに基づくキャッシュには保存できません。
エディション別のキャッシュ割り当て
プラットフォームキャッシュは、Enterprise Edition 組織以上のお客様が使用できます。次のエディションにはデフォルトのキャッシュ空間が付属しますが、多くの場合、キャッシュを追加することでパフォーマンスがさらに向上します。
- Enterprise Edition (デフォルトで 10 MB)
- Unlimited Edition (デフォルトで 30 MB)
- Performance Edition (デフォルトで 30 MB)
トライアルキャッシュを試してみる
組織の追加キャッシュを購入できます。どの程度のキャッシュを追加すればアプリケーションに効果があるかを判別する場合、トライアルキャッシュを要求して試行できます。Professional Edition ではキャッシュを購入する前にトライアルキャッシュを要求することもできます。Developer Edition 組織ではトライアルキャッシュを使用して、プラットフォームキャッシュを使用するアプリケーションを開発およびテストできます。要求が承認されると、30 MB のトライアルキャッシュ空間 (Developer Edition は 10 MB) を使用できます。より多くのトライアルキャッシュ空間が必要な場合は、Salesforce にお問い合わせください。
プラットフォームの種別
プラットフォームキャッシュには、組織キャッシュとセッションキャッシュという 2 つの種別があります。
組織キャッシュ
組織キャッシュには、組織の誰もが使用できる組織全体のデータが保存されます。組織キャッシュは、セッション、要求、組織ユーザーおよびプロファイルをまたがってアクセスできます。
たとえば、天候データをキャッシュし、場所に基づいて取引先責任者に表示できます。または、通貨換算レートの日次スナップショットをキャッシュしてアプリケーションで使用できます。
セッションキャッシュ
セッションキャッシュには、個々のユーザーおよびそのユーザーのセッションに結び付けられたデータが保存されます。セッションの最大有効期限は 8 時間です。
たとえば、アプリケーションで、ユーザーの場所からその日にユーザーが訪問しようとしているすべての顧客までの距離を計算するとします。場所と計算された距離をセッションキャッシュに保存できます。これにより、ユーザーがこの情報を再度取得する場合、距離を再計算する必要がなくなります。または、アプリケーションでユーザーがナビゲーションタブの順序をカスタマイズできるようにし、ユーザーがアプリケーション内の他のページにアクセスしたときにその順序を再利用することもできます。
キャッシュ使用時のパフォーマンス向上
プラットフォームキャッシュを使用することでアプリケーションのパフォーマンスはどの程度向上するのか疑問に思われるかもしれません。キャッシュからのデータ取得は、API コールよりもはるかに高速です。SOQL クエリと比較した場合でも、キャッシュの方が大幅に短い時間で取得できます。
次のグラフは、API コールとキャッシュのそれぞれのデータ取得時間 (ミリ秒) を示します。キャッシュを使用してローカルにデータを取得する場合 (特にデータを複数のトランザクションで取得する場合)、パフォーマンスが大幅に向上することが一目瞭然です。グラフに使用されたサンプルでは、キャッシュは API コールの 100 倍高速です。このグラフのキャッシュの取得時間はわずか数ミリ秒ですが、時間値に使用されるスケールによりほぼゼロと表示されます。このグラフはサンプルテストであり、他のアプリケーションでは数値が異なる場合があることに注意してください。
外部サービスへの API コール実行 (1) はキャッシュからのデータ取得 (2) よりも低速です。
次のグラフでは、SOQL と組織キャッシュおよびセッションキャッシュの取得時間を比較しています。ご覧のとおり、SOQL はキャッシュよりも低速です。この例では、キャッシュは単一トランザクションのデータ取得において SOQL の 2 倍以上高速です。複数トランザクションで取得を実行した場合、差は一層大きくなります。(このグラフはサンプルであり、他のアプリケーションでは数値が異なる場合があることに注意してください)。
SOQL クエリによるデータ取得 (1) は組織キャッシュおよびセッションキャッシュからのデータ取得 (2) よりも低速です。
キャッシュパーティションとは?
前述のとおり、プラットフォームキャッシュではパーティションを使用して空間を割り当てることができます。ここではパーティションについて説明します。パーティションを使用すると、キャッシュ空間を割り当ててアプリケーション間で使用量とパフォーマンスのバランスを取ることができます。指定されたパーティションにデータをキャッシュすると、そのキャッシュ空間が他のアプリケーションや重要度の低いデータによって上書きされるのを回避できます。
組織でキャッシュ空間を使用する前に、パーティションを作成してアプリケーションにどの程度の容量が必要かを定義します。各パーティション容量は、組織キャッシュとセッションキャッシュに分割されます。セッションキャッシュと組織キャッシュは、0、5 MB、またはそれ以上の整数値で割り当てることができます。組織キャッシュとセッションキャッシュの割り当てを含むパーティションの最小サイズは 5 MB です。たとえば、組織に合計 10 MB のキャッシュ空間があり、合計 5 MB (セッションキャッシュが 5 MB、組織キャッシュが 0 MB) のパーティションを作成したとします。または、10 MB の空間 (組織キャッシュが 5 MB、セッションキャッシュが 5 MB) を持つパーティションを作成できます。デフォルトパーティションを含むすべてのパーティションの合計は、プラットフォームキャッシュの総割り当てと等しくなります。
次の画像は、キャッシュ容量とパーティション割り当てのグラフを示します。この例では、キャッシュ使用状況が 0% (1) で、2 つのパーティションが等しい割り当てで作成されている (2) ことが示すように、まだキャッシュが使用されていません。
デフォルトパーティション
任意のパーティションをデフォルトパーティションとして定義できますが、使用できるデフォルトパーティションは 1 つのみです。デフォルトパーティションでは、短縮構文を使用してそのパーティションに対するキャッシュ操作を実行できます。つまり、キー - 値ペアを追加するときに、キー名を名前空間とパーティション名で完全修飾する必要がありません。たとえば、Cache.Org.put('namespace.partition.key', 0); をコールする代わりに、Cache.Org.put('key', 0); だけでコールできます。
次の単元では、[設定] でパーティションを作成し、プラットフォームキャッシュの使用を開始します!
リソース
『Apex 開発者ガイド』のリソース:
Salesforce ヘルプのリソース: