Upload
vladislav-bezverhiy
View
166
Download
1
Embed Size (px)
DESCRIPTION
My internal presentation of PostgreSQL database in A2 Design company
Citation preview
PostgreSQLСтильно. Модно. Молодежно
Возможности
Соответствие стандарту SQL
ANSI SQL-92 и SQL-99
Плагины, расширения, языки для функций и процедур.
Много индексов.
Можно писать свои индексы (в том числе и функциональные).
Есть плагины.
Многоверсионность (MVCC
)
Масштабирование.
Tablespaces.
SLONY
VODKA!
Есть понятные роли из коробки.
Наследование
Наследование
Почему можно заменить MySQL на PostgreSQL?
PostgreSQL умеет всё, что умеет MySQL.
Даже твой SELECT там заработает. А для INSERT, DELETE и UPDATE есть приятный бонус.
Порог вхождения довольно низок.
Ты можешь собрать PostgreSQL из исходников даже если это первая твоя собираемая из исходников программа. В репозитариях как правило лежит свежая версия.
Типы данных● Численные типы
● Целые
● С фиксированной точкой
● С плавающей точкой
● Денежный тип (отличается специальным форматом вывода, а в остальном аналогичен числам с
фиксированной точкой с двумя знаками после запятой)
● Символьные типы произвольной длины
● Двоичные типы (включая BLOB)
● Типы «дата/время» (полностью поддерживающие различные форматы, точность, форматы вывода, включая
последние изменения в часовых поясах)
● Булев тип
Типы данныхБулев тип
Перечисление
Геометрические примитивы
Сетевые типы
IP и IPv6-адреса
CIDR-формат
MAC-адрес
UUID-идентификатор
Типы данных● XML-данные
● Массивы
● JSON
● Идентификаторы объектов БД
● Псевдотипы
Индексы
1. B-tree2. Hash3. GiST4. SP-GiST5. GIN
6. VODKA ( анонсированно )
ConstraintНе-именованное ограничение:
Именованное ограничение:
ConstraintОграничение по нескольким полям:
Тоже самое, но более компактно и с логическими операторами:
ПРАВИЛЬНЫЙ Group By
ПРАВИЛЬНЫЙ Group By
ПРАВИЛЬНЫЙ Group By
Инициализация базыСоздаем базу данных
Создание таблицы
ReturningДанные из затронутых ЛЮБЫМ INSERT, UPDATE или DELETE запросом строк можно вернуть.
Процедурные языки
Название Язык Функция
PL/Java Java http://pljava.projects.postgresql.org/
PL/PHP PHP http://www.commandprompt.com/community/plphp/
PL/Py Python 2/3 http://python.projects.postgresql.org/
PL/R R http://www.joeconway.com/plr/
PL/Ruby Ruby http://raa.ruby-lang.org/project/pl-ruby/
PL/Scheme Scheme http://plscheme.projects.postgresql.org/
PL/sh Unix shell http://plsh.projects.postgresql.org/
Returning
JSON storage
JSON storage
Масштабирование● Slony
● Pgpool-II
● Pgcluster
● PL/Proxy
● PgBouncer
МасштабированиеSlony – система репликации реального времени, позволяющая организовать синхронизацию
нескольких серверов PostgreSQL по сети. Slony использует триггеры PostgreSQL для привязки
к событиям INSERT/DELETE/UPDATE и хранимые процедуры для выполнения действий. Наши
соотечественники вдоволь порезвились с аббревиатурами названий базовых утилит пакета.
Основные понятия системы:
● кластер – набор баз данных;
● нода – база данных, которая может быть распределена;
Масштабирование● репликационный набор – набор таблиц, которые могут быть реплицированы между
нодами кластера;
● источник (или провайдер) и подписчик – у каждой репликации есть одна нода-источник,
остальные ноды могут быть подписчиками;
● slon – демон, присутствующий на каждой ноде и управляющий ее репликациями;
● slonik – командная утилита для общего управления нодами.
http://slony.info/
МасштабированиеPgpool-II
Эта система масштабирования представляет собой прокси-прослойку между сервером и
клиентами, прозрачна для обоих, может организовывать пул для ограничения соединений. Она
реализует следующие возможности.
1. Создает высокопроизводительную сетевую структуру между нодами, кластерами и
пользователями.
2. Синхронно реплицирует данные на множество серверов без остановки.
3. Балансирует нагрузку, распределяя ее между нодами кластера.
4. Распараллеливает запросы за счет разнесения данных по нодам.
5. Failover – обнаружение отказа и переключение нагрузки.
МасштабированиеPgcluster
Для его установки необходимо поставить патч на postgresql. Схема работы сложнее, чем в
pgpool. Pgcluster состоит из трех типов серверов:
● балансер-сервер (front-end);
● кластерный сервер(данные);
● репликационный сервер.
Когда одна из нод «падает», балансер и репликационный сервер, постоянно отслеживающие
жизнедеятельность кластера, отделяют сломанную ноду от работоспособной части системы и
продолжают работу с оставшимися нодами.
МасштабированиеПосле этого необходимо устранить неисправность упавшей ноды и подсоединить к системе в
режиме репликации. После этого репликационный сервер запишет данные с работающих
серверов поверх имеющихся на реплицируемой ноде плюс выполнит запросы за время
простоя в автоматическом режиме, останется только включить сервер в обычном режиме.
МасштабированиеPL/Proxy
PL/Proxy – это прокси-язык, используемый для вызова удаленных процедур и разделения
данных между нодами. Проект представляет собой компилируемую си-шную библиотеку
libplproxy.so
МасштабированиеPgBouncer
Это пул коннектов для постгрес от компании Skype. Существуют три режима управления.
1. Session Pooling. Клиенту выделяется соединение с сервером; оно приписано ему в
течение всей сессии и возвращается в пул только после отсоединения клиента.
2. Transaction Pooling. Клиент владеет соединением только в течение транзакции.
3. Statement Pooling. Соединение возвращается назад в пул сразу после завершения
запроса.
К достоинствам PgBouncer относится:
● малое потребление памяти (менее 2 КБ на соединение);
● отсутствие привязки к одному серверу баз данных;
● реконфигурация настроек без рестарта.
Спасибоза внимание