SlideShare a Scribd company logo
1 of 36
www.postgrespro.ru
PostgreSQL в кластере.
Скандалы, интриги,
расследования.
Федор Сигаев
Российские разработчики
Олег Бартунов, Федор Сигаев, Александр Коротков
PostgreSQL CORE
● Locale support
● PostgreSQL extendability:
● GiST(KNN), GIN, SP-GiST
● Full Text Search (FTS)
● NoSQL (hstore, jsonb)
● Indexed regexp search
● VODKA access method (WIP)
Расширения:
● Intarray
● Pg_trgm
● Ltree
● Hstore
● plantuner
● JsQuery
● Докладчики PGCon, PGConf: 20+ докладов
● Менторы GSoC
● Коммитеры PostgreSQL (1+1 in progress)
● Организаторы конференций
● 50+ лет экспертизы PostgreSQL: разработка, аудит, консалтинг
● Novartis, Raining Data, Heroku, Engine Yard, WarGaming, Rambler, Avito, 1c
Кластер — это непросто
● Write or Read or Both scalability
● HA
● Географическое разнесение
● Функциональное разнесение
● Филиалы или выездные сотрудники
● Требования к консистентности (согласованности)
Postgres Cluster Matrix
WS RS Parallel
Read
M-M Synchr Recov. HA Consistency
ACID BASE
Postgres-R + + + + + +
XC/XL/X2 +? + + + + +
PGCluster + +
PgPool + + +
Pl/proxy + + +
pg_shard/CituDB + + + +
Greenplum + + +
Bucardo + + + + +
BDR + + + + +
SR + + + + +!
FDW + + + +
PostgreSQL XC/XL/X2
● 2009-2012
Postgres-XC
Development Group
● 2012-2014
TransLattice, Inc
● 2014-2016
Postgres-XL
Development Group
● 2015-2016
2ndQuadrant Ltd
PostgreSQL XC/XL/X2
● GTM — менеджер транзакций (SPOF!)
● ProxyGTM
● N+1 commit logs (sync?)
● Не добавить, не убавить, самому заботиться
● CREATE TABLE ...
DISTRIBUTE BY { REPLICATION |
ROUNDROBIN { [HASH | MODULO ]
( column_name ) } }
● Распределенные запросы
pg_shard/FDW
● Shared nothing
● No ACID, No BASE — всё сам, сам
● Распределенные запросы
BDR 2ndQuadrant Ltd
● Взаимная репликация
● BASE only
● Конфликты (last win)
● Нет распределенных
запросов
Node 1 Node 2
Что объединяет?
● Забота о распределенности (-BDR)
● HA — не трогаем
● Бакапы отсутствуют
Идея
Оторвем менеджер транзакций
DB3DB1 DB2
xTM
Транзакции в PgSQL
Сессия 1 Сессия 2
# begin;
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 693 | 0 | 1 | 111
# update foo set val=222;
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,2) | 694 | 0 | 1 | 222
# select txid_current();
txid_current
--------------
694
# begin;
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 693 | 0 | 1 | 111
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 693 | 694 | 1 | 111
Транзакции в PgSQL
Tuple виден, если (Read Commited)
Xmin закоммичен
Xmax == 0 или не закоммичен
Tuple виден, если (Repeatable Read)
Xmin закоммичен
Xmin < Current XID и он закончен до старта нашей транзакции
Xmax == 0 или не закоммичен или Xmax > Current XID или не закончен до
нашего старта
Транзакции в PgSQL
Сессия 1 Сессия 2
# begin;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 697 | 0 | 1 | 111
(0,2) | 697 | 0 | 2 | 222
# update foo set val = 333 where id = 1;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,2) | 697 | 699 | 2 | 222
(0,3) | 698 | 0 | 1 | 333
# update foo set val = 555 where id = 2;
-- ждем 2-ую сессию
# begin;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 697 | 0 | 1 | 111
(0,2) | 697 | 0 | 2 | 222
# update foo set val = 444 where id = 2;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 697 | 698 | 1 | 111
(0,4) | 699 | 0 | 2 | 444
# update foo set val = 666 where id = 1;
-- DEADLOCK!!
Count(*) быстрым не будет!
Transaction Manager before patch
Transaction Manager after patch
Distributed Transaction Manager
Pluggable transaction API
UDT
CSP
FDW
AM
TM?
Core
eXtensible Transaction API
● XidStatus (*GetTransactionStatus)(TransactionId xid,
XLogRecPtr *lsn);
● void (*SetTransactionStatus)(TransactionId xid, int
nsubxids, TransactionId *subxids, XidStatus status,
XLogRecPtr lsn);
● Snapshot (*GetSnapshot)(Snapshot snapshot);
● TransactionId (*GetNewTransactionId)(bool isSubXact);
● TransactionId (*GetOldestXmin)(Relation rel, bool
ignoreVacuum);
● bool (*IsInProgress)(TransactionId xid);
● TransactionId (*GetGlobalTransactionId)(void);
● bool (*IsInSnapshot)(TransactionId xid, Snapshot
snapshot);
Что получаем
● Несколько нод имеют одно и тоже
представление о транзакциях/снапшотах
● Уже можно самостоятельно организовывать
распределенную транзакцию с атомарным
(sic!) коммитом
● Если подключить БД с такой же семантикой —
гетерогенная распределенная транзакция!
● Можно сочетать c pg_shard/FDW!
Что не получаем
● Есть SPOF
● Оно же узкое место при некоторых нагрузках
● Его ж майнтайнить надо!
DTM architecture
PostgreSQL
Instance 1
PostgreSQL
Instance 2
PostgreSQL
Instance 3
Arbiter
master
Arbiter
slave 1
Arbiter
slave 2
synchronous
replication
asynchronous
replication
Multiplexing
Unix domain
sockets
Arbiter
Unix domain
sockets
TCP sockets
sockhub
backends
backends
Node 1
Node 2
DTM from client's point of view
Primary server Secondary server
create extension pg_dtm; create extension pg_dtm;
select dtm_begin_transaction();
begin transaction;
update...;
commit;
select dtm_join_transaction(xid);
begin transaction;
update...;
commit;
Идея!
● Есть интерфейс — ок
● Есть семантика — ок
● А почему нужка какая-то искусственная
монотонная последовательность?!
Идея!
Ну время жеж!
Время как id
● Немножко идет по-разному, прыгает
● Сообщения из будущего... спать надо больше!
● Управляем дельтой... что бы это не значило
tsDTM architecture
PostgreSQL
Instance 1
PostgreSQL
Instance 2
PostgreSQL
Instance 3
Lightweight two-phase commit
XactLogCommitRecord
(flush changes in WAL)
ProcArrayEndTransaction
(mark transaction as
completed)
ResourceOwnerRelease
(release transaction locks)
TransactionTreeSetCommitTsData
(set transaction status
in CLOG)
Agreement
Transaction status
Different DTM implementations
Local
transactions
2PC Arbiter Examples
Snapshot
sharing
XL, DTM
Timestamp Spanner,
Cockroach,
tsDTM
Incremental SAP HANA
Postgres Cluster Matrix
WS RS Parallel
Read
M-M Synchr Recov. HA Consistency
ACID BASE
Postgres-R + + + + + +
XC/XL/X2 +? + + + + +
PGCluster + +
PgPool + + +
Pl/proxy + + +
pg_shard/CituDB + + + + + +
Greenplum + + +
Bucardo + + + + +
BDR + + + + +
SR + +? + + +
FDW + + + + +
Postgres Professional
● xTM
● DTM
● tsDTM
● *TM — будущее
Postgres Professional
● Обнаружение сдохшего узла
● Его восстановление (в т.ч. полной заливкой)
● Добавление нового узла (реконфигурирование)
● Знание о кластере синхронизируется raft-
протоколом
● MM-HA-NM внутренний резиз прямо сейчас!
33
Postgres Professional
Российский вендор PostgreSQL в России
●
Поддержка, разработка, консалтинг, обучение
●
Тему технологической независимости СУБД пропагандируем с 2011 г.
●
Члены международного сообщества
●
Участники и спонсоры международных конференций (Канада, Австрия,
Бразилия)
●
PgConf.Russia 2015 и 2016 - крупнейшие в мире конференция по
PostgreSQL
В направлениях, где мы ведем разработку, PostgreSQL
является лидером* среди РСУБД
* геоинформационные системы, слабоструктурированные данные,
полнотекстовый поиск, расширяемость
Все российские ключевые международно признанные
разработчики PostgreSQL работают в нашей компании
В нашей команде 4 кандидата наук: 3 – по PostgreSQL и технологиям БД.
Сотрудничаем с МГУ и СПбГУ.
Postgres Professional NY 2016
Postgres Professional
Выбор настоящих профессионалов!
www.postgrespro.ru
Спасибо за внимание!
Контакты:
teodor@postgrespro.ru
+79166718198

