При использовании движка Memory в ClickHouse Cloud данные не реплицируются между всеми узлами (это сделано намеренно). Чтобы гарантировать, что все запросы направляются на один и тот же узел и что движок Memory работает ожидаемым образом, можно сделать одно из следующего:
- Выполнять все операции в рамках одного сеанса
- Использовать клиент, работающий через TCP или нативный интерфейс (что обеспечивает поддержку sticky connections), например clickhouse-client
PREWHERE, в том числе автоматический перенос условий из WHERE, который управляется настройкой optimize_move_to_prewhere: сначала читаются только столбцы, участвующие в условиях, а остальные столбцы читаются лишь для тех блоков, где хотя бы часть строк удовлетворяет условию, и только для этих строк. Конъюнкция условий вычисляется поэтапно, как в MergeTree с настройкой enable_multiple_prewhere_read_steps: столбцы каждого следующего условия читаются только для строк, прошедших все предыдущие. Это особенно эффективно в сочетании с compress = true: при селективном условии большинство столбцов так и не распаковывается. Запрос SELECT count() FROM table без фильтра обслуживается по метаданным, без чтения данных.
Максимальная производительность (более 10 ГБ/с) достигается на простых запросах, поскольку не требуется чтение с диска, распаковка или десериализация данных. (Следует отметить, что во многих случаях производительность движка MergeTree почти такая же высокая.)
При перезапуске сервера данные из таблицы исчезают, и таблица становится пустой.
Обычно использование этого движка таблицы не оправдано. Однако его можно использовать для тестов и задач, где требуется максимальная скорость при сравнительно небольшом количестве строк (примерно до 100 000 000).
Движок Memory используется системой для временных таблиц с внешними данными запроса (см. раздел «Внешние данные для обработки запроса»), а также для реализации GLOBAL IN (см. раздел «Операторы IN»).
Чтобы ограничить размер таблицы с движком Memory, можно задать верхнюю и нижнюю границы, что фактически позволяет использовать её как кольцевой буфер (см. параметры движка).
Параметры движка
min_bytes_to_keep— Минимальное количество байтов, сохраняемых при ограничении размера таблицы Memory.- Значение по умолчанию:
0 - Требует
max_bytes_to_keep
- Значение по умолчанию:
max_bytes_to_keep— Максимальное количество байтов, сохраняемых в таблице Memory, в которой при каждой вставке удаляются самые старые строки (то есть используется кольцевой буфер). Это значение может превышать указанный предел, если при добавлении большого блока самый старый батч строк, подлежащий удалению, попадает под ограничениеmin_bytes_to_keep.- Значение по умолчанию:
0
- Значение по умолчанию:
min_rows_to_keep— Минимальное количество строк, сохраняемых при ограничении размера таблицы Memory.- Значение по умолчанию:
0 - Требует
max_rows_to_keep
- Значение по умолчанию:
max_rows_to_keep— Максимальное количество строк, сохраняемых в таблице Memory, в которой при каждой вставке удаляются самые старые строки (то есть используется кольцевой буфер). Это значение может превышать указанный предел, если при добавлении большого блока самый старый батч строк, подлежащий удалению, попадает под ограничениеmin_rows_to_keep.- Значение по умолчанию:
0
- Значение по умолчанию:
compress- Следует ли сжимать данные в памяти.- Значение по умолчанию:
false
- Значение по умолчанию:
Использование
Инициализация настроекbytes и rows можно задать одновременно, однако при этом будут использоваться меньшие значения max и min.