GreenPlum Flashcards

(49 cards)

1
Q

GreenPlum

A

Это масштабируемая MPP (Massively Parallel Processing) субд, созданная на базе postgres.
Предназначена для работы с большими объемами данных и выполнения сложных запросов. Направлена на OLAP-системы.

Короче простыми словами GreenPlum (Зеленая Слива) - это та же субд, в которую всунули возможность параллельной обработки, за счет чего данную субд удобно использовать для работы с большими данными.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Сравнение с другими системами

A

Традиционные субд (postgres, oracle): хороши для мелких транзакций в oltp системах, с небольшими объемами данных и без горизонтального масштабирования.
Hadoop: хорош для работы с большими сырыми данными, есть возможность работать с sql, но это не всегда наибольшая производительность.
GreenPlum: включает в себя плюсы параллельной обработки и возможность работы с sql.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Архитектура и компоненты greenplum

A

1) Master - главный узел. Хранит системные таблицы, принимает и планирует запросы.
2) Segment - рабочие узлы системы. По сути каждый сегмент - это отдельный postgres в кластере.
3) Interconnect - связь между узлами.
4) Standby Master - запасной мастер

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Плюсы GreenPlum

A

1) Горизонтальная масштабируемость
2) Быстрые запросы при больших объемах данных
3) Возможности для сложной статистики

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Возможности использования

A

1) DWH
2) BI-отчеты
3) Машинное обучение на SQL
4) Аналитика логов, транзакций

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

За счет чего предоставляется масштабируемость и отказоустойчивость

A

1) Добавление новых сегментов дает возможность масштабировать систему горизонтально
2) Мирроринг сегментов и StandBy Master предоставляют отказоустойчивость

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как происходит распределение данных

A

Оно происходит за счет Distribution Key. Это ключ (колонка) по значениям которого данные будут разбиваться по сегментам.
Важно:
Правильно подобранный ключ обеспечивает равномерную нагрузку
Если подобрать ключ неправильно - это возникновение перекосов - это проблемы и снижение производительности .

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Безопасность GreenPlum

A

1) Управление правами такое же, что и у Postgres
2) Имеет встроенное шифрование данных и аудит

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Оптимизация greenplum запросов

A

1) Минимизировать пересылку данных между узлами
2) Использовать правильный Distributed Key
3) Фильтровать данные как можно раньше
4) Использовать индексы
5) Выбирать только необходимые данные
6) Использовать партицирование
7) Проверять запросы с помощью Explain Analyze
8) Тюнить значения оптимизатора
9) Горизонтально масштабировать систему

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Типы таблиц в greenplum

A

1) Persistent (постоянные) - хранятся на всех узлах кластера, логируются.
2) Temporary (временные) - живут только пока жива сессия, создаются только на узле, на котором работаем. Предназначены для быстрых временных расчетов.
3) Unlogged - таблицы с некритичными данными, не логируются из-за чего работают быстрее, но могут быть ненадежными.
4) External table - внешние таблицы, данные хранятся в другом месте, но мы можем к ними обращаться и работать с ними.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Row-oriented vs Column-oriented таблицы

A

Это способы хранения данных.
Row-oriented - таблицы направленные на OLTP системы. Работа с единичными строками, частое изменения.
Column-oriented - таблицы направленные на OLAP системы. Большие объемы данных, аналитика, запросы на чтение. Скорость изменения низкая.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Изменение типа хранения или распределения

A

Это делается при помощи:
ALTER TABLE t1 SET DISTRIBUTED BY (id);
ALTER TABLE t1 SET (orientation=column)
Но следует понимать, что это очень ресурсозатратные операции, лучше всего устанавливать правильные параметры при создании.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Партиционирование (что это, типы и пример)

A

Возможность разбить данные на логические части. Можно выбирать только необходимые данные, легко масштабировать и удалять. Увеличивает производительность запросов.

Типы:

RANGE — по диапазону (например, по дате),
LIST — по значению,
HASH — по хэш-функции.

CREATE TABLE t1(
id int,
dat date
)
DISTRIBUTED BY (id)
PARTITION BY RANGE(dat)(
START(‘2024-01-O1’) END (‘2025-01-01’) EVERY (1 MONTH)
);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Наследование

A

Возможность создавать таблицы потомки наследующих родительскую структуру.
На практике чаще используется партицирование по причине эффективности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Транзакции в greenplum

A

Как и обычный postgres greenplum поддерживает транзакционность. Для того чтобы она работала в условиях распределенности существует двухфазовый коммит, который гарантирует согласованность данных между сегментами.
Две фазы:
Prepare
Commit
Если один из сегментов на любой из фаз вернет fail, то commit выполнен не будет

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Взаимодействие индексов с распределением

