Skip to the content.

Data cache pattern

Usecase

Architecture

データ・キャッシュ・パターンは入力データをキャッシュするアーキテクチャです。入力データがデータベースやストレージにある場合、データをキャッシュしておくことでデータアクセスのオーバーヘッドを削減することが可能になります。
キャッシュするデータ量はキャッシュのコストや容量とトレードオフになります。多くのキャッシュはストレージ等よりもコストが高く、容量が小さい傾向にあるので、コスト・オーバー、容量オーバーを避けるためにキャッシュクリアの方針が必要です。
使用するデータが時間経過で変化するシステムの場合、定期的にキャッシュクリアして古いキャッシュを削除する必要があります。高アクセスのシステムでキャッシュ容量が増大する場合、どのタイミングでどのキャッシュを削除するか、検討する必要があります。一般的にキャッシュクリアは時間経過やリクエスト頻度に応じて実行します。
 このパターンは大きく2種類のアーキテクチャを考えることができます。
1つ目は入力データをキャッシュするパターンです。この場合、入力データの取得をDWHとキャッシュへ並列で実施し、キャッシュ・ヒットした場合はDWHへのアクセスを中止して後続の推論へ移行します。キャッシュ・ヒットしない場合は推論しつつ、取得したデータをキャッシュに保存します。同様の発想で入力データを前処理後にキャッシュするパターンも可能です。この場合、最初のデータは前処理してキャッシュに保存しますが、以降は同じ入力データであれば前処理せずにキャッシュから取得することが可能です。このパターンは前処理のオーバーヘッドを減らしたい場合に有効です。
2つ目のパターンはリクエストが来る前に前処理を済ませておくものです。データがDWHに投入された際にDWH等と連携して事前にデータ取得、前処理、キャッシュします。当該データを使うリクエストが入力された場合、キャッシュから前処理済みのデータを取得して推論に送ります。キャッシュ率を増強し、可能な限りキャッシュから推論することで速度を向上したい場合に有効なアーキテクチャになります。

Diagram

Input data cache

diagram1

Prepare data cache

diagram2

Pros

Cons

Needs consideration

Sample

https://github.com/shibuiwilliam/ml-system-in-actions/tree/main/chapter4_serving_patterns/data_cache_pattern