Многоуровневое хранение на локальных дисках
Doris поддерживает многоуровневое хранение на SSD и HDD. В сочетании с динамическими партициями система может хранить горячие данные на SSD и автоматически переносить холодные данные на HDD с учетом частоты обращения к ним. Это обеспечивает высокую производительность чтения и записи горячих данных и снижает общую стоимость хранения.
Сценарии применения
Этот документ описывает следующие сценарии:
- Данные таблицы разбиты на партиции по времени, а частота обращения к горячим и холодным данным заметно различается.
- В кластере используются носители обоих типов: SSD и HDD.
- Вы хотите ускорить запросы к недавним горячим данным с помощью SSD и снизить затраты на хранение исторических холодных данных с помощью HDD.
- Вы хотите автоматически управлять жизненным циклом данных с помощью динамических партиций, чтобы избежать ручного переноса.
Быстрая навигация
- Основные понятия: связь между динамическими партициями и многоуровневым хранением.
- Справочник параметров: использование
hot_partition_numиstorage_medium. - Пример использования: SQL для создания таблицы и проверка распределения партиций.
- Часто задаваемые вопросы: распространенные вопросы об использовании.
- Устранение неполадок: обработка ошибок, например сбоев при создании партиций.
Основные понятия
Многоуровневое хранение реализовано на основе динамических партиций. Doris автоматически выбирает носитель в зависимости от активности обращений к партиции и переносит данные на целевой носитель, когда наступает заданное время переноса.
Горячие и холодные партиции
| Тип | Описание | Носитель | Характеристики производительности |
|---|---|---|---|
| Горячая партиция | Недавно активная партиция, к которой часто обращаются | SSD | Высокий IOPS, низкая задержка |
| Холодная партиция | Исторические данные, к которым обращаются реже | HDD | Большая емкость, низкая стоимость |
Принцип работы
Многоуровневое хранение работает следующим образом:
- При создании таблицы включите динамические партиции и задайте
dynamic_partition.storage_medium = HDD. - С помощью
dynamic_partition.hot_partition_numукажите, что последние N партиций являются горячими и хранятся на SSD. - Система задает
storage_cooldown_timeдля каждой горячей партиции. - Когда наступает время переноса, данные партиции автоматически перемещаются с 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 еще не наступило | Дождитесь наступления времени переноса или проверьте правильность настройки времени |