Руководство по проектированию таблиц в 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
Оптимизация хранения
Формат хранения
Узнайте об устройстве и преимуществах столбцового формата хранения V3 в Doris
Сжатие данных
Выберите подходящий алгоритм сжатия, чтобы сбалансировать стоимость хранения и производительность запросов
Гибридное строчно-столбцовое хранение
Добавьте строчное хранение к столбцовому, чтобы ускорить точечные запросы к широким таблицам
Разделение горячих и холодных данных по уровням хранения
Переносите холодные данные на SSD/HDD или в удалённые хранилища, такие как S3 и HDFS, чтобы снизить стоимость хранения
Изменение схемы
Изменение схемы
Добавляйте, удаляйте и изменяйте столбцы и типы с помощью ALTER TABLE и узнайте, чем легковесные изменения отличаются от тяжеловесных
Столбец с автоинкрементом
Используйте Auto Increment Column для автоматического создания уникальных числовых ID и упрощения записи данных
Специальные таблицы и рекомендации
Что учитывать при проектировании
| Аспект проектирования | Описание | Влияние |
|---|---|---|
| Модель данных | Нельзя изменить после создания таблицы; заранее выберите подходящую модель данных | Определяет дальнейшие способы записи данных и выполнения запросов |
| Количество бакетов | Количество бакетов в уже созданных партициях нельзя изменить напрямую, но его можно скорректировать с помощью замены партиций; при динамическом партиционировании можно изменить количество бакетов для будущих партиций | Влияет на равномерность распределения данных и параллелизм запросов |
| Изменения столбцов | Добавление или удаление столбцов VALUE является легковесной операцией (выполняется за секунды); добавление или удаление столбцов KEY либо изменение типов данных является тяжеловесной операцией | По возможности избегайте изменения столбцов KEY в больших наборах данных |
| Политика хранения | Используйте разделение горячих и холодных данных по уровням хранения для переноса холодных данных на HDD, в S3 или HDFS | Значительно снижает стоимость хранения |