Движок таблиц памяти
При использовании движка таблиц памяти в 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
.
Примеры
также, для строк: