Перейти к основному содержимому
Перейти к основному содержимому

Движок таблицы памяти

примечание

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

Примеры

Также для строк: