SlideShare a Scribd company logo
1 of 23
Postgres BI
Андрей Фефелов
mastery.pro
1
Содержание
• Постановка задачи
• Open source решения
• ROLAP
• Обзор нашей архитектуры
• Особенности Postgres для BI
• ETL vs ELT (stage-nds-ddm)
• Column data storage
• Configuration
• Фишечки
• Плюсы/минусы решения
2
Постановка задачи
• Заказчик – крупнейшая в Ирландии фармацевтическая группа
• 4 типа аптечного ПО
• 250 аптек
• Анализировать:
• Заказы (Orders)
• Рецепты (Scripts)
• Возмещения (Claims)
• Цели:
• Оптимизации товарной политики
• Маркетинг
3
Open source
• SpagoBI
• Pentaho
• Mondrian
• Saiku
• Cubes (databrewery)
4
ROLAP (R-ROLAP)
• Звезда
• Факты
• Измерения
• Меры
• No pre-calculated aggregates
• SSD
• Колоночное хранение
• ???
• Profit!
5
ROLAP
6
Архитектура
Extractors
Postgres (Load Transform)
Cubes (API)
Rails + React (UI)
Saiku (UI)
7
Архитектура - 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)
8
Архитектура – 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)
9
Архитектура – 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
10
Архитектура – 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
11
Архитектура – 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_dd
m(_pharmacy_id
integer)
nds
• Кубы и снэпшоты
• viewsddm
12
Архитектура – Postgres (load, transform)
• Dimensional data model
• Кубы
• Снэпшоты тоже здесь
• Спокойно делать релизы
• Анализировать состояния «до-
после» релиза
• View как точка входа для
приложения
• raw data
• load_something_to_nds
(_pharmacy_id integer)
stage
• normalized data store
• load_something_to_dd
m(_pharmacy_id
integer)
nds
• Кубы и снэпшоты
• viewsddm
13
Архитектура – Postgres (snapshots)
fact_order_item
vw_order_item
s1_order_item
s2_order_item
14
Архитектура – Postgres (snapshots)
fact_order_item
vw_order_item
s1_order_item
s2_order_item
15
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.
16
Column storage
• Наш опыт:
• Не быстрее на нашем профиле, чем “ванильный” postgres (привет, cubes)
• Размер кубов уменьшился в 12 раз. Wow.
• Не бэкапится стандартным образом (no need?)
• Не поддерживает delete/update (snapshots)
17
Конфигурация
• Профиль нагрузки:
• Большой объем RW I/O
• Основной объем I/O в stage, nds
• DDM нагружена слабо
• shared_buffers = ½ RAM
• work_mem = 1GB
• maintenance_work_mem = 2GB
• temp_buffers = 2GB
• effective_cache_size = ½ RAM
• checkpoint_segments = 128
18
Фишечки
• DDM может быть вынесена на отдельный сервер (londiste)
• Используйте COPY/BULK INSERTS не используйте UPDATE (ха ха ха)
• Думайте о горизонтальном и вертикальном партиционировании
поищите хорошие ключи для этого
• Думайте о параллелизме с самого начала
• Используйте TABLESPACES/PARTIAL INDEXES (и больше дисков)
• Вам нужна политика хранения данных
• Статистику пишите в tempfs
19
Фишечки ч2
• Используйте миграции – sqitch by theory
• Тестируйте ELT - sqitch by theory
• Анализируйте pg_stat_statements (добавьте в мониторинг)
• Профилируйте процедуры – PLPROFILER3
• Иногда, вам (не) нужен cstore_fdw
• Иногда, вам (не) нужны unlogged tables
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

What's hot

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop Vladimir Klimontovich
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Mikhail Chusavitin
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...Ontico
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияDevDay
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Ontico
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14remizovd
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Ontico
 
Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?aragozin
 
Платформа Apache Hadoop
Платформа Apache HadoopПлатформа Apache Hadoop
Платформа Apache HadoopDotNetConf
 
Основы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в SoftengiОсновы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в SoftengiSoftengi
 
Кирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практикеКирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практикеTanya Denisyuk
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetOntico
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 

What's hot (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использования
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14Db in-memory-overview 2015-10_14
Db in-memory-overview 2015-10_14
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
 
Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?
 
