SlideShare a Scribd company logo
Postgresql XC

      Что это и с чем его есть.

Maxim.Boguk@PostgreSQL-Consulting.com
Что такое Postgresql-XC
• Решение для кластеризации PostgreSQL с
  возможностью наращивания
  производительности путем добавления
  новых серверов.
• Поддержка автоматического прозрачного
  шардинга данных на несколько серверов.
• Честный ACID и честные транзакции в
  распределенной среде.
Что такое Postgresql-XC
• До разумного количества нод – возможна
  (при определенных условиях) почти
  линейная масштабируемость и по чтению и
  по записи.
• Возможно построение высокодоступных
  (high-available) конфигураций
• Некоторые запросы могут выполнятся
  частично параллельно.
Чем не является PostgreSQL-XC
• Хоть Postgresql-XC и выглядит похожим на
  MultiMaster он им не является. Все сервера
  кластера должны быть соединены сетью с
  минимальными задержками (читай
  воткнуты в один switch), никакое
  географически-распределенное решение с
  разумной производительностью построить
  на нем не возможно (это важный момент).
Масштабируемость
                     Результаты DBT-1
Производительность




                       Количество серверов
Архитектура (упрощенно)
Где взять и какие есть версии?
Официальный сайт:
        http://postgres-xc.sourceforge.net/

Последняя доступная версия:
1.0.1 на основе Postgresql 9.1.5 (выпущена в
сентябре 2012)

Версия в разработке:
1.1 на основе PostgreSQL 9.2 (ожидается в мае 2013)
Минимальная конфигурация:
• Минимальная конфигурация PostgreSQL-XC
  содержит 4 независимых подсистем
  (администрировать это все достаточно
  весело): 2 сервиса с данными, сервис-
  координатор, GTM (global transaction
  manager).
• В принципе это все можно завести на 2
  физических серверах или виртуалках.
Как это выглядит?
Транзакции и ACID
• Приложение присоденившееся к любому из
  координаторов видит одинаковое (между
  всеми координаторами) и целостное
  представление данных.
• Честный ACID без необходимости вносить
  правки в приложение.
• Единые snapshots и видимость транзакций
  обеспечиваются специальным отдельным
  приложением GTM.
А как же печальноизвестная CAP
             теорема?
• PostgreSQL-XC попадает в CA угол этого
  треугольника. Таким образом всегда есть
  согласованность данных и доступность (HA
  требует дополнительной настройки но в
  целом возможен). В общем как и любое
  другое кластерное решение для
  классических баз данных.
Обеспечение транзакционой
    целостности между нодами.
• Для обеспечения транзакционной
  целостности операций затрагивающих
  более одной ноды – используется
  классический механизм 2PC (two-phase
  commit).
• После сбоя для разбора ситуации с 2PC есть
  специальная утилита pgxc_clean для
  приведения кластера в согласованное
  состояние.
Распределение данных в кластере
• Два в общем то стандартных варианта:
  таблица целиком хранися на всех базах
  кластера или шардинг (про это потом
  подробнее)
• Так как PostgreSQL-XC умеет проводить joins
  прямо на нодах с данными таблицы с
  которым часто идут Joins лучше
  реплицировать целиком.
Шардинг. В каких случаях?
• Таблицы логов (завершенные операции,
  посещения)
• Таблицы с временными данными
  (например корзина заказа в интернет
  магазине)
• Пользователи и их данные (шардинг по id
  пользователя).
Синтаксис шардинга:
• CREATE TABLE tab (…) DISTRIBUTE BY
  HASH(col) | MODULO(col) | REPLICATE
Просто и удобно.
На практике – надо очень внимательно
думать о том как делать так как переделывать
большую таблицу на другой режим шардинга
до 1.1 очень неудобно.
Что не надо шардить?
• Таблицы-справочники и прочие глобальные
  данные с которыми постоянно
  производятся Joins (join большого обьема
  данных с таблицей разбитой на нескольких
  нодах будет весьма неэффективен).
• В общем то любые статические или
  редкоизменяемые таблицы с большим
  потоком чтения.
План простого запроса:
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2;
-- полная копия данных на обоих нодах

EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5;

-- Решаем где выполнять запрос
-> Data Node Scan on tab1
   Output: val, val2
   -- выбрали одну из нод
   Node/s: datanode_1
   Remote query: SELECT val, val2 FROM ONLY tab1 WHERE (val2 = 5)
План простого запроса v2:
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2;
-- таблица раскидана на 2 ноды

EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5;

