データストレージのコストを削減し、クエリパフォーマンスとシステムリソースの使用率を向上させるために、ApsaraDB for ClickHouseはホットデータとコールドデータの階層ストレージを提供します。 クエリ頻度に基づいて、さまざまな種類のディスクにデータを保存できます。 このトピックでは、ホットデータとコールドデータの階層ストレージを有効にし、階層ストレージポリシーを設定する方法について説明します。
前提条件
ApsaraDB for ClickHouseクラスター V20.8以降が作成されます。
バージョンがこの機能をサポートしていないApsaraDB for ClickHouseクラスターでホットデータとコールドデータの階層ストレージを使用する場合は、V20.8以降のApsaraDB for ClickHouseクラスターを作成し、新しいクラスターにデータを移行できます。 詳細については、「ApsaraDB For ClickHouse Community-compatible Editionクラスター間のデータ移行」をご参照ください。
ApsaraDB for ClickHouse Enterprise Editionは、ホットデータをキャッシュに、コールドデータを共有ストレージに自動的に保存します。 ホットデータとコールドデータの階層ストレージは、ホットデータとコールドデータのストレージルールに依存しません。
背景情報
ホットデータは、頻繁にアクセスされ、拡張SSD (ESSD) またはウルトラディスクに保存されるデータです。 これらのディスクは、クラスターを作成するときに選択されます。 ホットデータストレージは、高性能なクエリを必要とするビジネスシナリオに適しています。
コールドデータは、頻繁にアクセスされないデータです。 コールドデータは、コスト効率の高いストレージの要件を満たすために、低ストレージコストでコールドデータディスクに保存されます。
ホットデータとコールドデータの階層ストレージは、次のストレージポリシーを提供します。
ストレージポリシー
説明
デフォルトのストレージポリシー
新しく書き込まれたデータは、効率的なクエリをサポートするためにホットデータディスクに保存されます。 格納されたホットデータの量が格納しきい値に達すると、ホットデータディスク内で最大サイズの部品データファイルが自動的にコールドデータディスクに移行されます。 このようにして、新たに書き込まれたホットデータをホットデータディスクに記憶することができる。
生存時間 (TTL) に基づくストレージポリシー
デフォルトのストレージポリシーにTTL句を追加します。 このようにして、TTL句で指定された期間より前に生成されたすべてのデータは、自動的にコールドデータディスクに移行されます。
注意事項
ApsaraDB for ClickHouseのデータバックアップ機能を有効にした場合クラスターの場合、このクラスターでホットデータとコールドデータの階層ストレージを有効にすることはできません。
オフピーク時にのみホットデータとコールドデータの階層ストレージを有効にすることを推奨する場合。 ホットデータとコールドデータの階層ストレージを有効にすると、クラスターが再起動されます。 再起動中は、クラスター情報のみを表示できます。 クラスターのアップグレード、スケールアウト、スケールイン、またはパラメーター設定の変更はできません。
ホットデータとコールドデータの階層ストレージを使用する場合、テーブルのストレージポリシーを指定する必要があります。
テーブルを作成するときは、
SETTINGS storage_policy = 'hot_to_cold '
を使用してデータストレージポリシーを指定できます。既存のテーブルのデータストレージポリシーを変更できます。
2024年1月1日以降に有効になったホットデータとコールドデータの階層ストレージを持つクラスター
次のステートメントを実行して、データストレージポリシーを変更します。
ALTER TABLE <table_name> MODIFY SETTING storage_policy = 'hot_to_cold';
次の表に、上記のステートメントのパラメーターを示します。
パラメーター
説明
table_name
テーブルの名前。
2024年1月1日より前に有効になったホットデータとコールドデータの階層ストレージを持つクラスター
ホットおよびコールドデータストレージポリシーの追加を申請するチケットを起票します。 これにより、ポリシーを使用して、ホットデータディスクからコールドデータディスクにデータを移行できます。
ホットデータとコールドデータの階層ストレージ機能は、この機能を有効にした後は無効にできません。
課金
次のルールに基づいて、ホットデータおよびコールドデータ機能の階層ストレージに対して課金されます。
ストレージタイプ
課金の詳細
ホットデータ保存
クラスター用に購入したストレージスペースは、ホットデータ用のストレージスペースです。 クラスターを購入した後、ホットデータ用のストレージを購入する必要はありません。
コールドデータストレージ
従量課金の課金方法に基づいて、コールドデータストレージに対して課金されます。 ストレージを使用する前に、コールドデータ用のストレージを購入する必要はありません。 使用済みストレージに基づいて、1時間ごとにコールドデータストレージに対して課金されます。
コールドデータストレージの単価の詳細については、「ApsaraDB For ClickHouseクラスターのストレージ料金」をご参照ください。
課金式: コールドストレージスペースの料金=コールドデータストレージの単価 × 使用済みコールドデータストレージ × 使用期間。
たとえば、コールドデータストレージの単価がGB時間あたりUSD 0.000026で、19:00から20:00まで2,000 GBのコールドデータが保存されている場合、合計料金は次の式に基づいて計算されます。GB時間あたりUSD 0.000026 × 2,000 GB × 1時間=USD 0.052。 20:00〜21:00の間にコールドデータ用に500 GBのストレージスペースを解放した場合、1,500 GBのストレージのみが使用されます。 この場合、20:00〜21:00の間に発生する合計料金は、次の式に基づいて計算されます。GB時間あたりのUSD 0.000026 × 1,500 GB × 1時間=USD 0.039。
前述の価格はあなたの参照のためにだけ提供されます。 実際の課金シナリオでは、ApsaraDB for ClickHouseコンソールに表示される料金が優先されます。
ホットデータとコールドデータの階層化ストレージの有効化
ApsaraDB for ClickHouseコンソールにログインします。
上部のナビゲーションバーで、クラスターがデプロイされているリージョンを選択します。
[クラスター] ページで、[コミュニティ互換版のクラスター] タブをクリックし、管理するクラスターのIDをクリックします。
左側のナビゲーションウィンドウで、[コールドおよびホットレイヤードストレージ] をクリックします。
クリックして階層ストレージを有効にするをクリックします。
[階層ストレージの有効化] メッセージで、[OK] をクリックします。
その後、システムはクラスターを再起動します。 クラスターの状態が [設定の変更] から [実行中] に変更されると、ホットデータとコールドデータの階層ストレージが有効になります。
ホットデータとコールドデータの階層ストレージが有効化された後に使用されるデフォルトストレージポリシー
次の表に、ホットデータとコールドデータの階層ストレージが有効になった後に使用されるデフォルトのストレージポリシーのパラメーターを示します。
パラメーター | 説明 |
move_factor | ホットデータの全ストレージに対するホットデータの使用可能なストレージの割合がmove_factorパラメーターの値より小さい場合、ホットデータディスク内で最大のサイズの部品データファイルが自動的にコールドデータディスクに移行されます。 有効値: 説明 ディスク領域の表示方法の詳細については、このトピックの「ディスク領域の表示」をご参照ください。 |
prefer_not_to_merge | コールドデータディスク上のデータをマージするかどうかを指定します。 有効な値:
|
TTLベースの階層ストレージポリシーの追加
デフォルトのストレージポリシーにTTL句を追加します。 このようにして、TTL句で指定された期間より前に生成されたすべてのデータは、自動的にコールドデータディスクに移行されます。
次のサンプルコードは、TTL句を追加する方法の例を示しています。
TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk'
下表に、各パラメーターを説明します。
パラメーター | 説明 |
time_column | DATEまたはDATETIMEデータ型の列。 |
数値 | 移行するデータが生成されるまでの期間。 一般的な単位は、日、週、月、年です。 |
TTL句の詳細については、「TTL」をご参照ください。
例
日付列に基づいて、90日前に生成されたすべてのデータをコールドデータディスクに移行します。 日付列には、データが生成された日付が含まれます。 次の文を実行して、テーブルを作成します。
CREATE TABLE ttl_test_tbl
(
`f1` String,
`f2` String,
`f3` Int64,
`f4` Float64,
`date` Date
)
ENGINE = MergeTree()
PARTITION BY date
ORDER BY f1
TTL date + INTERVAL 90 DAY TO DISK 'cold_disk'
SETTINGS storage_policy = 'hot_to_cold';
ホットデータとコールドデータのTTLベースの階層化ストレージの変更
DATEまたはDATETIMEデータ型の列とTTL句の期間を変更して、TTLベースの階層ストレージポリシーを変更できます。
デフォルトでは、TTLベースの階層ストレージポリシーが変更された後、履歴データと新しいデータは新しいストレージポリシーに基づいて保存されます。
履歴データのTTLベースの階層ストレージポリシーを変更しない場合は、TTLベースの階層ストレージポリシーを変更する前に、
set materialize_ttl_modify=0;
ステートメントを実行できます。 ステートメントの実行後、TTLベースの階層ストレージポリシーを変更できます。 履歴データは、元のストレージポリシーに基づいて保存されます。 新しいストレージポリシーに基づいて、新しいデータのみが保存されます。TTLベースの階層ストレージポリシーを変更した後、元のストレージポリシーに基づいてコールドデータディスクに移行されたデータは、自動的にホットデータディスクに移行されません。 このようなコールドデータをホットデータディスクに移行する場合は、このトピックの「ホットデータディスクとコールドデータディスクへのデータの移行」をご参照ください。
次のサンプルコードは、TTLベースの階層ストレージポリシーを変更する方法の例を示しています。
ALTER TABLE <table_name> ON CLUSTER default MODIFY TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk';
下表に、各パラメーターを説明します。
パラメーター | 説明 |
table_name | <td class="en-UStry align-left colsep-1 rowsep-1">テーブル名。</td> |
time_column | DATEまたはDATETIMEデータ型の新しい列。 |
数値 | 移行するデータが生成される前の新しい期間。 一般的な単位は、日、週、月、年です。 |
ホットデータディスクとコールドデータディスクのデータを移行する
次のステートメントを実行して、ホットデータディスクからコールドデータディスクにデータを移行します。
ALTER TABLE <table_name> ON CLUSTER default MOVE PARTITION <partition> TO DISK 'cold_disk';
次の文を実行して、データをコールドデータディスクからホットデータディスクに移行します。
ALTER TABLE <table_name> ON CLUSTER default MOVE PARTITION <partition> TO DISK 'default';
説明partition
はパーティション名を指定します。 system.partsシステムテーブルで値を表示できます。
ホットデータディスクとコールドデータディスクのデータを表示する
次のステートメントを実行して、ホットデータディスク上のデータを表示します。
SELECT * FROM system.parts WHERE database = '<db_name>' AND TABLE = '<tbl_name>' AND disk_name ='default' AND active = 1;
次のステートメントを実行して、コールドデータディスク上のデータを表示します。
SELECT * FROM system.parts WHERE database = '<db_name>' AND TABLE = '<tbl_name>' AND disk_name ='cold_disk' AND active = 1;
ディスク領域の表示
ホットデータとコールドデータの階層ストレージが有効になったら、次のステートメントを実行してディスク容量を表示できます。
SELECT * FROM system.disks;
次の応答が返されます。
┌─name─────┬─────────path───────────────────────────┬─free_space───────────┬─total_space ─────────┬─used_space───┬─keep_free_space───┬──type──┐
│ cold_disk│ /clickhouse/data/data/disks/cold_disk/ │ 18446744073709551615 │ 18446744073709551615 │ 115312080698 │ 0 │ OSS │
│ default │ /clickhouse/data/data/ │ 201663209472 │ 207083249664 │ 5420040192 │ 0 │ local │
└──────────┴────────────────────────────────────────┴──────────────────────┴──────────────────────┴──────────────┴───────────────────┴────────┘
次の表に、返された結果のパラメーターを示します。
パラメーター | 説明 |
name | ディスク名。 有効な値:
|
パス | ディスク上のデータが格納されるパス。 |
free_space | ディスク上の使用可能なスペース。 コールドデータディスク上の利用可能なスペースは制限されない。 単位はバイトです。 |
total_space | 合計ディスク容量。 コールドデータディスク上の利用可能なスペースは制限されない。 単位はバイトです。 |
used_space | ディスク上で使用されるスペース。 単位はバイトです。 |
keep_free_space | ディスク上の予約済みの空き容量。 単位はバイトです。 |
type | ストレージメディア。 有効な値:
|