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

Многоуровневое хранение на локальных дисках

Doris поддерживает многоуровневое хранение на SSD и HDD. В сочетании с динамическими партициями система может хранить горячие данные на SSD и автоматически переносить холодные данные на HDD с учетом частоты обращения к ним. Это обеспечивает высокую производительность чтения и записи горячих данных и снижает общую стоимость хранения.

Сценарии применения​

Этот документ описывает следующие сценарии:

  • Данные таблицы разбиты на партиции по времени, а частота обращения к горячим и холодным данным заметно различается.
  • В кластере используются носители обоих типов: SSD и HDD.
  • Вы хотите ускорить запросы к недавним горячим данным с помощью SSD и снизить затраты на хранение исторических холодных данных с помощью HDD.
  • Вы хотите автоматически управлять жизненным циклом данных с помощью динамических партиций, чтобы избежать ручного переноса.

Быстрая навигация​

Основные понятия​

Многоуровневое хранение реализовано на основе динамических партиций. Doris автоматически выбирает носитель в зависимости от активности обращений к партиции и переносит данные на целевой носитель, когда наступает заданное время переноса.

Горячие и холодные партиции​

ТипОписаниеНосительХарактеристики производительности
Горячая партицияНедавно активная партиция, к которой часто обращаютсяSSDВысокий IOPS, низкая задержка
Холодная партицияИсторические данные, к которым обращаются режеHDDБольшая емкость, низкая стоимость

Принцип работы​

Многоуровневое хранение работает следующим образом:

  1. При создании таблицы включите динамические партиции и задайте dynamic_partition.storage_medium = HDD.
  2. С помощью dynamic_partition.hot_partition_num укажите, что последние N партиций являются горячими и хранятся на SSD.
  3. Система задает storage_cooldown_time для каждой горячей партиции.
  4. Когда наступает время переноса, данные партиции автоматически перемещаются с SSD на HDD.

Подробнее о динамических партициях см. в разделе Партиционирование данных: динамическая партиция.

Справочник параметров​

Многоуровневое хранение использует следующие два параметра динамических партиций:

ПараметрНазначениеПо умолчаниюПримечания
dynamic_partition.hot_partition_numУказывает, сколько последних партиций считаются горячими и хранятся на SSDНе заданоНеобходимо использовать вместе с storage_medium = HDD
dynamic_partition.storage_mediumУказывает конечный носитель для динамических партицийHDDЕсли задано SSD, hot_partition_num больше не действует

dynamic_partition.hot_partition_num​

  • Назначение: задает последние N партиций как горячие. Эти партиции хранятся на SSD, а остальные на HDD.
  • Условия использования:
    • Необходимо также задать dynamic_partition.storage_medium = HDD. Иначе этот параметр не действует.
    • По пути хранения должен быть доступен SSD. Иначе создание партиции завершится ошибкой.

Пример:

Предположим, что текущая дата 2021-05-20, данные разбиваются на партиции по дням, а динамические партиции настроены следующим образом:

dynamic_partition.hot_partition_num = 2
dynamic_partition.start = -3
dynamic_partition.end = 3

Система автоматически создает следующие партиции с соответствующими носителями и временем переноса:

p20210517: ["2021-05-17", "2021-05-18") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210518: ["2021-05-18", "2021-05-19") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210519: ["2021-05-19", "2021-05-20") storage_medium=SSD storage_cooldown_time=2021-05-21 00:00:00
p20210520: ["2021-05-20", "2021-05-21") storage_medium=SSD storage_cooldown_time=2021-05-22 00:00:00
p20210521: ["2021-05-21", "2021-05-22") storage_medium=SSD storage_cooldown_time=2021-05-23 00:00:00
p20210522: ["2021-05-22", "2021-05-23") storage_medium=SSD storage_cooldown_time=2021-05-24 00:00:00
p20210523: ["2021-05-23", "2021-05-24") storage_medium=SSD storage_cooldown_time=2021-05-25 00:00:00

dynamic_partition.storage_medium​

  • Назначение: указывает конечный носитель для динамических партиций. Допустимые значения: HDD (по умолчанию) или SSD.
  • Примечания:
    • Если задано SSD, параметр hot_partition_num игнорируется.
    • В этом случае все партиции хранятся на SSD, а время переноса для всех партиций устанавливается в 9999-12-31 23:59:59, то есть перенос не выполняется.

Пример использования​

Следующие шаги показывают, как создать таблицу с поддержкой многоуровневого хранения и проверить распределение партиций по носителям.

Шаг 1: создание таблицы с многоуровневым хранением​

Цель: создать таблицу с включенным многоуровневым хранением на SSD/HDD, в которой последние 2 партиции используют SSD, а остальные используют HDD.

CREATE TABLE tiered_table (k DATE)
PARTITION BY RANGE(k)()
DISTRIBUTED BY HASH (k) BUCKETS 5
PROPERTIES
(
"dynamic_partition.storage_medium" = "hdd",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.hot_partition_num" = "2",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "5",
"dynamic_partition.create_history_partition" = "true",
"dynamic_partition.start" = "-3"
);

Шаг 2: проверка носителей партиций​

Цель: убедиться, что партиции распределены между SSD и HDD ожидаемым образом.

SHOW PARTITIONS FROM tiered_table;

Ожидаемый результат: всего 7 партиций, из которых 5 используют SSD и 2 используют HDD.

p20210517: ["2021-05-17", "2021-05-18") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210518: ["2021-05-18", "2021-05-19") storage_medium=HDD storage_cooldown_time=9999-12-31 23:59:59
p20210519: ["2021-05-19", "2021-05-20") storage_medium=SSD storage_cooldown_time=2021-05-21 00:00:00
p20210520: ["2021-05-20", "2021-05-21") storage_medium=SSD storage_cooldown_time=2021-05-22 00:00:00
p20210521: ["2021-05-21", "2021-05-22") storage_medium=SSD storage_cooldown_time=2021-05-23 00:00:00
p20210522: ["2021-05-22", "2021-05-23") storage_medium=SSD storage_cooldown_time=2021-05-24 00:00:00
p20210523: ["2021-05-23", "2021-05-24") storage_medium=SSD storage_cooldown_time=2021-05-25 00:00:00

Часто задаваемые вопросы​

Вопрос 1: что делать, если hot_partition_num не действует?​

Убедитесь, что также задано dynamic_partition.storage_medium = HDD. Настройка горячих партиций действует только в том случае, если конечным носителем является HDD.

Вопрос 2: можно ли использовать только SSD?​

Да. Задайте для dynamic_partition.storage_medium значение SSD, и все партиции будут храниться на SSD без переноса после охлаждения. В этом случае настраивать hot_partition_num не требуется.

Вопрос 3: как переносятся данные при наступлении времени переноса?​

Когда наступает время, заданное в storage_cooldown_time партиции, система автоматически переносит ее данные с SSD на HDD без ручного вмешательства.

Вопрос 4: чем многоуровневое хранение отличается от архивирования горячих и холодных данных (например, в объектном хранилище)?​

Многоуровневое хранение на SSD/HDD используется для перемещения данных между разными типами локальных дисковых носителей и подходит для разделения горячих и холодных данных в краткосрочной и среднесрочной перспективе. Для архивирования исторических данных в объектное хранилище (S3, HDFS и т. д.) см. документацию по многоуровневому хранению горячих и холодных данных.

Устранение неполадок​

Признак ошибкиВозможная причинаРешение
Не удается создать партициюПо пути хранения недоступен SSDНастройте путь хранения на SSD на узле BE или используйте только HDD
hot_partition_num не действуетНе задано storage_medium = HDDТакже задайте dynamic_partition.storage_medium = HDD
Все партиции хранятся на SSD, переноса на HDD после охлаждения нетДля storage_medium задано SSDИзмените storage_medium на HDD и настройте hot_partition_num
Данные не переносятся на HDD, как ожидалосьВремя storage_cooldown_time еще не наступилоДождитесь наступления времени переноса или проверьте правильность настройки времени