-- поиск по всем нодам
-> Data Node Scan on "__REMOTE_FQS_QUERY__«
    Output: tab1.val, tab1.val2
    -- собираем данные со всех нод
    Node/s: datanode_1, datanode_2
    -- операции на всех нодах идут параллельно!
    Remote query: SELECT val, val2 FROM tab1 WHERE (val2 = 5)
Подсчет агрегата sum():
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2;
-- полная копия данных на обоих нодах

EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2;

HashAggregate
--подсчет суммы на ноде-координаторе
Output: sum(val), val2
-> Data Node Scan on tab1
    Output: val, val2
    --вытаскиваем таблицу целиком с одной из нод
    Node/s: datanode_1
    Remote query: SELECT val, val2 FROM ONLY tab1 WHERE true
Подсчет агрегата sum() v2:
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2;
-- таблица раскидана на 2 ноды

EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2;

HashAggregate
Output: pg_catalog.sum((sum(tab1.val))), tab1.val2
    --суммируем подитоги на координаторе
    ->Data Node Scan on "__REMOTE_GROUP_QUERY__"
    Output: sum(tab1.val), tab1.val2
    Node/s: datanode_1, datanode_2
    Remote query: SELECT sum(group_1.val), group_1.val2
          FROM (SELECT val, val2 FROM ONLY tab1
          WHERE true) group_1 GROUP BY 2
     --получаем частичные суммы с каждой из нод
А что на счет JOINS:
• Joins между и с участием реплицированных
  таблиц, а также Joins между
  распределенными по одному и тому же
  полю в таблицах – выполняются на data-
  нодах напрямую.
• Joins с участием распределенных таблиц по
  другим ключам – будут выполнены на ноде-
  координаторе и скорее всего это будет
  медленно.
Известные ограничения.
• не поддерживаются триггеры (обещают
  доделать в 1.1).
• Нет удобной системы
  репартиционирования при добавлении или
  удалении нод (тоже обещают доделать в
  1.1 но даже тогда это будет означать
  downtime)
Известные ограничения часть 2.
• Нет глобальных UNIQUE на распределенных
  таблицах.
• Не поддерживаются курсоры (обещают в
  версии 1.1)
• Не поддерживаются foreign keys между
  нодами (т.е. FK стого должен вести на
  данные расположенные на той же ноде).
Известные ограничения часть 3:
• Не поддерживается INSERT … RETURNING
  (опять же обещается поддержка в 1.1)
• Невозможно удаление и добавление нод в
  кластер без полной реинициализации
  кластера (обещают в 1.1 тоже исправить).
А оно надежно?
• Много подсистем – много потенциальных
  точек отказа. Архитектура PostgreSQL-XC с
  самого начала предусматривает
  возможность дублирования всех
  компонентов.
• Ноды с данными и ноды-координаторы
  представляют из слегка изменнеый
  PostgreSQL и поддерживают streaming
  репликацию для избыточности.
Обеспечение высокой доступности:
• GTM это отдельный процесс и может быть
  точкой отказа, поэтому для него разработан
  отдельный механизм синхроннго standby.
• Все ноды с данными и ноды координаторы
  должны иметь синхронные streaming
  реплики.
• GTM всегда используется в связке с GTM-
  standby.
Backup и восстановление:
• Pg_dump/pg_dumpall работают фактически
  так же как и для обычного PostgreSQL.
• Hot-backup – требует вызова специальной
  команды CREATE BARRIER ‘barrier_id’
  (фактически аналог вызова select
  pg_start_backup(‘label’); ) далее для всех
  нод с данными и координаторов так же как
  для обычного PostgreSQL.
А зачем оно надо?
• При росте проекта может сложится
  ситуация когда обьем данных или нагрузка
  доходит до того уровня когда один сервер
  (или даже мастер + N реплик) не
  справляются с нагрузкой или по причине
  высокого интенсивности записи в базу или
  по причине роста объема данных.
А зачем оно надо?
• Тогда есть вариант или делать
  слабосвязанную систему из многих
  серверов (ручной шардинг) и переписывать
  проект почти заново.
• Или попробовать использовать PostreSQL-
  XC как временное или постоянное решение
  оставив почти 100% совместимость с single-
  database версий на уровне запросов.
А зачем оно надо?
• Вторая целевая группа для PostgreSQL-XC
  это Data Warehousing и системы аналитики:
  параллельное выполнение запросов на
  распределенных таблицах позволяет резко
  ускорить тяжелые аналитических запросы.
• Заодно и обьем данных на каждой из нод
  будет поменьше.
