Перейти к основному содержимому
Перейти к основному содержимому

Журнал

Данный движок принадлежит семейству движков Log. Смотрите общие свойства движков Log и их различия в статье Семейство движков журнала.

Log отличается от TinyLog тем, что небольшой файл "меток" хранится с файловыми колонками. Эти метки записываются для каждого блока данных и содержат смещения, указывающие, с какого места начинать чтение файла, чтобы пропустить заданное количество строк. Это позволяет читать данные таблицы в нескольких потоках. Для параллельного доступа к данным операции чтения могут выполняться одновременно, в то время как операции записи блокируют чтения и друг друга. Движок Log не поддерживает индексы. Аналогично, если запись в таблицу не удалась, таблица повреждается, и чтение из неё возвращает ошибку. Движок Log подходит для временных данных, таблиц с записью один раз, а также для целей тестирования или демонстрации.

Создание таблицы

Смотрите подробное описание запроса CREATE TABLE.

Запись данных

Движок Log эффективно сохраняет данные, записывая каждую колонку в свой собственный файл. Для каждой таблицы движок Log записывает следующие файлы в указанный путь хранения:

  • <column>.bin: файл данных для каждой колонки, содержащий сериализованные и сжатые данные. __marks.mrk: файл меток, хранящий смещения и количество строк для каждого вставленного блока данных. Метки используются для обеспечения эффективного выполнения запросов, позволяя движку пропускать неактуальные блоки данных во время чтения.

Процесс записи

Когда данные записываются в таблицу Log:

  1. Данные сериализуются и сжимаются в блоки.
  2. Для каждой колонки сжатые данные добавляются в соответствующий файл <column>.bin.
  3. Соответствующие записи добавляются в файл __marks.mrk, чтобы зафиксировать смещение и количество строк вновь вставленных данных.

Чтение данных

Файл с метками позволяет ClickHouse параллелить чтение данных. Это означает, что запрос SELECT возвращает строки в непредсказуемом порядке. Используйте предложение ORDER BY, чтобы отсортировать строки.

Пример использования

Создание таблицы:

Вставка данных:

Мы использовали два запроса INSERT, чтобы создать два блока данных внутри файлов <column>.bin.

ClickHouse использует несколько потоков при выборе данных. Каждый поток читает отдельный блок данных и возвращает результирующие строки независимо по мере завершения. В результате порядок блоков строк в выводе может не соответствовать порядку тех же блоков во входных данных. Например:

Сортировка результатов (по умолчанию в порядке возрастания):