AI-200:Developing AI Cloud Solutions on Azure Azure データ管理サービスを使った AI ソリューションの開発 問8
Azure データ管理サービスを使った AI ソリューションの開発/Azure Managed Redis の AI ソリューションへの統合商品データを Azure Cosmos DB に保存し、読み取りを速くするために Azure Managed Redis を cache-aside パターンで使っています。商品の価格を更新したあと、しばらく古い価格が表示されてしまう問題が起きています。対処として最も適切なものはどれですか。
当サイトのオリジナル問題(AI-200:Developing AI Cloud Solutions on Azureの出題範囲「Azure データ管理サービスを使った AI ソリューションの開発」に対応。実際の試験問題ではありません)
- Aデータベースを更新したら、その商品のキャッシュのキーを削除(無効化)する。あわせて、キャッシュの各項目には有効期限(TTL)を設定しておく
- Bキャッシュのキーには有効期限を設定せず、一度読み込んだ値をずっと保持させる
- C読み取りのたびにキャッシュとデータベースの両方から値を取得し、新しいほうを使う
- DRedis のメモリ削除ポリシーを noeviction に変更し、古いキーが削除されないようにする
正解:A
解説
cache-aside パターンでは、アプリがまずキャッシュを読み、無ければデータベースから読み込んでキャッシュに入れます。データを更新したときは、該当するキャッシュのキーを削除して無効化し、次の読み取りで最新の値が入るようにします。さらに各項目に有効期限(TTL)を設定しておくと、無効化に失敗した場合でも、古い値が残る時間に上限を設けられます。
選択肢ごとの解説
- A正しい。更新時の無効化と有効期限を組み合わせるのが、cache-aside で古いデータを防ぐ基本的な方法です。
- B誤り。有効期限が無いと、古い価格がいつまでも残り続けるおそれがあり、問題が悪化します。
- C誤り。毎回データベースも読むのでは、キャッシュを使う意味がなくなります。読み取りを速くするという目的に反します。
- D誤り。noeviction は、メモリが不足したときにキーを削除しない設定です。更新されたデータを反映させる仕組みとは関係ありません。