1. Архитектура Teradata: массивно-параллельная обработка и распределение данных
Архитектура Teradata: массивно-параллельная обработка и распределение данных
Представьте, что вам нужно найти одну конкретную транзакцию среди 50 миллиардов записей в базе данных крупного банка. Традиционная реляционная база данных будет последовательно сканировать жесткие диски, что займет часы. Teradata справляется с этой задачей за доли секунды. Секрет такой производительности кроется не в использовании суперкомпьютеров с невероятной тактовой частотой, а в фундаментальном принципе разделяй и властвуй. Этот принцип в мире баз данных называется массивно-параллельной обработкой (Massively Parallel Processing, MPP).
Что такое массивно-параллельная обработка (MPP)?
Если вам нужно пересчитать гору из миллиона монет, вы можете делать это в одиночку целый день. Но если вы позовете 1000 друзей, разделите монеты поровну и попросите каждого посчитать свою кучку, работа будет выполнена за пару минут. Именно так работает MPP-архитектура.
В основе Teradata лежит концепция Shared-Nothing (архитектура без разделения ресурсов). Это означает, что каждый процессор в системе имеет собственную выделенную оперативную память и собственный жесткий диск. Процессоры не конкурируют за ресурсы и не ждут друг друга, что позволяет системе масштабироваться практически бесконечно.
> Архитектура без разделения ресурсов (Shared-Nothing) означает, что каждый узел системы полностью независим и автономен, что исключает возникновение единой точки отказа на уровне аппаратных ресурсов и позволяет достичь линейной масштабируемости. > > Документация Greenplum
Для наглядности сравним традиционную архитектуру симметричной мультипроцессорности (SMP) и MPP.
| Характеристика | SMP (Традиционные БД) | MPP (Teradata) | | --- | --- | --- | | Разделение ресурсов | Все процессоры делят общую память и диски | Каждый процессор имеет свои память и диски | | Масштабируемость | Ограничена (добавление процессоров вызывает очереди к памяти) | Линейная (добавление узлов пропорционально ускоряет работу) | | Узкое место | Системная шина и дисковая подсистема | Пропускная способность сети между узлами | | Идеально для... | OLTP (быстрые короткие транзакции) | OLAP (сложная аналитика на петабайтах данных) |
Анатомия системы: PE, BYNET и AMP
Как сотни независимых процессоров работают как единый слаженный механизм? Архитектура Teradata состоит из трех главных компонентов, каждый из которых выполняет строго свою роль.
Parsing Engine (PE): Мозг системы
Parsing Engine — это диспетчер и координатор. Когда вы отправляете SQL-запрос, он попадает именно сюда. PE не хранит данные пользователей, его задача — понять, что вы хотите, и составить оптимальный план действий.
PE выполняет четыре шага:
BYNET: Нервная система
Чтобы мозг мог управлять мышцами, нужна нервная система. В Teradata эту роль играет BYNET (Banyan Network) — высокоскоростная внутренняя сеть, связывающая все компоненты.
BYNET умеет не только передавать сообщения, но и аппаратно сортировать данные на лету. Если вы делаете запрос с сортировкой ORDER BY, данные от рабочих процессоров сливаются через BYNET, и к моменту попадания в PE они уже отсортированы.
Access Module Processor (AMP): Рабочие мускулы
Access Module Processor — это рабочая лошадка Teradata. Именно AMP физически читает и пишет данные на свои виртуальные диски (vDisks). Каждый AMP полностью изолирован: он ничего не знает о данных, которые лежат на соседнем AMP.
Если в системе 100 AMP, и вы загружаете таблицу из 100 миллионов строк, каждый AMP получит примерно по 1 миллиону строк. Когда приходит команда на поиск, все 100 AMP одновременно начинают искать нужную информацию в своем миллионе записей.
Магия хеширования: как Teradata распределяет данные
Чтобы параллельная обработка была эффективной, данные должны быть распределены равномерно. Если 90% данных окажется на одном AMP, система будет работать со скоростью этого единственного перегруженного процессора.
Для равномерного распределения Teradata использует алгоритм хеширования, основанный на Первичном индексе (Primary Index, PI). При создании таблицы разработчик указывает колонку (или набор колонок), которая станет PI.
Процесс записи новой строки выглядит так:
Где: * — номер корзины в карте хешей (Hash Map). * — 32-битное число, сгенерированное хеш-функцией. * — общее количество корзин в системе (в современных версиях Teradata это ).
Рассмотрим на конкретном примере с числами. Допустим, мы добавляем клиента в таблицу:
Если CustomerID является Первичным индексом, Teradata берет число 1001 и хеширует его. Допустим, хеш-функция выдает число 87654321. При делении на остаток (Bucket) равен 615089. Карта хешей говорит, что корзина 615089 закреплена за AMP №14. Строка летит на AMP №14 и записывается там.
Выполнение SQL-запроса под капотом
Теперь, когда мы знаем, как данные хранятся, давайте посмотрим, как они извлекаются. Существует два основных сценария: точечный поиск и полное сканирование.
Сценарий 1: Точечный поиск (Point Query)
Пользователь ищет конкретного клиента:
CustomerID = 1001).Время выполнения такого запроса составляет миллисекунды, независимо от того, лежит в таблице тысяча строк или сто миллиардов.
Сценарий 2: Полное сканирование (Full Table Scan)
Пользователь хочет узнать, сколько клиентов живет в Москве:
Поскольку колонка City не является Первичным индексом, PE не знает, на каких AMP лежат нужные строки.
Именно благодаря этому механизму аналитические запросы над гигантскими массивами данных выполняются с поразительной скоростью. Вся тяжелая работа распределяется между независимыми процессорами.
Итоги
Teradata использует архитектуру Shared-Nothing* (MPP), где каждый процессор (AMP) имеет собственную память и диск, что обеспечивает линейную масштабируемость системы. * Жизненный цикл запроса управляется тремя компонентами: Parsing Engine (мозг/диспетчер), BYNET (сеть/транспорт) и AMP (рабочие узлы/хранилище). * Данные распределяются по AMP с помощью алгоритма хеширования на основе Первичного индекса (Primary Index). Это гарантирует равномерную загрузку всех узлов. * При поиске по Первичному индексу в работе участвует только один AMP, что обеспечивает миллисекундный отклик. При поиске по другим колонкам все AMP работают параллельно, сканируя только свою часть данных.