Семейство движков таблиц Log
Эти движки разработаны для сценариев, когда требуется быстро записывать множество небольших таблиц (до примерно 1 миллиона строк) и затем считывать их целиком.
Движки семейства:
| Движки семейства Log |
|---|
| StripeLog |
| Log |
| TinyLog |
Движки таблиц семейства Log могут хранить данные в распределённых файловых системах HDFS или S3.
Несмотря на название, *движки таблиц Log не предназначены для хранения логов. Их следует использовать только для небольших объёмов данных, которые нужно быстро записывать.
Общие свойства
Движки:
-
Хранят данные на диске.
-
При записи добавляют данные в конец файла.
-
Поддерживают блокировки для конкурентного доступа к данным.
Во время выполнения запросов
INSERTтаблица блокируется, и другие запросы на чтение и запись данных ожидают её разблокировки. Если нет запросов на запись данных, любое количество запросов на чтение может выполняться одновременно. -
Не поддерживают мутации.
-
Не поддерживают индексы.
Это означает, что запросы
SELECTпо диапазонам данных неэффективны. -
Не выполняют запись данных атомарно.
Вы можете получить таблицу с повреждёнными данными, если что-то прервёт операцию записи, например, аварийное выключение сервера.
Отличия
Движок TinyLog является самым простым в семействе и предоставляет минимальный набор функций и наименьшую производительность. Движок TinyLog не поддерживает параллельное чтение данных несколькими потоками в рамках одного запроса. Он читает данные медленнее, чем другие движки из семейства, которые поддерживают параллельное чтение в рамках одного запроса, и использует почти столько же файловых дескрипторов, сколько движок Log, поскольку хранит каждый столбец в отдельном файле. Используйте его только в простых сценариях.
Движки Log и StripeLog поддерживают параллельное чтение данных. При чтении данных ClickHouse использует несколько потоков. Каждый поток обрабатывает отдельный блок данных. Движок Log использует отдельный файл для каждого столбца таблицы. StripeLog хранит все данные в одном файле. В результате движок StripeLog использует меньше файловых дескрипторов, но движок Log обеспечивает более высокую производительность при чтении данных.