Движок таблицы памяти
При использовании движка таблицы памяти в ClickHouse Cloud данные не реплицируются на всех узлах (по умолчанию). Чтобы гарантировать, что все запросы направляются на один и тот же узел и что движок таблицы памяти работает как ожидается, вы можете сделать одно из следующих действий:
- Выполнять все операции в одной сессии
- Использовать клиент, который использует TCP или нативный интерфейс (что позволяет поддерживать закрепленные соединения), такой как clickhouse-client
Движок памяти хранит данные в ОЗУ в не сжатом виде. Данные хранятся в точно таком же виде, в каком они получены при чтении. Другими словами, чтение из этой таблицы абсолютно бесплатно. Синхронизированный доступ к данным. Блокировки короткие: операции чтения и записи не блокируют друг друга. Индексы не поддерживаются. Чтение параллелится.
Максимальная производительность (более 10 ГБ/с) достигается на простых запросах, потому что нет чтения с диска, распаковки или десериализации данных. (Следует отметить, что во многих случаях продуктивность движка MergeTree почти так же высока.) При перезапуске сервера данные исчезают из таблицы, и таблица становится пустой. Обычно использование этого движка таблицы не оправдано. Однако его можно использовать для тестов, а также для задач, где требуется максимальная скорость при относительно небольшом количестве строк (до примерно 100,000,000).
Движок памяти используется системой для временных таблиц с внешними данными запросов (см. раздел "Внешние данные для обработки запроса") и для реализации GLOBAL IN
(см. раздел "Операторы IN").
Можно указать верхние и нижние пределы, чтобы ограничить размер таблицы движка памяти, что эффективно позволяет ему действовать как кольцевой буфер (см. Параметры движка).
Параметры движка
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
.
Примеры
Также для строк: