Data Cache
このトピックでは、Data Cache の動作原理と、外部データのクエリパフォーマンスを向上させるための Data Cache の有効化方法について説明します。v3.3.0 から、Data Cache はデフォルトで有効になっています。
データレイク分析において、StarRocks は OLAP エンジンとして、HDFS や Amazon S3 などの外部ストレージシステムに保存されたデータファイルをスキャンします。スキャンするファイル数が増えると、I/O オーバーヘッドも増加します。さらに、いくつかのアドホックなシナリオでは、同じデータへの頻繁なアクセスが I/O オーバーヘッドを倍増させます。
これらのシナリオでクエリパフォーマンスを最適化するために、StarRocks 2.5 では Data Cache 機能を提供しています。この機能は、外部ストレージシステムのデータを事前に定義されたポリシーに基づいて複数のブロックに分割し、StarRocks のバックエンド (BEs) にキャッシュします。これにより、各アクセスリクエストごとに外 部システムからデータを取得する必要がなくなり、ホットデータに対するクエリと分析を高速化します。Data Cache は、外部カタログまたは外部テーブル(JDBC 互換データベース用の外部テーブルを除く)を使用して外部ストレージシステムからデータをクエリする場合にのみ機能します。StarRocks 内部テーブルをクエリする場合には機能しません。
動作原理
StarRocks は、外部ストレージシステムのデータを同じサイズの複数のブロック(デフォルトでは 1 MB)に分割し、BEs にキャッシュします。ブロックはデータキャッシュの最小単位であり、設定可能です。
例えば、ブロックサイズを 1 MB に設定し、Amazon S3 から 128 MB の Parquet ファイルをクエリしたい場合、StarRocks はファイルを 128 ブロックに分割します。ブロックは [0, 1 MB), [1 MB, 2 MB), [2 MB, 3 MB) ... [127 MB, 128 MB) となります。StarRocks は各ブロックにグローバルに一意の ID を割り当て、これをキャッシュキーと呼びます。キャッシュキーは次の 3 つの部分で構成されます。
hash(filename) + fileModificationTime + blockId
次の表は各部分の説明を示しています。
コンポーネント項目 | 説明 |
---|---|
filename | データファイルの名前。 |
fileModificationTime | データファイルの最終変更時間。 |
blockId | データファイルを分割する際に StarRocks がブロックに割り当てる ID。同じデータファイル内では一意ですが、StarRocks クラスター内では一意ではありません。 |
クエリが [1 MB, 2 MB) ブロックにヒットした場合、StarRocks は次の操作を行います:
- ブロックがキャッシュに存在するかどうかを確認します。
- ブロックが存在する場合、StarRocks はキャッシュからブロックを読み込みます。ブロックが存在しない場合、StarRocks は Amazon S3 からブロックを読み込み、BE にキャッシュします。
Data Cache が有効化されると、StarRocks は外部ストレージシステムから読み込んだデータブロックをキャッシュします。