Лог
Движок относится к семейству Log
движков. Смотрите общие свойства Log
движков и их отличия в статье Семейство движков Log.
Log
отличается от TinyLog тем, что с файлом колонки соседствует небольшой файл "меток". Эти метки записываются в каждом блоке данных и содержат смещения, которые указывают, с какого места начинать чтение файла, чтобы пропустить указанное количество строк. Это позволяет читать данные таблицы в нескольких потоках. Для одновременного доступа к данным операции чтения могут выполняться одновременно, в то время как операции записи блокируют чтения и друг друга. Движок Log
не поддерживает индексы. Аналогично, если запись в таблицу не удалась, таблица становится поврежденной, и чтение из нее возвращает ошибку. Движок Log
подходит для временных данных, таблиц с одноразовой записью, а также для тестирования или демонстрационных целей.
Создание таблицы
Смотрите подробное описание запроса CREATE TABLE.
Запись данных
Движок Log
эффективно хранит данные, записывая каждую колонку в свой файл. Для каждой таблицы движок Log записывает следующие файлы в указанном пути хранения:
<column>.bin
: Файл данных для каждой колонки, содержащий сериализованные и сжатые данные.__marks.mrk
: Файл меток, хранящий смещения и количество строк для каждого вставленного блока данных. Метки используются для упрощения эффективного выполнения запросов, позволяя движку пропускать нерелевантные блоки данных во время чтения.
Процесс записи
Когда данные записываются в таблицу Log
:
- Данные сериализуются и сжимаются в блоки.
- Для каждой колонки сжатые данные добавляются в соответствующий файл
<column>.bin
. - Соответствующие записи добавляются в файл
__marks.mrk
, чтобы зафиксировать смещение и количество строк вновь вставленных данных.
Чтение данных
Файл с метками позволяет ClickHouse параллелизировать чтение данных. Это означает, что запрос SELECT
возвращает строки в непредсказуемом порядке. Используйте оператор ORDER BY
, чтобы отсортировать строки.
Пример использования
Создание таблицы:
Вставка данных:
Мы использовали два запроса INSERT
, чтобы создать два блока данных внутри файлов <column>.bin
.
ClickHouse использует несколько потоков при выборе данных. Каждый поток читает отдельный блок данных и возвращает результирующие строки независимо по мере завершения. В результате порядок блоков строк в выходе может не совпадать с порядком тех же блоков во входных данных. Например:
Сортировка результатов (по умолчанию по возрастанию):