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