More Related Content

What's hot

Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Ontico
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Pavel Dovbush
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruOntico
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...AvitoTech
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
 
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяцМихаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяцTanya Denisyuk
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
 
SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2Eugeniy Tyumentcev
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsPlatonov Sergey
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Ontico
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Fwdays
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Ontico
 

What's hot (19)

Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяцМихаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)SOA: строим свой service mesh / Иван Круглов (Booking.com)
SOA: строим свой service mesh / Иван Круглов (Booking.com)
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free maps
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
 

Viewers also liked

SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016etyumentcev
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...it-people
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 

Viewers also liked (6)

Plpgsql russia-pgconf
Plpgsql russia-pgconfPlpgsql russia-pgconf
Plpgsql russia-pgconf
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open SourceSECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 

Similar to SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования

Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Pythonru_Parallels
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на PythonCodeFest
 
GRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeGRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeARCCN
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-pythonAndrey Smirnov
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationNikolay Samokhvalov
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploykuchinskaya
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Ontico
 
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...Badoo Development
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)Александр Сигачев
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!Ivan Kruglov
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JSFestUA
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубыAleksandr Tarasov
 
131024 производственное планирование как метод решения проблем itsm forum r...
131024   производственное планирование как метод решения проблем itsm forum r...131024   производственное планирование как метод решения проблем itsm forum r...
131024 производственное планирование как метод решения проблем itsm forum r...Андрей Степенко
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...corehard_by
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandraodnoklassniki.ru
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"Artjoker
 