A

Индексы находятся вместе с данными на сегментами, но они не спасут, если подобрать distributed key неправильно, что приведет к увеличению пересылки данных по сети, так как именно она забирает больше всего производительности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Способы распределения в greenplum

A

1) Distributed by (key) - распределение по указанному ключу, для таблиц, которые часто join-ятся лучше выбирать один и тот же ключ.
2) Distributed randomly - распределение по рандомному ключу
3) Replicated - распределение для маленьких таблиц, которые часто часто join’ятся

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Motion

A

Пересылка данных между узлами, которая возникает при объединении данных, например join. Чем больше таких пересылок, тем меньше производительность.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

!!!

A

Чтение: строка не блокируется для чтения другим
Запись: строка блокируется для других до конца операции

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Взаимоблокировки (причины и решения)

A

Это ситуация, когда две транзакции держит ресурсы, которые нужны другой и наоборот.
Причины: длинные транзакции, неправильный порядок обновления таблицы
Решение: использовать короткие транзакции, не изменять порядок обновления таблицы

21
Q

Уровни изоляция транзакций

A

1) Repeatable read - возможность повторного чтения закоммиченных данных (быстро, но могут возникнуть проблемы)
2) Read committed - чтение только закомиченных данных (дефолтная изоляция, баланс между скоростью и надежностью)
3) Serializable - максимальная защита, минимальная производительность. Изолирует так, словно операции были одна за одной.

22
Q

MVCC

A

Multiversion Concurrency Control - это технология, которая позволяет избегать блокировок в транзакциях за счет манипулирования версиями данных. Для каждой отдельной транзакции, создается отдельная версия данных, что гарантирует высокую производительность и исключает блокировки.

23
Q

Мониторинг блокировок

A

Следить за pg_locks и pg_stat_activity (системные таблички)

24
Q

Инструменты GreenPlum (pxf, gpbackup, gprestore, gptranfer)

A

1) PXF (Platform Extension Fraemwork) - позволяет интегрировать greenplum c kafka, hdfs с внешними источниками. Не нужно копировать данные, но производительность может зависеть от передачи данных. Основные коннекторы: hdfs, s3, jdbc (java database connectivity)
2) gpbackup, gprestore - компонент отвечающий за резервное копирование, а gprestore за востановление
3) gptransfer - компонент отвечающий за перемещение данных между кластерами.
Работает через параллельное подключение, что увеличивает производительность. Требует одинаковой архитектуры кластеров.

25
!!
1) Полное 2) Частичное 3) Копирование на другой сервер при условии совместимости версий
26
Внешние таблицы в greenplum
Это таблицы greenplum, с которыми greenplum может работать, но сами они расположены в другом физическом месте. Работа с данными проходит на лету. Плюсы: отсутствует нагрузка на память, но имеет не высокую производительность, нагрузку на сеть и зависимость от источников. Типы таблиц: Readable, Writable
27
Преимущества использования внешних источников
1) Не нужно дублировать данные - работаешь с ними там, где хранятся 2) Интеграция с Big data архитектурой (hadoop, s3) 3) Параллельная обработка 4) Удобное подключение таблиц, через pxf
28
Протоколы внешних источников
1) pxf 2) http 3) s3 4) jdbc
29
Оптимизация производительности интеграции с Hive
1) Расположить pxf и datanode на одних узлах, чтобы снизить нагрузку на сеть 2) Тюнинг pxf 3) Параллелизм 4) Колоночные форматы (orc/parquet) 5) Кэширование
30
!!!
1) На источнике установить pxf 2) Отредактировать конфиги для подключения pxf между узлами 3) Создание внешней таблицы в greenplum через pxf
31
Сжатие данных
Возможность сжимать данные, тем самым снижать нагрузку на I/O WITH (appendonly=true, compresstype=zstd, compresslevel=5) Рекомендуется применять для архивных или редко обновляемых таблиц.
32
Инструменты мониторинга и производительности GreenPlum
gp_toolkit - набор таблиц и представлений, которые позволяют мониторить производительность. Explain и Analyze Explain - для анализа плана выполнения.
33
Анализ вывода EXPLAIN
1. cost - оценка затрат планировщика 2. rows/width - количество строк и их размеры 3. join type - тип join: nested - для малых данных hash - для больших данных merge - для отсортированных данных 4. Использование индекса 5. Data motion - показывает движение данных между сегментами кластера (надо минимизировать )
34
Способы загрузки данных в Greenplum
1) Просто с помощью COPY,: COPY table_name FROM '/path/data.csv' WITH (FORMAT csv, HEADER true); (не использует параллельную загрузку, самый простой способ) 2) gpdist - оптимальный способ для больших объемов 3) gpload - утилита обертка для gpdist, подходит для автоматизации процесса 4) pxf - доступ к другим источникам без загрузки (внешние таблицы)
35
Шардирование
Это процесс разбиения данных на шарды для параллельной обработки. Существует три способа: 1) Round-robin (карусель) - простое распределение между сегментами. Если есть 6 частей: (1,4), (2,5), (3,6) 2) Hash. Разбиение по hash значениям. Если неправильно подобрать ключ распределения, то может случиться несбалансированная нагрузка некоторых сегментов. 3) Random. Рандомное распределение используется редко, в основном для тестов.
36
Проверка состояния и доступности кластера
gpstate - состояние GreenPlum gp_distribution_policy - вьюха, с помощью которой можно следить за политикой распределения gpconfig -s - конфиги GreenPlum gpversion - версия
37
Мониторинг памяти
gpcheckspace А также можно воспользоваться системными таблицами, которые находятся в gp_toolkit
38
GPSS
(Greenplum Streaming Server)— инструмент для потоковой загрузки данных из Kafka в Greenplum. GPSS подписывается на топик Kafka и записывает данные в таблицы GPDB. При правильной конфигурации может поддерживать exactly-once семантику.
39
Apache Nifi
Инструмент визуального построения ETL/ELT - пайплайнов. Может быть заменой либо дополнением GPSS. Преобразует, фильтрует и агрегирует данные. Преимущества: 1) Простая визуализация 2) Возможность контролировать поток 3) Мониторинг и механизмы повтора (retry-механизмы)
40
NiFi vs другие инструменты
1) NiFi - GUI, гибкость, поддержка различных источников, но тяжеловесен, требует много RAM. 2) GPSS - нативный коннектор, быстрый, но не столь гибкий и универсальный как nifi
41
!!!
1) Правильно настроить размер batch-ей 2) Использовать сжатие 3) Использовать партицирование 4) Мониторить поток данных и исходя из этого предпринимать дальнейшие действия
42
Как создать таблицу append-only и колоночно-ориентированную
CREATE TABLE mart.clients_dim WITH (appendonly=true, orientation=column) AS SELECT id AS client_id, first_name, last_name, email, phone, registration_date, status FROM data.clients;
43
Что такое sortkey?
Это колонка или набор колонок, по которым строки таблицы хранятся в отсортированном порядке на диске. ``` CREATE TABLE sales ( id serial, customer_id int, amount numeric, sale_date date ) DISTRIBUTED BY (customer_id) SORTKEY (sale_date); ```
44
Что такое ANALYZE?
Это технология, которая собирает статистику по таблице. Это нужно для того, чтобы оптимизатор более точно понимал консистентность таблицы для выбора более оптимального плана выполнения
45
Readable и Writable таблицы
Readable - только на чтение Writable - позволяет не только читать, но и записывать данные в внешние таблицы
46
Слои хранилищ
1) ODS 2) DDS 3) Data mart
47
Как интегрировать greenplum в clickhouse
При создании табилцы в click нужно использовать ENGINE = PostgreSQL('gp_host:5432', 'gp_db', 'clients', 'gp_user', 'gp_pass');
48
Типы motions
1) Redistributed motion Если используется join либо group by не по ключу распределения. 2) Broadcast motion Если используется маленькая таблицы, которая не реплицирована. 3) Gathering motion Если есть сортировка без limit, limit без распределенного ключа, результат возвращается поьзователю (самый дорогой вид motion)
49
Типы таблиц
Ок, **максимально короткая шпаргалка** 👇 --- Greenplum: типы таблиц Heap (обычные) * **DEFAULT** * Row-store, MVCC * `UPDATE / DELETE` — ✅ * VACUUM нужен * ❌ слабая компрессия 👉 Маленькие, часто обновляемые --- AO Row ```sql WITH (appendonly=true, orientation=row) ``` * Append-only * UPDATE = delete + insert * VACUUM не нужен * Средняя компрессия 👉 Большие, insert-heavy --- AO Column ```sql WITH (appendonly=true, orientation=column) ``` * Column-store * Максимальная компрессия * Лучшее для `SELECT` * UPDATE дорогой 👉 DWH / аналитика --- ⚡ Коротко выбрать * **Частые UPDATE** → Heap * **Много INSERT** → AO Row * **Аналитика / агрегации** → AO Column