Движок таблицы Log
Этот движок относится к семейству движков 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 использует несколько потоков при выборке данных. Каждый поток читает отдельный блок данных и по завершении независимо возвращает результирующие строки. В результате порядок блоков строк в выводе может не совпадать с порядком этих же блоков на входе. Например:
Сортировка результатов (по умолчанию — по возрастанию):