А стоит ли оно того?
• Решать вам. Администрирование PostgreSQL-
  XC заметно сложнее и более трудоемкое чем
  администрирование простого PostgreSQL (но в
  общем не принципиально сложнее чем
  администрирование PostgreSQL в связке с
  Slony или Londiste).
• Далеко не любой проект можно смигрировать
  без переделок. Но их понадобится заметно
  меньше чем при использовании шардинга.
Использованные материалы:
         PostgreSQL-XC tutorial from PGCon2012 by
                       Koichi Suzuki
                     Michael Paquier
                     Ashutosh Bapat
http://www.pgcon.org/2012/schedule/attachments/224_Postgres-XC_tutorial.pdf



Официальная документация продукта:
http://postgres-xc.sourceforge.net/docs/1_0/

More Related Content

PDF
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
PPTX
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
Класс!ная Cassandra
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Класс!ная Cassandra
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)

What's hot (20)

PDF
Лекция 10. Apache Mahout
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PPTX
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
PDF
Чему мы научились разрабатывая микросервисы?
PDF
Call of Postgres: Advanced Operations (part 1)
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PDF
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
PDF
Лекция 12. Spark
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PPTX
Mysql vs postgresql
PDF
PostgreSQL Streaming Replication
PPTX
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Лекция 10. Apache Mahout
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Хранение данных на виниле / Константин Осипов (tarantool.org)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Обзор перспективных баз данных для highload / Юрий Насретдинов
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Чему мы научились разрабатывая микросервисы?
Call of Postgres: Advanced Operations (part 1)
MyRocks: табличный движок для MySQL на основе RocksDB
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Лекция 12. Spark
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Mysql vs postgresql
PostgreSQL Streaming Replication
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ad

Viewers also liked (20)

PDF
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
PDF
Синие против красных
PDF
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
PDF
~20081006 Highload2008 Postgresql самохвалов
PDF
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PDF
PG Day'14 Russia, PostgreSQL: архитектура, настройка и оптимизация, Илья Косм...
PPTX
PostgreSQL. Стильно. Модно. Молодёжно
PDF
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PDF
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
PDF
Pgconfru 2015 kosmodemiansky
PDF
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
PDF
Масштабирование баз данных
PDF
Владимир Бородин - PostgreSQL
PDF
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
PDF
Get to know PostgreSQL!
PPT
Postgres Presentation
PDF
Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексе...
PDF
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
PPT
Потоковая репликация PostgreSQL
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
Синие против красных
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
~20081006 Highload2008 Postgresql самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PG Day'14 Russia, PostgreSQL: архитектура, настройка и оптимизация, Илья Косм...
PostgreSQL. Стильно. Модно. Молодёжно
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Pgconfru 2015 kosmodemiansky
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Масштабирование баз данных
Владимир Бородин - PostgreSQL
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Get to know PostgreSQL!
Postgres Presentation
Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексе...
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Потоковая репликация PostgreSQL
Ad

Similar to Что такое Postgresql (Максим Богук) (20)

PPTX
#PostgreSQLRussia в банке Тинькофф, доклад №1
PPTX
Hosting for forbes.ru_
PPTX
Масштабирование баз данных. (Database Scalability)
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PPT
hl++ Rubtsov
PPT
SAMag2007 Conference: PostgreSQL 8.3 presentation
PPTX
Cassandra db
PPTX
Практический опыт использования некоторых современных решений репликации MySQL
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
pgconf.ru 2015 avito postgresql
PPTX
High Load 2009 Dimaa Rus Ready
PPTX
migrate Oracle Database from RISC platform to x86 with minimal downtime
PDF
Архитектура и программирование потоковых многоядерных процессоров для научных...
PDF
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
PPTX
Доклад на Highload-2012
PPTX
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
Hadoop > cascading -> cascalog (short version)
PPTX
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
#PostgreSQLRussia в банке Тинькофф, доклад №1
Hosting for forbes.ru_
Масштабирование баз данных. (Database Scalability)
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
hl++ Rubtsov
SAMag2007 Conference: PostgreSQL 8.3 presentation
Cassandra db
Практический опыт использования некоторых современных решений репликации MySQL
2014.12.23 Александр Андреев, Parallels
pgconf.ru 2015 avito postgresql
High Load 2009 Dimaa Rus Ready
migrate Oracle Database from RISC platform to x86 with minimal downtime
Архитектура и программирование потоковых многоядерных процессоров для научных...
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Доклад на Highload-2012
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Hadoop > cascading -> cascalog (short version)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)

Что такое Postgresql (Максим Богук)

  • 1. Postgresql XC Что это и с чем его есть. [email protected]
  • 2. Что такое Postgresql-XC • Решение для кластеризации PostgreSQL с возможностью наращивания производительности путем добавления новых серверов. • Поддержка автоматического прозрачного шардинга данных на несколько серверов. • Честный ACID и честные транзакции в распределенной среде.
  • 3. Что такое Postgresql-XC • До разумного количества нод – возможна (при определенных условиях) почти линейная масштабируемость и по чтению и по записи. • Возможно построение высокодоступных (high-available) конфигураций • Некоторые запросы могут выполнятся частично параллельно.
  • 4. Чем не является PostgreSQL-XC • Хоть Postgresql-XC и выглядит похожим на MultiMaster он им не является. Все сервера кластера должны быть соединены сетью с минимальными задержками (читай воткнуты в один switch), никакое географически-распределенное решение с разумной производительностью построить на нем не возможно (это важный момент).
  • 5. Масштабируемость Результаты DBT-1 Производительность Количество серверов
  • 7. Где взять и какие есть версии? Официальный сайт: http://postgres-xc.sourceforge.net/ Последняя доступная версия: 1.0.1 на основе Postgresql 9.1.5 (выпущена в сентябре 2012) Версия в разработке: 1.1 на основе PostgreSQL 9.2 (ожидается в мае 2013)
  • 8. Минимальная конфигурация: • Минимальная конфигурация PostgreSQL-XC содержит 4 независимых подсистем (администрировать это все достаточно весело): 2 сервиса с данными, сервис- координатор, GTM (global transaction manager). • В принципе это все можно завести на 2 физических серверах или виртуалках.
  • 10. Транзакции и ACID • Приложение присоденившееся к любому из координаторов видит одинаковое (между всеми координаторами) и целостное представление данных. • Честный ACID без необходимости вносить правки в приложение. • Единые snapshots и видимость транзакций обеспечиваются специальным отдельным приложением GTM.
  • 11. А как же печальноизвестная CAP теорема? • PostgreSQL-XC попадает в CA угол этого треугольника. Таким образом всегда есть согласованность данных и доступность (HA требует дополнительной настройки но в целом возможен). В общем как и любое другое кластерное решение для классических баз данных.
  • 12. Обеспечение транзакционой целостности между нодами. • Для обеспечения транзакционной целостности операций затрагивающих более одной ноды – используется классический механизм 2PC (two-phase commit). • После сбоя для разбора ситуации с 2PC есть специальная утилита pgxc_clean для приведения кластера в согласованное состояние.
  • 13. Распределение данных в кластере • Два в общем то стандартных варианта: таблица целиком хранися на всех базах кластера или шардинг (про это потом подробнее) • Так как PostgreSQL-XC умеет проводить joins прямо на нодах с данными таблицы с которым часто идут Joins лучше реплицировать целиком.
  • 14. Шардинг. В каких случаях? • Таблицы логов (завершенные операции, посещения) • Таблицы с временными данными (например корзина заказа в интернет магазине) • Пользователи и их данные (шардинг по id пользователя).
  • 15. Синтаксис шардинга: • CREATE TABLE tab (…) DISTRIBUTE BY HASH(col) | MODULO(col) | REPLICATE Просто и удобно. На практике – надо очень внимательно думать о том как делать так как переделывать большую таблицу на другой режим шардинга до 1.1 очень неудобно.
  • 16. Что не надо шардить? • Таблицы-справочники и прочие глобальные данные с которыми постоянно производятся Joins (join большого обьема данных с таблицей разбитой на нескольких нодах будет весьма неэффективен). • В общем то любые статические или редкоизменяемые таблицы с большим потоком чтения.
  • 17. План простого запроса: CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2; -- полная копия данных на обоих нодах EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5; -- Решаем где выполнять запрос -> Data Node Scan on tab1 Output: val, val2 -- выбрали одну из нод Node/s: datanode_1 Remote query: SELECT val, val2 FROM ONLY tab1 WHERE (val2 = 5)
  • 18. План простого запроса v2: CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2; -- таблица раскидана на 2 ноды EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5; -- поиск по всем нодам -> Data Node Scan on "__REMOTE_FQS_QUERY__« Output: tab1.val, tab1.val2 -- собираем данные со всех нод Node/s: datanode_1, datanode_2 -- операции на всех нодах идут параллельно! Remote query: SELECT val, val2 FROM tab1 WHERE (val2 = 5)
  • 19. Подсчет агрегата sum(): CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2; -- полная копия данных на обоих нодах EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2; HashAggregate --подсчет суммы на ноде-координаторе Output: sum(val), val2 -> Data Node Scan on tab1 Output: val, val2 --вытаскиваем таблицу целиком с одной из нод Node/s: datanode_1 Remote query: SELECT val, val2 FROM ONLY tab1 WHERE true
  • 20. Подсчет агрегата sum() v2: CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2; -- таблица раскидана на 2 ноды EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2; HashAggregate Output: pg_catalog.sum((sum(tab1.val))), tab1.val2 --суммируем подитоги на координаторе ->Data Node Scan on "__REMOTE_GROUP_QUERY__" Output: sum(tab1.val), tab1.val2 Node/s: datanode_1, datanode_2 Remote query: SELECT sum(group_1.val), group_1.val2 FROM (SELECT val, val2 FROM ONLY tab1 WHERE true) group_1 GROUP BY 2 --получаем частичные суммы с каждой из нод
  • 21. А что на счет JOINS: • Joins между и с участием реплицированных таблиц, а также Joins между распределенными по одному и тому же полю в таблицах – выполняются на data- нодах напрямую. • Joins с участием распределенных таблиц по другим ключам – будут выполнены на ноде- координаторе и скорее всего это будет медленно.
  • 22. Известные ограничения. • не поддерживаются триггеры (обещают доделать в 1.1). • Нет удобной системы репартиционирования при добавлении или удалении нод (тоже обещают доделать в 1.1 но даже тогда это будет означать downtime)
  • 23. Известные ограничения часть 2. • Нет глобальных UNIQUE на распределенных таблицах. • Не поддерживаются курсоры (обещают в версии 1.1) • Не поддерживаются foreign keys между нодами (т.е. FK стого должен вести на данные расположенные на той же ноде).
  • 24. Известные ограничения часть 3: • Не поддерживается INSERT … RETURNING (опять же обещается поддержка в 1.1) • Невозможно удаление и добавление нод в кластер без полной реинициализации кластера (обещают в 1.1 тоже исправить).
  • 25. А оно надежно? • Много подсистем – много потенциальных точек отказа. Архитектура PostgreSQL-XC с самого начала предусматривает возможность дублирования всех компонентов. • Ноды с данными и ноды-координаторы представляют из слегка изменнеый PostgreSQL и поддерживают streaming репликацию для избыточности.
  • 26. Обеспечение высокой доступности: • GTM это отдельный процесс и может быть точкой отказа, поэтому для него разработан отдельный механизм синхроннго standby. • Все ноды с данными и ноды координаторы должны иметь синхронные streaming реплики. • GTM всегда используется в связке с GTM- standby.
  • 27. Backup и восстановление: • Pg_dump/pg_dumpall работают фактически так же как и для обычного PostgreSQL. • Hot-backup – требует вызова специальной команды CREATE BARRIER ‘barrier_id’ (фактически аналог вызова select pg_start_backup(‘label’); ) далее для всех нод с данными и координаторов так же как для обычного PostgreSQL.
  • 28. А зачем оно надо? • При росте проекта может сложится ситуация когда обьем данных или нагрузка доходит до того уровня когда один сервер (или даже мастер + N реплик) не справляются с нагрузкой или по причине высокого интенсивности записи в базу или по причине роста объема данных.
  • 29. А зачем оно надо? • Тогда есть вариант или делать слабосвязанную систему из многих серверов (ручной шардинг) и переписывать проект почти заново. • Или попробовать использовать PostreSQL- XC как временное или постоянное решение оставив почти 100% совместимость с single- database версий на уровне запросов.
  • 30. А зачем оно надо? • Вторая целевая группа для PostgreSQL-XC это Data Warehousing и системы аналитики: параллельное выполнение запросов на распределенных таблицах позволяет резко ускорить тяжелые аналитических запросы. • Заодно и обьем данных на каждой из нод будет поменьше.
  • 31. А стоит ли оно того? • Решать вам. Администрирование PostgreSQL- XC заметно сложнее и более трудоемкое чем администрирование простого PostgreSQL (но в общем не принципиально сложнее чем администрирование PostgreSQL в связке с Slony или Londiste). • Далеко не любой проект можно смигрировать без переделок. Но их понадобится заметно меньше чем при использовании шардинга.
  • 32. Использованные материалы: PostgreSQL-XC tutorial from PGCon2012 by Koichi Suzuki Michael Paquier Ashutosh Bapat http://www.pgcon.org/2012/schedule/attachments/224_Postgres-XC_tutorial.pdf Официальная документация продукта: http://postgres-xc.sourceforge.net/docs/1_0/