Движок таблицы Memory
При использовании движка таблицы Memory в ClickHouse Cloud данные не реплицируются по всем узлам (по дизайну). Чтобы гарантировать, что все запросы направляются на один и тот же узел и что движок таблицы Memory работает как ожидается, вы можете сделать одно из следующего:
- Выполнять все операции в одной сессии
- Использовать клиент, который использует TCP или нативный интерфейс (что позволяет поддерживать липкие соединения), например clickhouse-client
Движок Memory хранит данные в ОЗУ в несжатом виде. Данные хранятся в точно такой же форме, в какой они принимаются при чтении. Иными словами, чтение из этой таблицы абсолютно бесплатно. Одновременный доступ к данным синхронизирован. Блокировки короткие: операции чтения и записи не блокируют друг друга. Индексы не поддерживаются. Чтение параллелизовано.
Максимальная производительность (более 10 ГБ/с) достигается на простых запросах, так как нет чтения с диска, распаковки или десериализации данных. (Следует отметить, что в многих случаях производительность движка MergeTree почти так же высока.) При перезагрузке сервера данные исчезают из таблицы, и таблица становится пустой. Обычно использование этого движка таблицы не оправдано. Тем не менее, его можно использовать для тестов и для задач, где требуется максимальная скорость на относительно небольшом количестве строк (до примерно 100000000).
Движок Memory используется системой для временных таблиц с данными внешнего запроса (см. раздел "Внешние данные для обработки запроса") и для реализации GLOBAL IN
(см. раздел "Операторы IN").
Верхние и нижние пределы могут быть заданы для ограничения размера таблицы движка Memory, эффективно позволяя ему действовать как кольцевой буфер (см. Параметры движка).
Параметры движка
min_bytes_to_keep
— Минимальное количество байт для сохранения, когда таблица в памяти имеет ограничение по размеру.- Значение по умолчанию:
0
- Требует
max_bytes_to_keep
- Значение по умолчанию:
max_bytes_to_keep
— Максимальное количество байт для сохранения в таблице в памяти, где старейшие строки удаляются при каждой вставке (т.е. кольцевой буфер). Максимальное количество байт может превышать указанное ограничение, если старейшая партия строк для удаления попадает под пределmin_bytes_to_keep
при добавлении большого блока.- Значение по умолчанию:
0
- Значение по умолчанию:
min_rows_to_keep
— Минимальное количество строк для сохранения, когда таблица в памяти имеет ограничение по размеру.- Значение по умолчанию:
0
- Требует
max_rows_to_keep
- Значение по умолчанию:
max_rows_to_keep
— Максимальное количество строк для сохранения в таблице памяти, где старейшие строки удаляются при каждой вставке (т.е. кольцевой буфер). Максимальное количество строк может превышать указанное ограничение, если старейшая партия строк для удаления попадает под пределmin_rows_to_keep
при добавлении большого блока.- Значение по умолчанию:
0
- Значение по умолчанию:
compress
- Нужно ли сжимать данные в памяти.- Значение по умолчанию:
false
- Значение по умолчанию:
Использование
Инициализация настроек
Изменение настроек
Примечание: Параметры ограничения как в bytes
, так и в rows
могут быть установлены одновременно, однако будут соблюдены нижние пределы max
и min
.
Примеры
также, для строк: