Alibaba Cloud が開発した `aliyun-codec` プラグインは、Elasticsearch 用のインデックス圧縮プラグインです。基盤となる行指向 (ソース)、列指向 (doc values)、および転置 (ポスティング) ファイルを圧縮します。このプラグインは `source_reuse_doc_values` 機能もサポートしています。これにより、ロギングや時系列分析など、書き込み量が多く、インデックスのストレージコストが高いシナリオに最適です。
注意事項
使用する前にプラグインをインストールする必要があります。詳細については、「組み込みプラグインのインストールまたはアンインストール」をご参照ください。
`aliyun-codec` プラグインは、Elasticsearch 7.10.0 のインスタンスでのみサポートされています。
インデックス圧縮機能にはカーネルバージョン
1.5.0以降が、source_reuse_doc_values機能にはカーネルバージョン1.6.0以降が必要です。現在のカーネルバージョンがこれらの要件を満たしていない場合は、まずカーネルをアップグレードする必要があります。
パフォーマンスリファレンス
以下の `aliyun-codec` プラグインのパフォーマンスデータは、特定のテスト環境で記録されたものであり、参考用です。
テスト環境:サイズが 1.2 TB、シャード数が 22 の単一インデックス。行指向、列指向、転置圧縮が有効になっており、すべて zstd 圧縮アルゴリズムを使用しています。データセットは Alibaba Cloud Elasticsearch の本番ログで構成されています。
インデックス圧縮:インデックス圧縮を使用しないクラスターとの比較:
書き込みスループット:変更なし。
全体的なインデックスサイズ:40% 削減。
I/O 負荷の高いクエリシナリオでのレイテンシー:50% 削減。
source_reuse_doc_values:この機能を有効にしていないクラスターとの比較:
書き込みスループット:変更なし。
全体的なインデックスサイズ:最大 40% 削減。削減率は、インデックス内で `source_reuse_doc_values` 機能が有効になっているフィールドの割合によって異なります。
I/O 負荷の高いクエリシナリオでのレイテンシー:機能が有効になっているフィールドの割合やノードのディスクタイプなどの要因によって異なります。
インデックス圧縮機能の使用
`index.codec` 設定は静的です。この設定を変更する前にインデックスを閉じ、変更後に再度開く必要があります。
test という名前のインデックスを作成したと仮定します。次のコマンドを実行して、インデックスの圧縮を有効にします:
POST test/_close
PUT test/_settings
{
"index.codec" : "ali"
}
POST test/_openこの構成を適用すると、Elasticsearch はデフォルトで zstd アルゴリズムを使用して、このインデックスの行指向 (ソース)、列指向 (doc values)、および転置 (ポスティング) ファイルを圧縮します。
特定のファイルタイプに圧縮アルゴリズムを指定することもできます。次の例では、転置ファイルの圧縮を無効にし、行指向ファイルと列指向ファイルに zstd アルゴリズムを使用します。ファイルタイプの圧縮を無効にするには、対応するパラメーターを "" に設定します。
POST test/_close
PUT test/_settings
{
"index.codec":"ali",
"index.doc_value.compression.default":"zstd",
"index.postings.compression":"",
"index.source.compression":"zstd"
}
POST test/_open次の表に、インデックス構成パラメーターを示します。
パラメーター | 説明 |
index.doc_value.compression.default | * |
index.postings.compression |
|
index.source.compression | 行指向 (ソース) ファイルの圧縮アルゴリズムを指定します。有効な値:
* |
index.postings.pfor.enabled | 転置インデックスのポスティングに対するエンコーディングの最適化を有効にするかどうかを指定します。有効な値は |
source_reuse_doc_values 機能の使用
Elasticsearch のストレージレイヤーは、_source、転置インデックス、および doc_values にデータの複数のコピーを保存します。`source_reuse_doc_values` 機能は、doc_values にすでに存在するデータを _source から削除することで、全体的なインデックスサイズを削減します。
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 機能を有効にした後、次の設定を調整できます。
フィールド最大数の調整
`source_reuse_doc_values` が有効になっているフィールドの数が指定された値を超えると、Elasticsearch は例外をスローするか、この機能を自動的に無効にします。デフォルト値は 50 です。
PUT _cluster/settings
{
"persistent": {
"apack.ali_codec_service.source_reuse_doc_values.max_fields": 100
}
}フィールド数上限の強制設定
true:上限を超えた場合、Elasticsearch は例外をスローします。false:上限を超えた場合、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` 機能は、この機能が有効になっているフィールドから値を同時に読み取り、アセンブルします。デフォルトの同時実行数は 5 です。
PUT test/_settings
{
"index": {
"ali_codec_service": {
"source_reuse_doc_values": {
"fetch_slice": 2
}
}
}
}スレッドプールとキューサイズの調整
デフォルトでは、スレッドプールのサイズはノードのコア数、デフォルトのキューサイズは 1000 です。これらの設定は YML ファイルを変更することによってのみ変更できます。手順については、「YML パラメーターの設定」をご参照ください。
apack.doc_values_fetch:
size: 8
queue_size: 1000