aliyun-codec は、Alibaba Cloud によって開発されたインデックス圧縮プラグインです。このプラグインを使用すると、Elasticsearch の下位層にあるインデックス内のさまざまな種類のドキュメントを圧縮できます。また、プラグインによって提供される source_reuse_doc_values 機能を使用することもできます。このプラグインは、ログや時系列データ分析など、大量のデータが書き込まれるシナリオや、インデックスに高いストレージコストが必要なシナリオに適しています。このプラグインは、これらのシナリオでのインデックスのストレージコストを大幅に削減できます。
背景情報
aliyun-codec プラグインは、さまざまな種類の圧縮アルゴリズムと source_reuse_doc_values 機能をサポートしています。このトピックでは、aliyun-codec プラグインによって提供される次の機能の使用方法について説明します。
次の説明は、プラグインで実行されたパフォーマンステストに関する情報を提供します。
テスト環境
データセット:Alibaba Cloud Elasticsearch クラスタのクラスタログ。
データ量:1.2 TiB のデータを格納し、22 個のプライマリシャードを持つ単一のインデックス。
インデックス構成:行指向、列指向、および転置インデックスドキュメントの圧縮が有効になっています。インデックスには zstd 圧縮アルゴリズムが使用されます。
テスト結果
aliyun-codec プラグインが使用されているがインデックス圧縮が有効になっていないクラスタと比較して、プラグインが使用されインデックス圧縮が有効になっているクラスタには、次の改善点があります。
書き込みスループット:変更なし。
インデックスの全体サイズ:40% 削減。
I/O 集中型クエリのレイテンシ:50% 削減。
aliyun-codec プラグインが使用されているが source_reuse_doc_values が有効になっていないクラスタと比較して、プラグインが使用され source_reuse_doc_values が有効になっているクラスタには、次の改善点があります。
書き込みスループット:変更なし。
インデックスの全体サイズ:最大 40% 削減。インデックスの全体サイズが削減される割合は、インデックス内で source_reuse_doc_values 機能が有効になるフィールドの割合に関連しています。
I/O 集中型クエリのレイテンシ:レイテンシは、インデックス内で source_reuse_doc_values 機能が有効になるフィールドの割合やノードのディスクタイプなどの要因に関連しています。実際のテスト結果が優先されます。
前提条件
Alibaba Cloud Elasticsearch V7.10.0 クラスタが作成されていること。
詳細については、「Alibaba Cloud Elasticsearch クラスタの作成」をご参照ください。
Elasticsearch クラスタのカーネルバージョンがビジネス要件に基づいてアップグレードされていること。
インデックス圧縮機能を使用するには、Elasticsearch クラスタのカーネルバージョンを V1.5.0 以後にアップグレードします。
インデックス圧縮機能と source_reuse_doc_values 機能の両方を使用するには、Elasticsearch クラスタのカーネルバージョンを V1.6.0 以後にアップグレードします。
Elasticsearch クラスタのカーネルバージョンのアップグレード方法の詳細については、「クラスタのバージョンのアップグレード」をご参照ください。
Elasticsearch クラスタに aliyun-codec プラグインがインストールされていること。デフォルトでは、aliyun-codec プラグインは Elasticsearch V7.10.0 クラスタにインストールされています。
Elasticsearch コンソールの [プラグイン] ページで、クラスタにプラグインがインストールされているかどうかを確認できます。プラグインがインストールされていない場合は、最初にインストールしてください。詳細については、「組み込みプラグインのインストールと削除」をご参照ください。
制限事項
カーネルバージョンが V1.5.0 以降の Alibaba Cloud Elasticsearch V7.10.0 クラスタのみが、aliyun-codec プラグインのインデックス圧縮機能をサポートしています。Alibaba Cloud Elasticsearch V6.7.0 クラスタを使用する場合、圧縮に使用できるのは codec-compression プラグインのみです。詳細については、「ベータ版の codec-compression プラグインの使用」をご参照ください。
カーネルバージョンが V1.6.0 以降の Alibaba Cloud Elasticsearch V7.10.0 クラスタのみが、aliyun-codec プラグインの source_reuse_doc_values 機能をサポートしています。デフォルトでは、このようなクラスタのデフォルトのインデックステンプレート aliyun_default_index_template でインデックス圧縮機能が有効になっています。これは、このようなクラスタのデフォルトのインデックステンプレートの
index.codecが true に設定されていることを示します。
インデックス圧縮機能の使用
Elasticsearch クラスタの Kibana コンソールにログインし、プロンプトに従って Kibana コンソールのホームページに移動します。
Kibana コンソールへのログイン方法の詳細については、「Kibana コンソールへのログイン」をご参照ください。
説明この例では、Elasticsearch V7.10.0 クラスタを使用しています。他のバージョンのクラスタでの操作は異なる場合があります。コンソールでの実際の操作が優先されます。
表示されたページの右上隅にある [dev Tools] をクリックします。
[console] タブで、インデックス圧縮を有効にするコマンドを実行します。
たとえば、次のコマンドを実行して、test という名前の既存のインデックスのインデックス圧縮を有効にできます。
PUT test/_settings { "index.codec" : "ali" }デフォルトでは、インデックスのインデックス圧縮が有効になると、システムは zstd 圧縮アルゴリズムを使用して、インデックス内の行指向ドキュメント、列指向ドキュメント、および転置インデックスドキュメントを圧縮します。
別の圧縮アルゴリズムを使用して、インデックス内の特定の種類のドキュメントを圧縮することもできます。次のコードは、zstd アルゴリズムを使用して行指向ドキュメントと列指向ドキュメントを圧縮する例を示していますが、test インデックスの転置インデックスドキュメントのインデックス圧縮は有効にしていません。
説明特定の種類のインデックスのインデックス圧縮を無効にする場合は、関連するパラメータを
""に設定できます。たとえば、次のコードでは、index.postings.compressionパラメータが "" に設定されています。PUT test/_settings { "index.codec":"ali", "index.doc_value.compression.default":"zstd", "index.postings.compression":"", "index.source.compression":"zstd" }次の表は、インデックス圧縮に関連するパラメータについて説明しています。
パラメータ
値の説明
index.doc_value.compression.default
lz4:Iz4 圧縮アルゴリズムを使用して列指向ドキュメントを圧縮することを示します。
zstd:zstd 圧縮アルゴリズムを使用して列指向ドキュメントを圧縮することを示します。
説明aliyun-codec プラグインは、number、date、keyword、および ip タイプのフィールドを含む列指向ドキュメントのみを圧縮できます。
index.postings.compression
zstd:zstd 圧縮アルゴリズムを使用して転置インデックスドキュメントを圧縮することを示します。
index.source.compression
zstd:zstd 圧縮アルゴリズムを使用して行指向ドキュメントを圧縮することを示します。ブロックサイズは 128 KB です。
zstd_1024:zstd 圧縮アルゴリズムを使用して行指向ドキュメントを圧縮することを示します。ブロックサイズは 1024 KB です。
zstd_dict:zstd 圧縮アルゴリズムを使用して行指向ドキュメントを圧縮し、dict 機能を使用してドキュメントにデータを格納することを示します。 zstd_dict は、zstd よりも高い圧縮率を提供しますが、読み取りと書き込みのパフォーマンスは低くなります。
best_compression:オープンソースの Elasticsearch によって提供される best_compression 圧縮アルゴリズムを使用して行指向ドキュメントを圧縮することを示します。
default:オープンソースの Elasticsearch によって提供されるデフォルトの圧縮アルゴリズムを使用して行指向ドキュメントを圧縮することを示します。
index.postings.pfor.enabled
転置インデックスドキュメントのエンコーディングを最適化するかどうかを指定します。有効な値:
true
false
この機能は、8.0 のオープンソース Elasticsearch によって提供されています。 keyword、match_only_text、および text フィールドのストレージスペースを 14.4% 削減し、ディスク全体のサイズを 3.5% 削減できます。以前のバージョンの Alibaba Elasticsearch クラスタはこの機能を提供しています。
source_reuse_doc_values 機能の使用
source_reuse_doc_values 機能の有効化
インデックスを作成するときに、次のコマンドを実行して source_reuse_doc_values 機能を有効にします。
PUT test
{
"settings": {
"index": {
"ali_codec_service": {
"source_reuse_doc_values": {
"enabled": true
}
}
}
}
}source_reuse_doc_values 機能は、インデックスを作成するときにのみ有効にできます。有効にした後、この機能を無効にすることはできません。
source_reuse_doc_values 機能に関連する構成の変更
オープンソース Elasticsearch の下位層には、複数のデータコピーが格納されています。たとえば、データは _source、転置インデックスドキュメント、および doc_values に同時に格納されます。 source_reuse_doc_values 機能は、_source に格納されている JSON 形式のデータをプルーニングして、インデックス全体のサイズを削減します。
source_reuse_doc_values 機能を有効にした後、ビジネス要件に基づいて、この機能に関連する構成を変更できます。
source_reuse_doc_values 機能が有効になるフィールド数のしきい値を変更します。
source_reuse_doc_values 機能が有効になるフィールド数が指定したしきい値を超えると、Elasticsearch はエラーを報告するか、source_reuse_doc_values 機能を無効にします。デフォルトのしきい値は 50 です。次のコマンドを実行して、しきい値を変更できます。
PUT _cluster/settings { "persistent": { "apack.ali_codec_service.source_reuse_doc_values.max_fields": 100 } }source_reuse_doc_values 機能が有効になるフィールド数が、指定したしきい値以下である必要があるかどうかを指定します。
true:source_reuse_doc_values 機能が有効になるフィールド数が指定したしきい値を超えると、Elasticsearch はエラーを報告します。
false:source_reuse_doc_values 機能が有効になるフィールド数が指定したしきい値を超えると、Elasticsearch は source_reuse_doc_values 機能を無効にします。
PUT _cluster/settings { "persistent": { "apack.ali_codec_service.source_reuse_doc_values.strict_max_fields": true } }source_reuse_doc_values 機能が有効になるフィールドの値を読み取るために使用される同時スレッド数を変更します。
ドキュメントからデータを読み取るとき、システムは同時スレッドを使用して、ドキュメント内で source_reuse_doc_values 機能が有効になるフィールドの値を読み取り、値を結合します。時間コストを削減するために、source_reuse_doc_values 機能が有効になるフィールドの値を読み取るために使用される同時スレッド数を変更できます。同時スレッドのデフォルト数は 5 です。次のコマンドを実行して、数を変更できます。
PUT test/_settings { "index": { "ali_codec_service": { "source_reuse_doc_values": { "fetch_slice": 2 } } } }source_reuse_doc_values 機能が有効になるフィールドの値を読み取るために使用されるスレッドプールとキューのサイズを変更します。
スレッドプールのデフォルトサイズは、クラスタ内のデータノードの vCPU の総数と同じです。キューのデフォルトサイズは 1,000 です。これら 2 つの構成は、クラスタの YML 構成ファイルを変更することによってのみ変更できます。 YML 構成ファイルの変更方法の詳細については、「YML ファイルの構成」をご参照ください。次の構成情報をクラスタの YML 構成ファイルに追加して、構成を変更できます。
apack.doc_values_fetch: size: 8 queue_size: 1000