Платформа Apache Hadoop
Платформа Apache HadoopПлатформа Apache Hadoop
Платформа Apache Hadoop
 
Основы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в SoftengiОсновы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в Softengi
 
Кирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практикеКирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практике
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
лекц16
лекц16лекц16
лекц16
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 

Similar to pgconf.ru 2017

Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийSveta Smirnova
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
Новый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery ApplianceНовый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery ApplianceAndrey Akulov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 

Similar to pgconf.ru 2017 (20)

Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложений
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Новый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery ApplianceНовый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 

pgconf.ru 2017

  • 2. Содержание • Постановка задачи • Open source решения • ROLAP • Обзор нашей архитектуры • Особенности Postgres для BI • ETL vs ELT (stage-nds-ddm) • Column data storage • Configuration • Фишечки • Плюсы/минусы решения 2
  • 3. Постановка задачи • Заказчик – крупнейшая в Ирландии фармацевтическая группа • 4 типа аптечного ПО • 250 аптек • Анализировать: • Заказы (Orders) • Рецепты (Scripts) • Возмещения (Claims) • Цели: • Оптимизации товарной политики • Маркетинг 3
  • 4. Open source • SpagoBI • Pentaho • Mondrian • Saiku • Cubes (databrewery) 4
  • 5. ROLAP (R-ROLAP) • Звезда • Факты • Измерения • Меры • No pre-calculated aggregates • SSD • Колоночное хранение • ??? • Profit! 5
  • 8. Архитектура - 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) 8
  • 9. Архитектура – 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) 9
  • 10. Архитектура – 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 10
  • 11. Архитектура – 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 11
  • 12. Архитектура – 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_dd m(_pharmacy_id integer) nds • Кубы и снэпшоты • viewsddm 12
  • 13. Архитектура – Postgres (load, transform) • Dimensional data model • Кубы • Снэпшоты тоже здесь • Спокойно делать релизы • Анализировать состояния «до- после» релиза • View как точка входа для приложения • raw data • load_something_to_nds (_pharmacy_id integer) stage • normalized data store • load_something_to_dd m(_pharmacy_id integer) nds • Кубы и снэпшоты • viewsddm 13
  • 14. Архитектура – Postgres (snapshots) fact_order_item vw_order_item s1_order_item s2_order_item 14
  • 15. Архитектура – Postgres (snapshots) fact_order_item vw_order_item s1_order_item s2_order_item 15
  • 16. 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. 16
  • 17. Column storage • Наш опыт: • Не быстрее на нашем профиле, чем “ванильный” postgres (привет, cubes) • Размер кубов уменьшился в 12 раз. Wow. • Не бэкапится стандартным образом (no need?) • Не поддерживает delete/update (snapshots) 17
  • 18. Конфигурация • Профиль нагрузки: • Большой объем RW I/O • Основной объем I/O в stage, nds • DDM нагружена слабо • shared_buffers = ½ RAM • work_mem = 1GB • maintenance_work_mem = 2GB • temp_buffers = 2GB • effective_cache_size = ½ RAM • checkpoint_segments = 128 18
  • 19. Фишечки • DDM может быть вынесена на отдельный сервер (londiste) • Используйте COPY/BULK INSERTS не используйте UPDATE (ха ха ха) • Думайте о горизонтальном и вертикальном партиционировании поищите хорошие ключи для этого • Думайте о параллелизме с самого начала • Используйте TABLESPACES/PARTIAL INDEXES (и больше дисков) • Вам нужна политика хранения данных • Статистику пишите в tempfs 19
  • 20. Фишечки ч2 • Используйте миграции – sqitch by theory • Тестируйте ELT - sqitch by theory • Анализируйте pg_stat_statements (добавьте в мониторинг) • Профилируйте процедуры – PLPROFILER3 • Иногда, вам (не) нужен cstore_fdw • Иногда, вам (не) нужны unlogged tables 20
  • 21. Плюсы и минусы решения • Минусы • Плохо масштабируется горизонтально • Сложный деплой • Плюсы • Local data (no big network transfers) • Effectively parallelized (thanks to pharmacy_id) • PL/pgSQL 21
  • 23. Speed limit • cubes не быстрый (сериализация) • json (12 sec) • ujson (4 sec) • postgres json output (1.5 sec) db self time 0.3-0.7 sec 23