Log ファミリーのテーブルエンジンは、データを HDFS または S3 の分散ファイルシステムに保存できます。
共通のプロパティ
- データをディスクに保存します。
- 書き込み時は、ファイルの末尾にデータを追記します。
-
データへの同時実行アクセスに対するロックをサポートします。
INSERTクエリの実行中はテーブルがロックされ、データの読み取りおよび書き込みを行う他のクエリは、テーブルのロックが解除されるまで待機します。データを書き込むクエリが存在しない場合は、データ読み取りクエリを任意の数だけ同時実行できます。 - mutations をサポートしません。
-
索引をサポートしません。
つまり、データの範囲に対する
SELECTクエリは効率的ではありません。 - データをアトミックに書き込みません。 たとえばサーバーの異常終了など、書き込み処理中に問題が発生すると、データが破損したテーブルが生じる可能性があります。
違い
TinyLog エンジンは、このファミリーの中で最もシンプルで、機能が最も限られており、効率も最も低いエンジンです。TinyLog エンジンは、1 つのクエリ内で複数スレッドによるデータの並列読み取りをサポートしていません。また、各カラムを別々のファイルに格納するため、Log エンジンとほぼ同数のファイルディスクリプタを使用します。そのうえ、1 つのクエリからの並列読み取りをサポートする同じファミリーの他のエンジンよりも、データの読み取り速度が遅くなります。使用するのは単純な用途に限ってください。
Log エンジンと StripeLog エンジンは、データの並列読み取りをサポートしています。データの読み取り時には、ClickHouse は複数のスレッドを使用します。各スレッドはそれぞれ別個のデータブロックを処理します。Log エンジンでは、テーブルの各カラムごとに個別のファイルを使用します。StripeLog は、すべてのデータを 1 つのファイルに格納します。その結果、StripeLog エンジンのほうが使用するファイルディスクリプタは少なくなりますが、データ読み取り時の効率は Log エンジンのほうが高くなります。