Log
このエンジンは Log
エンジンのファミリーに属します。 Log
エンジンの一般的なプロパティや、Log Engine Familyの記事での違いについて確認してください。
Log
は、TinyLogとは異なり、カラムファイルとともに小さな「マーク」ファイルを持ちます。これらのマークは各データブロックに書き込まれ、スキップする行数を指定するためにファイルのどこから読み始めるかを示すオフセットが含まれています。これにより、複数のスレッドでテーブルデータを読み取ることが可能になります。
同時データアクセスのために、読み取り操作は同時に実行されることができますが、書き込み操作は読み取りと互いにブロックします。
Log
エンジンはインデックスをサポートしていません。同様に、テーブルへの書き込みが失敗した場合、テーブルは破損し、そこからの読み取りはエラーを返します。Log
エンジンは、一時的なデータ、書き込み専用テーブル、テストやデモ目的に適しています。
テーブルの作成
CREATE TABLEクエリの詳細な説明を参照してください。
データの書き込み
Log
エンジンは、各カラムをそれぞれのファイルに書き込むことによってデータを効率的に保存します。各テーブルに対して、Logエンジンは指定されたストレージパスに以下のファイルを作成します。
<column>.bin
: 各カラムのデータファイルで、シリアライズされ圧縮されたデータを含みます。__marks.mrk
: マークファイルで、挿入された各データブロックのオフセットと行数を記録します。マークは、エンジンが読み取り中に無関係なデータブロックをスキップできるようにして、効率的なクエリ実行を促進します。
書き込みプロセス
Log
テーブルにデータが書き込まれると:
- データがシリアライズされ圧縮され、ブロックにまとめられます。
- 各カラムについて、圧縮されたデータがその対応する
<column>.bin
ファイルに追加されます。 - 新しく挿入されたデータのオフセットと行数を記録するために、
__marks.mrk
ファイルに対応するエントリが追加されます。
データの読み取り
マークのあるファイルにより、ClickHouseはデータの読み取りを並列化できます。これにより、SELECT
クエリは行を予測不可能な順序で返します。行をソートするには、ORDER BY
句を使用してください。
使用例
テーブルの作成:
データの挿入:
私たちは2つのINSERT
クエリを使用して、<column>.bin
ファイル内に2つのデータブロックを作成しました。
ClickHouseはデータを選択するときに複数のスレッドを使用します。各スレッドは別々のデータブロックを読み取り、終了するごとに独立して結果の行を返します。その結果、出力内の行ブロックの順序は、入力内の同じブロックの順序と一致しない場合があります。例えば:
結果をソートする(デフォルトでは昇順):