Руководство по проектированию таблиц в Apache Doris
В Apache Doris проектирование таблиц напрямую определяет производительность записи, эффективность запросов и стоимость хранения. Эта глава построена вокруг типичных сценариев проектирования и поможет вам создать таблицу с нуля или оптимизировать структуру существующей таблицы.
Процесс проектирования
Проектирование таблицы Doris обычно включает следующие шаги:
- Выберите модель таблицы: определите, как данные будут храниться, дедуплицироваться и агрегироваться.
- Определите столбцы и типы данных: подберите подходящие типы для полей ваших бизнес-данных.
- Спланируйте партиционирование и бакетирование: обеспечьте равномерное распределение данных и возможность отсечения ненужных данных при запросах.
- Добавьте индексы: ускорьте точечные запросы, сканирование диапазонов или полнотекстовый поиск.
- Оптимизируйте хранение: сократите затраты с помощью сжатия, гибридного строково-столбцового хранения или многоуровневого хранения горячих и холодных данных.
- Развивайте схему: изменяйте схему или используйте столбцы с автоинкрементом по мере изменения бизнес-требований.
Создание таблицы
Для создания таблицы в Doris используйте оператор CREATE TABLE. Чтобы создать новую таблицу на основе существующей, можно использовать:
- CREATE TABLE ... LIKE: повторно использовать структуру существующей таблицы.
- CREATE TABLE ... AS SELECT (CTAS): создать таблицу на основе результата запроса.
Правила именования таблиц
По умолчанию имена таблиц в Doris чувствительны к регистру, а их максимальная длина составляет 64 байта. Это поведение можно настроить с помощью следующих параметров:
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| lower_case_table_names | С учётом регистра | Задаётся только при первоначальной инициализации кластера; впоследствии изменить нельзя |
| table_name_length_limit | 64 байта | Не рекомендуется задавать слишком большое значение |
Основные свойства таблицы
При создании таблицы можно задать распространённые свойства в PROPERTIES. Подробности см. в разделе CREATE TABLE:
| Свойство | Назначение |
|---|---|
buckets | Определяет гранулярность распределения данных внутри таблицы |
storage_medium | Управляет носителем хранения, например HDD, SSD или удалённым общим хранилищем |
replication_num | Определяет количество реплик данных для обеспечения избыточности и надёжности |
storage_policy | Задаёт политику перемещения горячих и холодных данных между уровнями хранения |
Свойства таблицы применяются на уровне партиций. Изменение свойств таблицы действует только на партиции, создаваемые в дальнейшем; существующие партиции не затрагиваются. Подробности см. в разделах ALTER TABLE PROPERTY и ALTER TABLE DISTRIBUTION. При динамическом партиционировании эти свойства можно задавать отдельно.
Выбор модели таблицы
Обзор моделей таблиц
Сравните модели Duplicate, Aggregate и Unique и выберите подходящий способ хранения и дедупликации данных для вашего сценария
Модель Duplicate
Сохраняйте исходные детальные данные; подходит для журналов, событий и других сценариев, в которых не требуется дедупликация или агрегация
Модель Unique
Выполняйте дедупликацию по первичному ключу и обновляйте данные в реальном времени при большом числе параллельных операций; подходит для CDC, заказов и других сценариев обновления данных по первичному ключу
Модель Aggregate
Предварительно агрегируйте данные по измерениям, чтобы повысить производительность запросов для отчётности и многомерного анализа
Рекомендации по выбору модели
Рекомендации по выбору моделей таблиц и проектированию столбцов Key для типичных бизнес-сценариев
Определение столбцов и типов данных
Планирование партиционирования и бакетирования
Принципы распределения данных
Узнайте, как партиционирование и бакетирование размещают данные в tablet, позволяя в полной мере использовать возможности хранения и вычислений нескольких узлов
Основные понятия
Объяснение основных терминов, связанных с распределением данных, включая партицию, бакет, tablet и реплику
Ручное партиционирование
Явно задавайте диапазоны партиций при создании таблицы; подходит для сценариев с фиксированными партициями и потребностью в детальном управлении
Динамическое партиционирование
Автоматически создавайте и удаляйте партиции по временному измерению, чтобы упростить обслуживание таблиц временных рядов
Автоматическое партиционирование
Автоматически создавайте партиции на основе поступающих данных без необходимости заранее задавать диапазоны партиций
Бакетирование данных
Выберите подходящие столбцы бакетирования и количество бакетов, чтобы данные равномерно распределялись внутри партиций
Распространённые проблемы
Распространённые ошибки при проектировании партиционирования и бакетирования и способы их устранения
Ускорение запросов: индексы
Обзор индексов
Сравните различные типы индексов, поддерживаемые Doris, и сценарии запросов, для которых они подходят
Префиксный индекс
Встроенный индекс на основе ключа сортировки, ускоряющий запросы на равенство и запросы по диапазону
Индекс BloomFilter
Ускоряйте запросы на равенство по столбцам с большим числом уникальных значений и сокращайте ненужное сканирование данных
Индекс NGram BloomFilter
Ускоряйте запросы с нечётким сопоставлением LIKE без создания полноценного инвертированного индекса
Инвертированный индекс (полнотекстовый поиск)
Поддерживает полнотекстовый поиск с токенизацией и сопоставление ключевых слов и фраз; подходит для анализа журналов и текстов
Векторный индекс
Ускоряйте поиск по сходству для векторов высокой размерности с помощью таких алгоритмов, как HNSW и IVF
Оптимизация хранения
Формат хранения
Узнайте об устройстве и преимуществах столбцового формата хранения Doris V3
Сжатие данных
Выберите подходящий алгоритм сжатия, чтобы сбалансировать стоимость хранения и производительность запросов
Гибридное строково-столбцовое хранение
Добавьте строковое хранение к столбцовому, чтобы ускорить точечные запросы к широким таблицам
Многоуровневое хранение горячих и холодных данных
Перемещайте холодные данные на нижний уровень хранения: SSD/HDD или в удалённые хранилища, такие как S3 и HDFS, чтобы сократить стоимость хранения
Развитие схемы
Изменение схемы
Добавляйте, удаляйте или изменяйте столбцы и типы с помощью ALTER TABLE и узнайте разницу между легковесными и тяжеловесными изменениями
Столбец с автоинкрементом
Используйте столбец с автоинкрементом для автоматического создания уникальных числовых идентификаторов и упрощения записи данных
Специальные таблицы и рекомендации
Временные таблицы (устарели)
Устарели. Не используйте временные таблицы в производственных средах
Рекомендации по проектированию таблиц
Основные рекомендации по выбору моделей таблиц, столбцам Key, партиционированию и бакетированию, индексам и другим аспектам проектирования
Особенности проектирования
| Аспект проектирования | Описание | Влияние |
|---|---|---|
| Модель данных | Нельзя изменить после создания таблицы; заранее выберите подходящую модель данных | Определяет дальнейшие способы записи данных и выполнения запросов |
| Количество бакетов | Количество бакетов в уже созданных партициях изменить нельзя, но его можно скорректировать с помощью замены партиций; количество бакетов для будущих партиций при динамическом партиционировании можно изменить | Влияет на равномерность распределения данных и параллелизм запросов |
| Изменения столбцов | Добавление или удаление столбцов VALUE — легковесная операция (выполняется за секунды); добавление или удаление столбцов KEY либо изменение типов данных — тяжеловесная операция | По возможности избегайте изменений столбцов KEY в больших наборах данных |
| Политика хранения | Используйте многоуровневое хранение горячих и холодных данных для перемещения холодных данных на HDD, в S3 или HDFS | Значительно снижает стоимость хранения |