主キーテーブル
主キーテーブルは、StarRocks によって設計された新しいストレージエンジンを使用しています。その主な利点は、リアルタイムのデータ更新をサポートしながら、複雑なアドホッククエリに対して効率的なパフォーマンスを確保することにあります。リアルタイムのビジネス分析では、主キーテーブルを使用することで、最新のデータを用いてリアルタイムで結果を分析し、データ分析におけるデータ遅延を軽減することができます。しかし、主キーは万能ではありません。不適切に使用すると、リソースの無駄遣いにつながる可能性があります。
したがって、このセクションでは、主キーのモデルをより効率的に使用して、望ましい結果を達成する方法を案内します。
主キーインデックスの選択
主インデックスは、主キーテーブルの最も重要なコンポーネントです。主キーインデックスは、主キー値と、主キー値によって識別されるデータ行の位置との間のマッピングを格納するために使用されます。
現在、3 種類の主キーインデックスをサポートしています。
- メモリ内フル主キーインデックス。
PROPERTIES (
"enable_persistent_index" = "false"
);
- ローカルディスクベースの永続性主キーインデックス。
PROPERTIES (
"enable_persistent_index" = "true",
"persistent_index_type" = "LOCAL"
);
- クラウドネイティブ永続性主キーインデックス。
PROPERTIES (
"enable_persistent_index" = "true",
"persistent_index_type" = "CLOUD_NATIVE"
);
メモリ内インデックスの使用は推奨しません。これは、メモリリソースの大幅な無駄遣いにつながる可能性があるためです。
共有データ(エラスティック)StarRocks クラスタを使用している場合は、クラウドネイティブ永続性主インデ ックスを選択することをお勧めします。ローカルディスクベースの永続性主インデックスとは異なり、完全なインデックスデータをリモートオブジェクトストレージに格納し、ローカルディスクはキャッシュとしてのみ機能します。ローカルディスクベースの永続性主インデックスと比較して、その利点は次のとおりです。
- ローカルディスク容量に依存しない。
- データシャードのリバランス後にインデックスを再構築する必要がない。
主キーの選択
主キーは通常、クエリを高速化するのに役立ちません。ORDER BY
句を使用して、主キーとは異なる列をソートキーとして指定し、クエリを高速化することができます。したがって、主キーを選択する際には、データのインポートおよび更新プロセス中の一意性のみを考慮する必要があります。
主キーが大きいほど、メモリ、I/O、およびその他のリソースを多く消費します。したがって、一般的には、あまりにも多くの列や過度に大きな列を主キーとして選択することは避けることが推奨されます。主キーのデフォルトの最大サイズは 128 バイトで、be.conf
の primary_key_limit_size
パラメータによって制御されます。
primary_key_limit_size
を増やしてより大きな主キーを選択することができますが、これによりリソース消費が増加することに注意してください。
永続性インデックスがどのくらいのストレージとメモリスペースを 占有するか?
ストレージスペースコストの計算式
(key size + 8 bytes) * row count * 50%
50% は推定圧縮効率であり、実際の圧縮効果はデータ自体に依存します。
メモリコストの計算式
min(l0_max_mem_usage * tablet cnt, update_memory_limit_percent * BE process memory);