このトピックでは、LindormTable のホット コールドデータ分離機能に関するよくある質問への回答を提供します。
LindormTable は、コールドデータをどのように識別し、コールドストレージに転送しますか?
LindormTable は、compaction
操作が実行されると、ホットストレージからコールドストレージにコールドデータを非同期的に転送します。 デフォルトでは、LindormTable は、ホット コールドデータ境界の半分の間隔でコンパクション操作を自動的に実行します。 最小間隔は 1 日、最大間隔は major compaction
操作が実行される間隔の半分です。 デフォルトでは、major compaction
操作は 20 日間隔で実行されます。 たとえば、ホット コールドデータ境界を 3 日に設定すると、LindormTable は 1.5 日間隔で compaction
操作を実行してコールドデータをアーカイブします。 ホット コールドデータ境界を 1 日に設定すると、LindormTable は 1 日間隔で compaction
操作を実行します。
手動でトリガーを実行できますか?コンパクション
操作ですか?
A: はい、compaction
操作を手動でトリガーできます。 HBase シェルを使用して、テーブルで major_compact 'tableName'
コマンドを実行して、コンパクション操作をトリガーできます。 このようにして、コールドデータはホットストレージからコールドストレージに転送されます。
major_compact 'tableName'
コマンドを実行すると I/O 負荷が増加します。 そのため、このコマンドを頻繁に実行しないことをお勧めします。
コールドデータは、なぜ コンパクション
操作は実行されますか?
この問題は、データがディスクに書き込まれていないために発生します。 この問題を解決するには、flush
操作を実行してデータをディスクに書き込み、次に compaction
操作を実行してデータをコールドストレージに転送します。 HBase シェルまたは lindorm-cli を使用して、compaction
操作を実行できます。
HBase シェルを使用する場合は、major_compact コマンドを実行します。
lindorm-cli を使用する場合は、ALTER TABLE を参照して、コンパクション操作を実行するために使用される構文を確認してください。
コールドデータのアーカイブがホットデータよりも遅いのはなぜですか?
複数の
compaction
操作が累積されると、コールドデータがコールドストレージにアーカイブされる速度が低下します。 この場合、スケールアウトまたはインスタンスをスペックアップしてインスタンスの CPU コアを追加し、累積されたcompaction
操作を処理する必要があります。説明Lindorm コンソールで
compaction
操作が累積されているかどうかを確認するには、次の手順を実行します。インスタンスの詳細ページに移動します。 左側のナビゲーションウィンドウで、[インスタンス監視] をクリックします。 表示されるページで、[compaction Queue Size(count)] メトリックを [テーブルメトリック - クラスタ負荷] セクションで確認します。 グラフに表示される数値が 0 より大きく、増加し続けている場合は、compaction
操作が累積されています。 Lindorm インスタンスの監視情報を表示する方法の詳細については、「監視情報を表示する」をご参照ください。最新バージョンの LindormTable では、コールドデータがコールドストレージにすばやくアーカイブされます。 Lindorm インスタンスの LindormTable を最新バージョンにアップグレードしてください。 LindormTable のバージョンを表示またはアップグレードする方法の詳細については、「LindormTable のリリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンをアップグレードする」をご参照ください。
他に質問がある場合は、テクニカルサポート にお問い合わせください。
カスタム時間列に基づいてホット コールドデータ分離が実装されているテーブルでは、コールドデータの行は更新後もコールドストレージに保存されますか?
更新するデータがカスタム時間列にない場合、行は引き続きコールドストレージに保存されます。 更新するデータがカスタム時間列にある場合、Lindorm は、カスタム時間列の更新データに基づいて、この行をコールドストレージに保存するかどうかを判断します。 たとえば、テーブルに p1、p2、c1、c2 の列が含まれているとします。 テーブルのプライマリキーには、p1 列と p2 列が含まれています。 データの行で、p1、p2、c1、c2 列の値はそれぞれ row1、2023.1.28、c1、c2 です。 テーブルのホット コールドデータ境界は 1 日で、現在の日付は 2023 年 1 月 30 日です。この場合、この行はコールドデータとして判断され、コールドストレージに保存されます。 c1 列と c2 列のデータを更新する場合、この行は引き続きコールドストレージに保存されます。 p2 の値を 2023.1.30 に更新すると、この行はホット コールドデータ境界に基づいて 2023 年 2 月 2 日までホットデータとして判断されます。
行のカスタム時間列に値が指定されていない場合、行はコールドストレージにアーカイブされますか?
いいえ、行はコールドストレージにアーカイブされません。 ホット コールドデータ分離は、カスタム時間列の値に基づいて実装されます。 カスタム時間列が指定されていない行は、ホットストレージに保存されます。
カスタム時間列に基づいてホット コールドデータ分離が実装されているテーブルでは、コールドデータの行は更新後もコールドデータのままですか?
いいえ。コールドデータの行が更新されると、この行のタイムスタンプが更新されます。 そのため、コールドデータはホットデータになります。
ホットデータのみをクエリする場合でも、コールドデータがクエリに対して返されるのはなぜですか?
HOT_ONLY パラメータまたは _l_hot_only_ ヒントを設定して、ホットデータのみをクエリできます。 データはタイムスタンプに基づいて定期的にコールドストレージにアーカイブされます。 そのため、データをクエリするときに、一部のコールドデータがまだコールドストレージにアーカイブされていない場合があります。 この場合、コールドデータが返されます。 この問題を解決するには、クエリするホットデータの時間範囲を指定できます。 次の例は、この関数の使用方法を示しています。
// _l_ts_min_ ヒントと _l_ts_max_ ヒントを使用して時間範囲を指定する必要があります。 _l_ts_min_ ヒントは、現在のシステム時刻とホット コールドデータ境界の差を示します。 _l_ts_max_ ヒントは現在のシステム時刻を示します。 ヒントの単位は同じである必要があります。
SELECT /*+ _l_hot_only_(true), _l_ts_min_(1000), _l_ts_max_(2001) */ * FROM test WHERE p1>1;
クエリで時間範囲を指定し、HOT_ONLY ヒントを使用してもクエリがタイムアウトするのはなぜですか?
この問題は、一般に、データをテーブルに移行した後、またはテーブルのホット コールド分離を有効にした後に発生します。 この場合、コールドデータはコールドストレージに完全にアーカイブされておらず、大量のコールドデータがまだホットストレージに保存されています。 そのため、クエリがタイムアウトする可能性があります。 この問題を解決するには、テーブルで major compaction
操作を実行する必要があります。 この操作を実行するために使用される構文の詳細については、「ALTER TABLE」をご参照ください。
インデックステーブルとプライマリテーブルの両方でホット コールドデータ分離が有効になっており、クエリで と が設定されている場合でも、インデックステーブルとプライマリテーブルのクエリ結果が異なるのはなぜですか?HOT_ONLYおよび_l_hot_only_(true)
クエリで設定されていますか?
インデックステーブルとプライマリテーブルのコールドデータは、定期的に個別にアーカイブされます。 そのため、インデックステーブルとプライマリテーブルのホットストレージのデータは、特定の期間内では異なる場合があります。 この場合、インデックステーブルとプライマリテーブルのクエリ結果が異なります。 この種の問題を回避するには、クエリでホットデータの時間範囲を指定できます。
理由は次のとおりです。コンパクション
コールド・ホットデータ分離を有効にした直後にトリガーされる操作は?
コンパクション操作は、現在の時刻と最も古いファイルの生成時刻の差が指定されたアーカイブ間隔よりも大きい場合にトリガーされます。 この場合、compaction
操作は、ホット コールドデータ分離を有効にした直後にトリガーされ、コールドデータをコールドストレージに転送します。
SCAN メソッドを使用してコールドデータをクエリできますか?
はい、タイムスタンプに基づいて保存されているコールドデータをクエリ し、SCAN メソッドを使用して指定された範囲内のコールドデータをクエリ できます。 容量ストレージとアーカイブストレージでは読み取り IOPS が低いため、データクエリプロセスに時間がかかる場合があります。