Similar to SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования (20)

Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
GRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeGRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network Initiative
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
 
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!SOA: послать запрос на сервер? Что может быть проще?!
SOA: послать запрос на сервер? Что может быть проще?!
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 
131024 производственное планирование как метод решения проблем itsm forum r...
131024   производственное планирование как метод решения проблем itsm forum r...131024   производственное планирование как метод решения проблем itsm forum r...
131024 производственное планирование как метод решения проблем itsm forum r...
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
 

More from SECON

SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем? SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?SECON
 
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON
 
SECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON
 
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON
 
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON
 
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON
 
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON
 
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON
 
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON
 
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON
 
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON
 
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON
 
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON
 
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON
 
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON
 
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON
 
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON
 
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON
 

More from SECON (20)

SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем? SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
 
SECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в production
 
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
 
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
 
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
 
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
 
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
 
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
 
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
 
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
 
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
 
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практике
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
 
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
 
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
 
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
 
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
 

SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования

  • 1. www.postgrespro.ru PostgreSQL в кластере. Скандалы, интриги, расследования. Федор Сигаев
  • 2. Российские разработчики Олег Бартунов, Федор Сигаев, Александр Коротков PostgreSQL CORE ● Locale support ● PostgreSQL extendability: ● GiST(KNN), GIN, SP-GiST ● Full Text Search (FTS) ● NoSQL (hstore, jsonb) ● Indexed regexp search ● VODKA access method (WIP) Расширения: ● Intarray ● Pg_trgm ● Ltree ● Hstore ● plantuner ● JsQuery ● Докладчики PGCon, PGConf: 20+ докладов ● Менторы GSoC ● Коммитеры PostgreSQL (1+1 in progress) ● Организаторы конференций ● 50+ лет экспертизы PostgreSQL: разработка, аудит, консалтинг ● Novartis, Raining Data, Heroku, Engine Yard, WarGaming, Rambler, Avito, 1c
  • 3. Кластер — это непросто ● Write or Read or Both scalability ● HA ● Географическое разнесение ● Функциональное разнесение ● Филиалы или выездные сотрудники ● Требования к консистентности (согласованности)
  • 4. Postgres Cluster Matrix WS RS Parallel Read M-M Synchr Recov. HA Consistency ACID BASE Postgres-R + + + + + + XC/XL/X2 +? + + + + + PGCluster + + PgPool + + + Pl/proxy + + + pg_shard/CituDB + + + + Greenplum + + + Bucardo + + + + + BDR + + + + + SR + + + + +! FDW + + + +
  • 5. PostgreSQL XC/XL/X2 ● 2009-2012 Postgres-XC Development Group ● 2012-2014 TransLattice, Inc ● 2014-2016 Postgres-XL Development Group ● 2015-2016 2ndQuadrant Ltd
  • 6. PostgreSQL XC/XL/X2 ● GTM — менеджер транзакций (SPOF!) ● ProxyGTM ● N+1 commit logs (sync?) ● Не добавить, не убавить, самому заботиться ● CREATE TABLE ... DISTRIBUTE BY { REPLICATION | ROUNDROBIN { [HASH | MODULO ] ( column_name ) } } ● Распределенные запросы
  • 7. pg_shard/FDW ● Shared nothing ● No ACID, No BASE — всё сам, сам ● Распределенные запросы
  • 8. BDR 2ndQuadrant Ltd ● Взаимная репликация ● BASE only ● Конфликты (last win) ● Нет распределенных запросов Node 1 Node 2
  • 9. Что объединяет? ● Забота о распределенности (-BDR) ● HA — не трогаем ● Бакапы отсутствуют
  • 11. Транзакции в PgSQL Сессия 1 Сессия 2 # begin; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,1) | 693 | 0 | 1 | 111 # update foo set val=222; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,2) | 694 | 0 | 1 | 222 # select txid_current(); txid_current -------------- 694 # begin; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,1) | 693 | 0 | 1 | 111 # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,1) | 693 | 694 | 1 | 111
  • 12. Транзакции в PgSQL Tuple виден, если (Read Commited) Xmin закоммичен Xmax == 0 или не закоммичен Tuple виден, если (Repeatable Read) Xmin закоммичен Xmin < Current XID и он закончен до старта нашей транзакции Xmax == 0 или не закоммичен или Xmax > Current XID или не закончен до нашего старта
  • 13. Транзакции в PgSQL Сессия 1 Сессия 2 # begin; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,1) | 697 | 0 | 1 | 111 (0,2) | 697 | 0 | 2 | 222 # update foo set val = 333 where id = 1; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,2) | 697 | 699 | 2 | 222 (0,3) | 698 | 0 | 1 | 333 # update foo set val = 555 where id = 2; -- ждем 2-ую сессию # begin; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,1) | 697 | 0 | 1 | 111 (0,2) | 697 | 0 | 2 | 222 # update foo set val = 444 where id = 2; # select ctid, xmin, xmax, * from foo; ctid | xmin | xmax | id | val -------+------+------+----+----- (0,1) | 697 | 698 | 1 | 111 (0,4) | 699 | 0 | 2 | 444 # update foo set val = 666 where id = 1; -- DEADLOCK!! Count(*) быстрым не будет!
  • 18. eXtensible Transaction API ● XidStatus (*GetTransactionStatus)(TransactionId xid, XLogRecPtr *lsn); ● void (*SetTransactionStatus)(TransactionId xid, int nsubxids, TransactionId *subxids, XidStatus status, XLogRecPtr lsn); ● Snapshot (*GetSnapshot)(Snapshot snapshot); ● TransactionId (*GetNewTransactionId)(bool isSubXact); ● TransactionId (*GetOldestXmin)(Relation rel, bool ignoreVacuum); ● bool (*IsInProgress)(TransactionId xid); ● TransactionId (*GetGlobalTransactionId)(void); ● bool (*IsInSnapshot)(TransactionId xid, Snapshot snapshot);
  • 19. Что получаем ● Несколько нод имеют одно и тоже представление о транзакциях/снапшотах ● Уже можно самостоятельно организовывать распределенную транзакцию с атомарным (sic!) коммитом ● Если подключить БД с такой же семантикой — гетерогенная распределенная транзакция! ● Можно сочетать c pg_shard/FDW!
  • 20. Что не получаем ● Есть SPOF ● Оно же узкое место при некоторых нагрузках ● Его ж майнтайнить надо!
  • 21. DTM architecture PostgreSQL Instance 1 PostgreSQL Instance 2 PostgreSQL Instance 3 Arbiter master Arbiter slave 1 Arbiter slave 2 synchronous replication asynchronous replication
  • 22. Multiplexing Unix domain sockets Arbiter Unix domain sockets TCP sockets sockhub backends backends Node 1 Node 2
  • 23. DTM from client's point of view Primary server Secondary server create extension pg_dtm; create extension pg_dtm; select dtm_begin_transaction(); begin transaction; update...; commit; select dtm_join_transaction(xid); begin transaction; update...; commit;
  • 24. Идея! ● Есть интерфейс — ок ● Есть семантика — ок ● А почему нужка какая-то искусственная монотонная последовательность?!
  • 26. Время как id ● Немножко идет по-разному, прыгает ● Сообщения из будущего... спать надо больше! ● Управляем дельтой... что бы это не значило
  • 28. Lightweight two-phase commit XactLogCommitRecord (flush changes in WAL) ProcArrayEndTransaction (mark transaction as completed) ResourceOwnerRelease (release transaction locks) TransactionTreeSetCommitTsData (set transaction status in CLOG) Agreement Transaction status
  • 29. Different DTM implementations Local transactions 2PC Arbiter Examples Snapshot sharing XL, DTM Timestamp Spanner, Cockroach, tsDTM Incremental SAP HANA
  • 30. Postgres Cluster Matrix WS RS Parallel Read M-M Synchr Recov. HA Consistency ACID BASE Postgres-R + + + + + + XC/XL/X2 +? + + + + + PGCluster + + PgPool + + + Pl/proxy + + + pg_shard/CituDB + + + + + + Greenplum + + + Bucardo + + + + + BDR + + + + + SR + +? + + + FDW + + + + +
  • 31. Postgres Professional ● xTM ● DTM ● tsDTM ● *TM — будущее
  • 32. Postgres Professional ● Обнаружение сдохшего узла ● Его восстановление (в т.ч. полной заливкой) ● Добавление нового узла (реконфигурирование) ● Знание о кластере синхронизируется raft- протоколом ● MM-HA-NM внутренний резиз прямо сейчас!
  • 33. 33 Postgres Professional Российский вендор PostgreSQL в России ● Поддержка, разработка, консалтинг, обучение ● Тему технологической независимости СУБД пропагандируем с 2011 г. ● Члены международного сообщества ● Участники и спонсоры международных конференций (Канада, Австрия, Бразилия) ● PgConf.Russia 2015 и 2016 - крупнейшие в мире конференция по PostgreSQL В направлениях, где мы ведем разработку, PostgreSQL является лидером* среди РСУБД * геоинформационные системы, слабоструктурированные данные, полнотекстовый поиск, расширяемость Все российские ключевые международно признанные разработчики PostgreSQL работают в нашей компании В нашей команде 4 кандидата наук: 3 – по PostgreSQL и технологиям БД. Сотрудничаем с МГУ и СПбГУ.