SlideShare a Scribd company logo
Postgres BI
Андрей	Фефелов
mastery.pro
1
Содержание
• Постановка	задачи	
• WTF	is	OLAP
• ROLAP
• Обзор	нашей	архитектуры
• Особенности	Postgres для	BI
• ETL	vs	ELT	(stage-nds-ddm)
• Column	data	storage
• Configuration
• Фишечки
• Плюсы/минусы	решения
2
Постановка	задачи
• Заказчик	– крупнейшая	в	Ирландии	
фармацевтическая	группа
• 4	типа	аптечного	ПО
• 250	аптек
• Анализировать:
• Заказы	(Orders)	
• Рецепты (Scripts)	
• Возмещения (Claims)
• Цели:
• Оптимизации	товарной	политики
• Маркетинг
3
WTF	is	OLAP
• OnLine Analytical	Processing
• Куб	из	n-измерений
4
WTF	is	OLAP
5
6
Postgres
• opensource
• ssd
• column	storage
• pl/pgsql
• rich	feature	set
• умеем	готовить
7
ROLAP
8
Архитектура
Extractors
Postgres (Load	Transform)
Cubes	(API)
Rails +	React	(UI)
Saiku (UI)
9
Архитектура	- extractors
• Cyclone_client
• Mssql (2008-2012)
• Golang
• CSV	+	rsync over	ssh
• Kachok
• Web	scrapper
• Skytools replication
• From	existing	products
Extractors
Postgres (Load	Transform)
Cubes	(API)
Rails +	React	
(UI)
Saiku (UI)
10
Архитектура	– API	+	UI
• Cubes	-
cubes.databrewery.org
• Easy	drilling-down
• Slicing	and	dicing
• Serves	aggregates,	
dimension	details,	facts
• Provides	all	necessary	
metadata	for	a	reporting	
application
• Rails,	React
• Авторизация
• d3,	dc,	crossfilter
• Saiku
• Только	для	бэк-офиса
Extractors
Postgres (Load	Transform)
Cubes	(API)
Rails +	React	
(UI)
Saiku (UI)
11
Архитектура	– Postgres	(load,	
transform)	
•raw	data	
•load_something_to_nds(_pharmacy_id integer)stage
•normalized	data	store
•load_something_to_ddm(_pharmacy_id integer)nds
•Кубы и	снэпшоты
•viewsddm
12
Архитектура	– Postgres	(load,	
transform)	
Stage
• «Cырые»	данные
• Полностью	очищается	
в	каждом	цикле	ELT
• Служит	источником	
для	nds
• raw	data	
• load_something_to_nds(_
pharmacy_id integer)
stage
•normalized	data	store
•load_something_to_ddm(_pharmacy_id
integer)
nds
•Кубы и	снэпшоты
•viewsddm
13
Архитектура	– Postgres	(load,	
transform)	
• Normalized	Data	Store
• Данные	
нормализуются	и	
валидируются
• Служит	источником	
для	ddm
• Вычисляются	меры	
перед	загрузкой	в	ddm
• Вычисляется	delta	для	
загрузки	в	ddm на	
основе	last_updated
• raw	data	
• load_something_to_nds
(_pharmacy_id integer)
stage
•normalized	data	store
•load_something_to_ddm(_
pharmacy_id integer)
nds
• Кубы и	снэпшоты
• viewsddm
14
Архитектура	– Postgres	(load,	
transform)	
• Dimensional	data	
model
• Кубы
• Снэпшоты тоже	здесь
• Спокойно	делать	
релизы
• Анализировать	
состояния	«до-после»	
релиза
• View	как	точка	входа	
для	приложения
• raw	data	
• load_something_to_nds
(_pharmacy_id integer)
stage
•normalized	data	store
•load_something_to_ddm(_
pharmacy_id integer)
nds
• Кубы и	снэпшоты
• viewsddm
15
Архитектура	– Postgres	
(snapshots)	
16
fact_order_item
vw_order_item
s1_order_item
s2_order_item
Архитектура	– Postgres	
(snapshots)	
17
fact_order_item
vw_order_item
s1_order_item
s2_order_item
Column	storage
• Подходит	для	задачи:	
• агрегаций
• вывод	фиксированного	набора	полей	из	кубов
• cstore_fdw ->	
https://github.com/citusdata/cstore_fdw
• Compression:	Reduces	in-memory	and	on-disk	data	size	
by	2-4x.	Can	be	extended	to	support	different	codecs.
• Column	projections:	Only	reads	column	data	relevant	to	
the	query.	Improves	performance	for	I/O	bound	queries.
• Skip	indexes:	Stores	min/max	statistics	for	row	groups,	
and	uses	them	to	skip	over	unrelated	rows.
18
Column	storage
• Наш	опыт:
• Не	быстрее	на	нашем	профиле,	чем	“ванильный”
postgres (привет,	cubes)
• Размер	кубов	уменьшился	в	12	раз.	Wow.
• Не	бэкапится	стандартным	образом (no	need?)
• Не	поддерживает	delete/update (snapshots)
19
Фишечки
• DDM	может	быть	вынесена	на	отдельный	сервер	
(londiste)
• Используйте	COPY/BULK	INSERTS	не	используйте	
UPDATE	(ха	ха	ха)
• Думайте	о	горизонтальном	и	вертикальном	
партиционировании,	поищите	хорошие	ключи	для	
этого
• Думайте	о	параллелизме	с	самого	начала
• Используйте	TABLESPACES/PARTIAL	INDEXES (и	
больше	дисков)
• Вам	нужна	политика	хранения	данных
20
Плюсы	и	минусы	решения
• Минусы
• Плохо	масштабируется	горизонтально
• Сложный	деплой
• Плюсы
• Local	data	(no	big	network	transfers)
• Effectively	parallelized	(thanks	to	pharmacy_id)
• PL/pgSQL
21
Спасибо	за	внимание
andy@mastery.pro
22
Speed	limit
• cubes	не	быстрый	(сериализация)
• json (12	sec)
• ujson (4	sec)
• postgres json output (1.5	sec)	db self	time	0.3-0.7	sec
23

More Related Content

PDF
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
PDF
Про аналитику и серебряные пули
PDF
Cергей Коржнев, 2ГИС
PPTX
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
PPTX
Olap
PDF
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
PDF
кри 2014 elastic search рациональный подход к созданию собственной системы а...
PDF
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
Про аналитику и серебряные пули
Cергей Коржнев, 2ГИС
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Olap
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
кри 2014 elastic search рациональный подход к созданию собственной системы а...
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС

What's hot (20)

PPTX
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
PDF
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
PDF
Построение системы аналитики
PDF
Где сегодня использовать ElasticSearch
PDF
Shadow Fight 2: архитектура системы аналитики для миллиарда событий
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PPT
ADD2010: Обработка большого объема данных на платформеApache Hadoop
PDF
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
PDF
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
PDF
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
PPTX
Машинное обучение в электронной коммерции — практика использования и подводны...
PDF
PostgreSQL в высоконагруженных проектах
PDF
Автоматизация анализа логов на базе Elasticsearch
PDF
Российская СУБД Postgres Pro
PPTX
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
PDF
Андрей Лузин
PPTX
Jinba - frontendconf.ru/2015
PDF
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
PDF
Pulsedb — система хранения временных рядов
PDF
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Построение системы аналитики
Где сегодня использовать ElasticSearch
Shadow Fight 2: архитектура системы аналитики для миллиарда событий
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
ADD2010: Обработка большого объема данных на платформеApache Hadoop
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
Машинное обучение в электронной коммерции — практика использования и подводны...
PostgreSQL в высоконагруженных проектах
Автоматизация анализа логов на базе Elasticsearch
Российская СУБД Postgres Pro
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Андрей Лузин
Jinba - frontendconf.ru/2015
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Pulsedb — система хранения временных рядов
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Ad

Similar to "OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro (20)

PPTX
pgconf.ru 2017
PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PDF
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
ODP
МойСклад, облачный сервис ERP
PPTX
Построение аналитического хранилища на 100 петабайт
PDF
Fors и big data appliance
PDF
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
PDF
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
PDF
Владимир Бородин - PostgreSQL
PDF
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
PPTX
Переход от монолитной архитектуры к распределенной
ODP
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Highload 2014. PostgreSQL: ups, DevOps.
PDF
PostgreSQL
PPTX
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
PDF
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
pgconf.ru 2017
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
МойСклад, облачный сервис ERP
Построение аналитического хранилища на 100 петабайт
Fors и big data appliance
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Владимир Бородин - PostgreSQL
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
2014.12.23 Александр Андреев, Parallels
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Переход от монолитной архитектуры к распределенной
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Highload 2014. PostgreSQL: ups, DevOps.
PostgreSQL
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
DB-Technologies-2017 Keynote (Strategy and tactics for db evaluation)
Ad

More from it-people (20)

PDF
«Scrapy internals» Александр Сибиряков, Scrapinghub
PDF
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
PDF
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
PDF
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
PDF
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
PDF
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
PDF
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
PDF
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
PDF
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
PDF
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
PDF
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
PDF
«(Без)опасный Python», Иван Цыганов, Positive Technologies
PDF
«Python of Things», Кирилл Борисов, Яндекс
PDF
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
PDF
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
PDF
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
PDF
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«Python of Things», Кирилл Борисов, Яндекс
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...

"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro