Data Cache
この トピックでは、Data Cache の動作原理と、外部データのクエリパフォーマンスを向上させるために Data Cache を有効にする方法について説明します。
データレイク分析において、StarRocks は OLAP エンジンとして、HDFS や Amazon S3 などの外部ストレージシステムに保存されたデータファイルをスキャンします。スキャンするファイル数が増えると、I/O オーバーヘッドも増加します。さらに、一部のアドホックなシナリオでは、同じデータへの頻繁なアクセスが I/O オーバーヘッドを倍増させます。
これらのシナリオでクエリパフォーマンスを最適化するために、StarRocks 2.5 は Data Cache 機能を提供します。この機能は、外部ストレージシステム内のデータを事前定義されたポリシーに基づいて複数のブロックに分割し、StarRocks のバックエンド (BEs) にデータをキャッシュします。これにより、各アクセスリクエストごとに外部システムからデータを取得する必要がなくなり、ホットデータのクエリと分析が高速化されます。Data Cache は、外部カタログや外部テーブル (JDBC 互換データベースの外部テーブルを除く) を使用して外部ストレージシステムからデータをクエリする場合にのみ機能します。StarRocks の内部テーブルをクエリする場合には機能しません。
動作原理
StarRocks は、外部ストレージシステム内のデータを同じサイズの複数のブロックに分割し、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
以下の表は、各部分の説明を提供します。
| Component item | Description |
|---|---|
| filename | データファイルの名前。 |
| fileModificationTime | データファイルの最終変更時間。 |
| blockId | データファイルを分割する際に StarRocks がブロックに割り当てる ID。同じデータファイル内では一意ですが、StarRocks クラスター内では一意ではありません。 |
クエリが [1 MB, 2 MB) ブロックにヒットした場合、StarRocks は次の操作を行います。
- ブロックがキャッシュに存在するかどうかを確認します。
- ブロックが存在する場合、StarRocks はキャッシュからブロックを読み取ります。ブロックが存在しない場合、StarRocks は Amazon S3 からブロッ クを読み取り、BE にキャッシュします。
Data Cache が有効になると、StarRocks は外部ストレージシステムから読み取ったデータブロックをキャッシュします。このようなデータブロックをキャッシュしたくない場合は、次のコマンドを実行します。
SET enable_populate_datacache = false;
enable_populate_datacache についての詳細は、 System variables を参照してください。
ブロックのストレージメディア
StarRocks は、BE マシンのメモリとディスクを使用してブロックをキャッシュします。メモリのみ、またはメモリとディスクの両方でキャッシュをサポートします。
ディスクをストレージメディアとして使用する場合、キャッシュ速度はディスクのパフォーマンス に直接影響されます。したがって、データキャッシュには NVMe ディスクなどの高性能ディスクを使用することをお勧めします。高性能ディスクがない場合は、ディスク I/O の負荷を軽減するためにディスクを追加することができます。
キャッシュ置換ポリシー
StarRocks は、 least recently used (LRU) ポリシーを使用してデータをキャッシュおよび破棄します。
- StarRocks は最初にメモリからデータを読み取ります。メモリにデータが見つからない場合、StarRocks はディスクからデータを読み取り、ディスクから読み取ったデータをメモリにロードしようとします。
- メモリから破棄されたデータはディスクに書き込まれます。ディスクから破棄されたデータは削除されます。
Data Cache の有効化
Data Cache はデフォルトで無効になっています。この機能を有効にするには、StarRocks クラスター内の FEs と BEs を設定します。