SlideShare a Scribd company logo
www.postgrespro.ru
Настоящее и
будущее PostgreSQL
Олег Бартунов
Иван Панченко
Основные форки PostgreSQL
2002 2006 2010 2012 20142004 2008
Aster Data
Terradata
TruCQ
Cisco
Greenplum
Enterprise Postgres
Fujtsu
GresCube
HadoopDB
Hadapt
Terradata
Netezza
IBM
TelegraphCQ
ParAccel Red Shift
Amazon
PipelineDB
Postgres-XC
Postgres-XL
BDR
2ndQuadrant
PowerGres
RecDB
Vertica
HP
EnterpriseDB
Yahoo! Everest
2015
Коммерческая СУБД СПО https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases
Postgres-X2
Greenplum
CitusDB
2016
Postgres Pro
CitusDB
Версии PostgreSQL
Разработка ядра PostgreSQL:
ЖЕСТЬ !
● Идея должна быть понятной сообществу и одобрена
(«правильный» use-case)
● Методы и подходы должны быть обсуждены (PR, поиск
спонсоров)
● Вы должны успеть подать на коммитфест до “feature freeze”
● Реализация должна пройти коммитфест
● Всегда найдется “умник”, которому не понравится
● Вид вашего кода – отступы, trailing white-spaces
● Названия переменных и функций
● Отсутствие должного количества комментариев, документации
● Ваша медленная реакция на замечания
История разработки KNN
●
Начало проекта - Sep 8, 2007 at 7:54 PM
date Sat, Sep 8, 2007 at 7:54 PM
subject Chat with Sergey V. Karpov
7:36 PM me: я тут knn-search занимаюсь, масса интересного. Все
думаю, как в постгресе это поиметь
Sergey: а что это такое?
7:37 PM me: k-nearest соседей - супер важная задача
найти 5 ближайших точек
7:38 PM Sergey: ближайших к чему?
me: к заданной точке
7:39 PM Sergey: в какой системе координат?
me: в любой, в n-мерном пространстве. В простом варианте - хотя
бы на земле/небе
7:40 PM это нужно для поиска похожих картинок, например.
навиный вариант повторять запросы - не катит
История разработки KNN
● TODO (http://www.sai.msu.su/~megera/wiki/TODO)
начало 2008 года, уже есть понимание что делать
● 25 июня 2009 года – письмо Paul Ramsey (POSTGIS)
● 10 июля 2009 года – контракт Open Planning Project Inc.
● 20 ноября 2009 года – патч KNNGiST v.0.1 (модуль расш)
● Commitfest nightmare
– 22 июля 2010 – KNNGiST (v.0.8), commitfest
– 13 сентября 2010 – KNNGiST (v.0.9)
– 03 декабря 2010 – Tom Lane committed for 9.1 !
– 21 января 2011 – contrib/btree_gist committed !
История разработки KNN
● Итого: На проект ушло больше 3 лет !
● Реальное программирование заняло несколько месяцев
● Основные причины:
– Отсутствие поддержки
● Слабая информационная связь разработчиков и заказчиков
– Занятость разработчиков
– Усложнение процедуры рассмотрения проектов в сообществе
Расписание CommitFest'ов и
релизов
https://commitfest.postgresql.org/
● 1-30 сентября 2015 : CF 1
● 1-30 ноября 2015 : CF 2
● 2 января — 8 февраля 2016 : CF 3
● 7 января 2016 : 9.5 Release
● 1-31 марта 2016 : Финальный CF для 9.6
● 8 апреля : Feature Freeze
● Июнь 2016 : 9.6 beta
● Сентябрь 2016 : 9.6 release
● 1-30 сентября 2016 : CF 1 для 9.7 ….
Что в PostgreSQL 9.5 ?
● Table Sample (SQL:2003)
● Grouping sets (многоуровневая группировка)
● BRIN-индексы
● UPSERT
● Row-Level Security
● Функции для JSONB
● SKIP LOCKED
● Параллельный VACUUM
● GiST Index Only Scans
● Abbreviated keys (ускорение сортировки)
Этоневсё
Table Sample
● Задача: получить выборку, достаточную для статистики.
SELECT avg(salary) FROM emp TABLESAMPLE SYSTEM (50);
SELECT avg(salary) FROM emp TABLESAMPLE BERNOULLI (50);
SELECT avg(salary) FROM emp TABLESAMPLE BERNOULLI (50)
REPEATABLE(100);
Агрегация выполняется не по всей таблице, а по 50%.
SYSTEM- постранично, Бернулли — по записям.
DELETE FROM emp TABLESAMPLE BERNOULLI (50);
Grouping Sets
Несколько группировок
за один запрос.
SELECT brand, size, sum(sales)
FROM items_sold
GROUP BY GROUPING SETS
((brand), (size), ());
brand | size | sum
---------------+------+-----
Большевичка | | 30
Трехгорная М | | 20
| L | 15
| M | 35
| | 50
(5 rows)
ROLLUP, CUBE
Удобные сокращения
для Grouping Sets
GROUPING SETS (
( x,y,z ),
( x,y),
( x ),
( )
)
ROLLUP (x,y,z)
CUBE (x,y,z) GROUPING SETS (
(x,y,z),
(x,y),
(x, z),
( y,z),
(x), (y), (z),
()
)
BRIN (Block Range) - индексы
Lossy!CREATE INDEX brin_index_test ON test_data
USING brin(id)
WITH (pages_per_range = 128);
● Индексируются не записи, а страницы. Внутри страницы —
sequence scan
● Хорошо подходит для append-only таблиц
● Быстро строится и занимает очень
мало места
● Ищет медленнее, чем B-Tree
BRIN (Block Range) - индексы
UPSERT (MERGE)
INSERT … ON CONFLICT ….
CREATE TABLE x (y INT PRIMARY KEY);
INSERT INTO x VALUES (1);
INSERT INTO x VALUES (1)
ON CONFLICT DO NOTHING;
INSERT INTO x VALUES (1)
ON CONFLICT DO UPDATE SET y=2;
UPSERT (MERGE)
CREATE TABLE x (id INT PRIMARY KEY, name TEXT);
INSERT INTO x VALUES (1, 'Веники');
INSERT INTO x VALUES (1, 'Вареники')
ON CONFLICT DO UPDATE SET name=EXCLUDED.name;
Row-Level Security
В postgresql.conf
row_security = on
CREATE TABLE orders (id INT, data TEXT, owner TEXT);
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY order_access ON orders FOR ALL TO PUBLIC
USING (owner = CURRENT_USER);
GRANT ALL ON TABLE orders TO PUBLIC;
Каждый пользователь увидит
только свои записи
Операторы и функции для JSONB
SELECT '{"x":2, "y":3}'::JSONB || '{"x":10}'::JSONB;
UPDATE t SET data = data || '{"key":"value"}'::JSONB;
?column?
-------------------
{"x": 10, "y": 3}
(1 row)
SKIP LOCKED
SELECT * FROM tasks FOR UPDATE;
--- Ждать
SELECT * FROM tasks FOR UPDATE NOWAIT;
--- Не ждать; ошибка, если есть блокировки
SELECT * FROM tasks FOR UPDATE SKIP LOCKED;
--- Не ждать; получить только незаблокированные
Ускорение сортировки
● Проблема: Сравнение в постгресе для типа text очень медленное,
используется strcoll(), которая учитывает локаль, но в 1000 раз
медленнее, чем сравнение целых чисел.
● Abbreviated keys (укороченные ключи) для сортировки character(n),
bytea, uuid, numeric (Peter Geoghegan):
– ГРУБО: Строки преобразуются в бинарные ключи
strxfrm()),сравниваются первые 8 байт как целые числа, если
эти 8 байт одинаковые, то вызываем strcoll()
● Великолепный доклад Greg Stark «Sorting through the ages»
https://pgconf.ru/media/2016/02/19/9%20%D0%A1%D1%82%D0%B
0%D1%80%D0%BA.pdf
Ускорение сортировки
Ускорение сортировки
Ускорение сортировки
● Однако, не все так просто. В некоторых версиях glibc strcoll() не «матчит» strxfrm(),
поэтому использование abbreviated keys может приводить к проблемам, например, к
«битым» индексам.
● Например, проблема есть в
– Debian 6.0.1
– CentOS release 6.7 (Final)
● Описание проблемы
http://www.postgresql.org/message-id/111D0E27-A8F3-4A84-A4E0-B0FB703863DF@s24
.com
commit 8aa6e97805a79eb30ac9c36acb1126280c2ffbdfESC[m
Author: Robert Haas <rhaas@postgresql.org>
Date: Wed Mar 23 15:58:34 2016 -0400
Disable abbreviated keys for string-sorting in non-C locales.
Unfortunately, every version of glibc thus far tested has bugs whereby
strcoll() ordering does not match strxfrm() ordering as required by
the standard. This can result in, for example, corrupted indexes.
Disabling abbreviated keys in these cases slows down non-C-collation
string sorting considerably, but there seems to be no practical
alternative. Users who are confident that their libc implementations
are solid in this regard can re-enable the optimization by compiling
with TRUST_STRXFRM.
Users who have built indexes using PostgreSQL 9.5 or PostgreSQL 9.5.1
should REINDEX if there is a possibility that they may have been
affected by this problem.
Report by Marc-Olaf Jaschke. Investigation mostly by Tom Lane, with
help from Peter Geoghegan, Noah Misch, Stephen Frost, and me. Patch
by me, reviewed by Peter Geoghegan and Tom Lane.
Ускорение сортировки
● Что же делать нам с нашей локалью !!??
● Postgres Pro имеет поддержку ICU (--with-icu) для обеспечения системо-
независимой локали (важно для 1С, в частности). ICU быстрее и обеспечивает
корректную работу abbreviated keys.
● Пример Роберта Хааса из
http://www.postgresql.org/message-id/CA+TgmoaTiYy9aaMRe7m71Z=mrNZ_aPqepspQ
HtSNHq8Wiafjow@mail.gmail.com
Ускорение сортировки
create table stuff as select random()::text as a, 'filler
filler filler'::text as b, g as c from generate_series(1, 1000000) g;
create index on stuff (a);
Pgpro 9.5.0.1 (--with icu) Vanilla REL9_5_STABLE (no abbrev.)
2.3 sec 30 sec
Эффект abbreviated keys не должен быть заметен:
create table stuff as select 'aaaaaaaa' || random()::text as
a, 'filler filler filler'::text as b, g as c from generate_series(1,
1000000) g;
Pgpro 9.5.0.1 (--with icu) Vanilla REL9_5_STABLE (no abbrev.)
11.4 sec 32 sec
Ускорение сортировки
Используйте
Postgres Pro !
Ускорение 15x
Что такое Postgres Pro ?
1.Российский форк PostgreSQL, вошедший в Реестр
Российского ПО
2.Наши разработки ядра PostgreSQL, которые ещё не успели
войти в релиз, но закоммичены в апстрим
3.Бэкпорты из 9.6, которые мы считаем полезными
4.Полезные расширения (не только наши)
5.Возможность оперативно реагировать на запросы клиентов
Postgres Pro предоставляет доступ к новой функциональности и улучшениям
раньше, и позволяет быстрее реагировать на запросы клиентов
Что еще есть в Postgres Pro ?
● Увеличение производительности на многоядерных системах:
● Улучшение полнотекстового поиска:
поиск фраз, словарь=extension,
словари в shared memory
● Покрывающие индексы. Поддержка конструкции INCLUDES в
CREATE INDEX. https://pgconf.ru/2016/89847
● Переносимость: ICU
● Модуль pg_trgm: нечеткий поиск подстроки
● Модуль pageinspect: доступ к внутреннему представлению данных
● Модуль sr_plan: сохранение планов запросов
● Модуль dump_stat: дамп и восстановление статистики
● Модуль JSQuery
● Мониторинг ожиданий (WAIT-мониторинг с сэмплингом)
● Libpq с поддержкой failover
Скоро в Postgres Pro (9.5.*)
● Секционирование таблиц без накладных расходов
● Инкрементальный бэкап на уровне блоков
● Компрессия B-Tree индексов
● Миллисекундный полнотекстовый поиск (на основе CREATE
ACCESS METHOD и Custom WAL)
https://wiki.postgresql.org/images/2/25/Full-text_search_in_PostgreSQL_in_milliseconds
-extended-version.pdf
● Мониторинг ожиданий
http://akorotkov.github.io/blog/2016/08/26/wait_monitoring_9_6/ ,
http://www.postgresql.org/docs/devel/static/monitoring-stats.html#WAIT-EVENT-TABLE
Секционирование
Секционирование
Уже сделано в Postgres Pro (расширение pathman):
● Хранение метаданных секций
● Бинарный поиск по ним при планировании запроса
● RANGE partitioning
До сих пор:
● Делается через наследование таблиц (мега-костыль ?)
● Работает неэффективно
Секционирование (планы на 9.6)
● Выбор секций во время выполнения запроса
● Упорядоченная выдача выборок из секций для
ускорения Merge join и сортировки.
● Оптимизация Hash join при секционировании по
ключу JOIN
● LIST-partitioning
● HASH-partitioning
● Поддержка декларативного синтаксиса
Секционирование
Время планирования
при попадании в план
одной секции.
Обычная реализация на
основе наследования
таблиц страдает
большими накладными
расходами.
Pathman — свободен от
них.
Секционирование
Производительность
SELECT, INSERT, UPDATE
pg_partman — основан на
наследовании таблиц
pg_pathman — разработка
Postgres Pro
https://pgconf.ru/2016/89633
http://akorotkov.github.io/blog/cat
egories/partitioning/
http://postgrespro.ru/blog/pgsql
/pg_pathman
Планы Postgres Pro
● Компрессия данных
● Система управления кластером СУБД
● Упрощение миграции с Oracle
● Пакеты, автономные транзакции, глобальные переменные
● Улучшение мониторинга
● Частичный бэкап и восстановление
● JIT-компиляция SQL-запросов. Использование GPU.
● InMemory и колоночные хранилища
● Совершенствование кластера
Что ждёт нас «завтра» (9.6)?
● Параллельное исполнение запроса
– Seqscan
– Join
– Aggregates
– Explain analyze показывает информацию по каждому
воркеру
– Parallel create GIN index ?
– FDW pushdown
Завтра. Параллельный seqscan
Завтра. Параллельная агрегация
Завтра (9.6). Расширяемость
● Create access method
● Custom WAL records ?
Можно будет создавать полноценные методы доступа
как расширения !
Завтра (9.6). DBA
● Немного счастья для DBA
– VACUUM FREEZE не будет трогать уже «замороженные»
блоки — сильное облегчение для больших и нагруженных
проектов
– idle_in_transaction_session_timeout - решает проблему «idle in
transaction"
– a generic command progress reporting facility
– simple VACUUM progress reporting — можно следить за
выполнением вакуума pg_stat_progress_vacuum.
Завтра (9.6). DBA
Представление
pg_config
● Wait monitoring
● pg_wait_sampling (http://akorotkov.github.io/blog/2016/08/26/wait_monitoring_9_6/)
Завтра (9.6) ….
● ev — редактирование представлений
● sv — показ
● KNN для CUBE
● TSVECTOR EDITING FUNCTIONS
convert tsvector to/from text array, set weight for given lexemes, delete
lexeme(s), unnest, filter lexemes with given weights
● Улучшена поддержка словарей
● Поиск фраз ?
● Covering indexes ?
● Btree-compression ?
● Масштабирование на большое количество ядер ?
Что будет в «10.0» (в работе)
● BDR — двунаправленная репликация
http://2ndquadrant.com/en/resources/bdr/
● Pglogical (5x быстрее slony, londiste3)
http://2ndquadrant.com/en/resources/pglogical/
● Declarative partitioning (+pg_pathman)
● Highly Available multi-master
● Инкрементальный бэкап
● Миллисекундный полнотекстовый поиск
● In-memory
50 способов помочь сообществу
50 способов помочь сообществу
Ядро
Разработка, review, тестирование, reporting
bugs
Экосистема
Расширения, драйверы, ORM, средства
мониторинга… поддержка Pg в
прикладном ПО
Создание дистрибутивов, пакетирование
Документация
Улучшение, перевод, публикация статей,
книг, учебных, маркетинговых
материалов…блоггинг!
Расскажите о своей истории с PostgreSQL!
Общение, образование
Создание локальных
сообществ
Проведение конференций,
митапов, семинаров, учебных
курсов.
Внедрите PostgreSQL!
В Вашей компании. Запустите
учебный курс в Вашем ВУЗе
Спонсорство
Спонсируйте разработку
нужной Вам
функциональности.
Спонсируйте мероприятие.
СПАСИБО ЗА ВНИМАНИЕ !
info@postgrespro.ru
jobs@postgrespro.ru
sales@postgrespro.ru
www.postgrespro.ru

More Related Content

What's hot

Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
Badoo Development
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Ontico
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Ontico
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на SphinxRoman Pavlushko
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Ontico
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
Badoo Development
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
Nikolay Samokhvalov
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
Python Meetup
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 

What's hot (20)

Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 

Viewers also liked

Дмитрий Кулижников
Дмитрий КулижниковДмитрий Кулижников
Дмитрий Кулижников
CodeFest
 
Евгений Брянцев
Евгений БрянцевЕвгений Брянцев
Евгений Брянцев
CodeFest
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
CodeFest
 
Вадим Макеев
Вадим МакеевВадим Макеев
Вадим Макеев
CodeFest
 
Роман Янке
Роман ЯнкеРоман Янке
Роман Янке
CodeFest
 
Саша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковСаша Гладких и Андрей Старков
Саша Гладких и Андрей Старков
CodeFest
 
Jan Jongboom
Jan JongboomJan Jongboom
Jan Jongboom
CodeFest
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
CodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
CodeFest
 
Иван Фролков
Иван ФролковИван Фролков
Иван Фролков
CodeFest
 
Павел Мочалкин
Павел МочалкинПавел Мочалкин
Павел Мочалкин
CodeFest
 
Денис Запорожан
Денис ЗапорожанДенис Запорожан
Денис Запорожан
CodeFest
 
Антон Шаяхов
Антон ШаяховАнтон Шаяхов
Антон Шаяхов
CodeFest
 
Michael Widenius
Michael WideniusMichael Widenius
Michael Widenius
CodeFest
 
Андрей Светлов
Андрей СветловАндрей Светлов
Андрей Светлов
CodeFest
 
Денис Башев
Денис БашевДенис Башев
Денис Башев
CodeFest
 
Kristian Karl
Kristian KarlKristian Karl
Kristian Karl
CodeFest
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
CodeFest
 
Иван Величко
Иван ВеличкоИван Величко
Иван Величко
CodeFest
 
Анатолий Шарифулин
Анатолий ШарифулинАнатолий Шарифулин
Анатолий Шарифулин
CodeFest
 

Viewers also liked (20)

Дмитрий Кулижников
Дмитрий КулижниковДмитрий Кулижников
Дмитрий Кулижников
 
Евгений Брянцев
Евгений БрянцевЕвгений Брянцев
Евгений Брянцев
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
Вадим Макеев
Вадим МакеевВадим Макеев
Вадим Макеев
 
Роман Янке
Роман ЯнкеРоман Янке
Роман Янке
 
Саша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковСаша Гладких и Андрей Старков
Саша Гладких и Андрей Старков
 
Jan Jongboom
Jan JongboomJan Jongboom
Jan Jongboom
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Иван Фролков
Иван ФролковИван Фролков
Иван Фролков
 
Павел Мочалкин
Павел МочалкинПавел Мочалкин
Павел Мочалкин
 
Денис Запорожан
Денис ЗапорожанДенис Запорожан
Денис Запорожан
 
Антон Шаяхов
Антон ШаяховАнтон Шаяхов
Антон Шаяхов
 
Michael Widenius
Michael WideniusMichael Widenius
Michael Widenius
 
Андрей Светлов
Андрей СветловАндрей Светлов
Андрей Светлов
 
Денис Башев
Денис БашевДенис Башев
Денис Башев
 
Kristian Karl
Kristian KarlKristian Karl
Kristian Karl
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
 
Иван Величко
Иван ВеличкоИван Величко
Иван Величко
 
Анатолий Шарифулин
Анатолий ШарифулинАнатолий Шарифулин
Анатолий Шарифулин
 

Similar to Олег Бартунов и Иван Панченко

SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationNikolay Samokhvalov
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.
MageCloud
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
Rais Charipov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Yandex
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014it-people
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
Andrey Akinshin
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Ontico
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
Anastasia Lubennikova
 

Similar to Олег Бартунов и Иван Панченко (20)

SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 

More from CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
CodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
CodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
CodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
CodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
CodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
CodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
CodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
CodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
CodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
CodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
CodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
CodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
CodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
CodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
CodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
CodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
CodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
CodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
CodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
CodeFest
 

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Олег Бартунов и Иван Панченко

  • 2. Основные форки PostgreSQL 2002 2006 2010 2012 20142004 2008 Aster Data Terradata TruCQ Cisco Greenplum Enterprise Postgres Fujtsu GresCube HadoopDB Hadapt Terradata Netezza IBM TelegraphCQ ParAccel Red Shift Amazon PipelineDB Postgres-XC Postgres-XL BDR 2ndQuadrant PowerGres RecDB Vertica HP EnterpriseDB Yahoo! Everest 2015 Коммерческая СУБД СПО https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases Postgres-X2 Greenplum CitusDB 2016 Postgres Pro CitusDB
  • 4. Разработка ядра PostgreSQL: ЖЕСТЬ ! ● Идея должна быть понятной сообществу и одобрена («правильный» use-case) ● Методы и подходы должны быть обсуждены (PR, поиск спонсоров) ● Вы должны успеть подать на коммитфест до “feature freeze” ● Реализация должна пройти коммитфест ● Всегда найдется “умник”, которому не понравится ● Вид вашего кода – отступы, trailing white-spaces ● Названия переменных и функций ● Отсутствие должного количества комментариев, документации ● Ваша медленная реакция на замечания
  • 5. История разработки KNN ● Начало проекта - Sep 8, 2007 at 7:54 PM date Sat, Sep 8, 2007 at 7:54 PM subject Chat with Sergey V. Karpov 7:36 PM me: я тут knn-search занимаюсь, масса интересного. Все думаю, как в постгресе это поиметь Sergey: а что это такое? 7:37 PM me: k-nearest соседей - супер важная задача найти 5 ближайших точек 7:38 PM Sergey: ближайших к чему? me: к заданной точке 7:39 PM Sergey: в какой системе координат? me: в любой, в n-мерном пространстве. В простом варианте - хотя бы на земле/небе 7:40 PM это нужно для поиска похожих картинок, например. навиный вариант повторять запросы - не катит
  • 6. История разработки KNN ● TODO (http://www.sai.msu.su/~megera/wiki/TODO) начало 2008 года, уже есть понимание что делать ● 25 июня 2009 года – письмо Paul Ramsey (POSTGIS) ● 10 июля 2009 года – контракт Open Planning Project Inc. ● 20 ноября 2009 года – патч KNNGiST v.0.1 (модуль расш) ● Commitfest nightmare – 22 июля 2010 – KNNGiST (v.0.8), commitfest – 13 сентября 2010 – KNNGiST (v.0.9) – 03 декабря 2010 – Tom Lane committed for 9.1 ! – 21 января 2011 – contrib/btree_gist committed !
  • 7. История разработки KNN ● Итого: На проект ушло больше 3 лет ! ● Реальное программирование заняло несколько месяцев ● Основные причины: – Отсутствие поддержки ● Слабая информационная связь разработчиков и заказчиков – Занятость разработчиков – Усложнение процедуры рассмотрения проектов в сообществе
  • 8. Расписание CommitFest'ов и релизов https://commitfest.postgresql.org/ ● 1-30 сентября 2015 : CF 1 ● 1-30 ноября 2015 : CF 2 ● 2 января — 8 февраля 2016 : CF 3 ● 7 января 2016 : 9.5 Release ● 1-31 марта 2016 : Финальный CF для 9.6 ● 8 апреля : Feature Freeze ● Июнь 2016 : 9.6 beta ● Сентябрь 2016 : 9.6 release ● 1-30 сентября 2016 : CF 1 для 9.7 ….
  • 9. Что в PostgreSQL 9.5 ? ● Table Sample (SQL:2003) ● Grouping sets (многоуровневая группировка) ● BRIN-индексы ● UPSERT ● Row-Level Security ● Функции для JSONB ● SKIP LOCKED ● Параллельный VACUUM ● GiST Index Only Scans ● Abbreviated keys (ускорение сортировки) Этоневсё
  • 10. Table Sample ● Задача: получить выборку, достаточную для статистики. SELECT avg(salary) FROM emp TABLESAMPLE SYSTEM (50); SELECT avg(salary) FROM emp TABLESAMPLE BERNOULLI (50); SELECT avg(salary) FROM emp TABLESAMPLE BERNOULLI (50) REPEATABLE(100); Агрегация выполняется не по всей таблице, а по 50%. SYSTEM- постранично, Бернулли — по записям. DELETE FROM emp TABLESAMPLE BERNOULLI (50);
  • 11. Grouping Sets Несколько группировок за один запрос. SELECT brand, size, sum(sales) FROM items_sold GROUP BY GROUPING SETS ((brand), (size), ()); brand | size | sum ---------------+------+----- Большевичка | | 30 Трехгорная М | | 20 | L | 15 | M | 35 | | 50 (5 rows)
  • 12. ROLLUP, CUBE Удобные сокращения для Grouping Sets GROUPING SETS ( ( x,y,z ), ( x,y), ( x ), ( ) ) ROLLUP (x,y,z) CUBE (x,y,z) GROUPING SETS ( (x,y,z), (x,y), (x, z), ( y,z), (x), (y), (z), () )
  • 13. BRIN (Block Range) - индексы Lossy!CREATE INDEX brin_index_test ON test_data USING brin(id) WITH (pages_per_range = 128); ● Индексируются не записи, а страницы. Внутри страницы — sequence scan ● Хорошо подходит для append-only таблиц ● Быстро строится и занимает очень мало места ● Ищет медленнее, чем B-Tree
  • 14. BRIN (Block Range) - индексы
  • 15. UPSERT (MERGE) INSERT … ON CONFLICT …. CREATE TABLE x (y INT PRIMARY KEY); INSERT INTO x VALUES (1); INSERT INTO x VALUES (1) ON CONFLICT DO NOTHING; INSERT INTO x VALUES (1) ON CONFLICT DO UPDATE SET y=2;
  • 16. UPSERT (MERGE) CREATE TABLE x (id INT PRIMARY KEY, name TEXT); INSERT INTO x VALUES (1, 'Веники'); INSERT INTO x VALUES (1, 'Вареники') ON CONFLICT DO UPDATE SET name=EXCLUDED.name;
  • 17. Row-Level Security В postgresql.conf row_security = on CREATE TABLE orders (id INT, data TEXT, owner TEXT); ALTER TABLE orders ENABLE ROW LEVEL SECURITY; CREATE POLICY order_access ON orders FOR ALL TO PUBLIC USING (owner = CURRENT_USER); GRANT ALL ON TABLE orders TO PUBLIC; Каждый пользователь увидит только свои записи
  • 18. Операторы и функции для JSONB SELECT '{"x":2, "y":3}'::JSONB || '{"x":10}'::JSONB; UPDATE t SET data = data || '{"key":"value"}'::JSONB; ?column? ------------------- {"x": 10, "y": 3} (1 row)
  • 19. SKIP LOCKED SELECT * FROM tasks FOR UPDATE; --- Ждать SELECT * FROM tasks FOR UPDATE NOWAIT; --- Не ждать; ошибка, если есть блокировки SELECT * FROM tasks FOR UPDATE SKIP LOCKED; --- Не ждать; получить только незаблокированные
  • 20. Ускорение сортировки ● Проблема: Сравнение в постгресе для типа text очень медленное, используется strcoll(), которая учитывает локаль, но в 1000 раз медленнее, чем сравнение целых чисел. ● Abbreviated keys (укороченные ключи) для сортировки character(n), bytea, uuid, numeric (Peter Geoghegan): – ГРУБО: Строки преобразуются в бинарные ключи strxfrm()),сравниваются первые 8 байт как целые числа, если эти 8 байт одинаковые, то вызываем strcoll() ● Великолепный доклад Greg Stark «Sorting through the ages» https://pgconf.ru/media/2016/02/19/9%20%D0%A1%D1%82%D0%B 0%D1%80%D0%BA.pdf
  • 23. Ускорение сортировки ● Однако, не все так просто. В некоторых версиях glibc strcoll() не «матчит» strxfrm(), поэтому использование abbreviated keys может приводить к проблемам, например, к «битым» индексам. ● Например, проблема есть в – Debian 6.0.1 – CentOS release 6.7 (Final) ● Описание проблемы http://www.postgresql.org/message-id/111D0E27-A8F3-4A84-A4E0-B0FB703863DF@s24 .com
  • 24. commit 8aa6e97805a79eb30ac9c36acb1126280c2ffbdfESC[m Author: Robert Haas <rhaas@postgresql.org> Date: Wed Mar 23 15:58:34 2016 -0400 Disable abbreviated keys for string-sorting in non-C locales. Unfortunately, every version of glibc thus far tested has bugs whereby strcoll() ordering does not match strxfrm() ordering as required by the standard. This can result in, for example, corrupted indexes. Disabling abbreviated keys in these cases slows down non-C-collation string sorting considerably, but there seems to be no practical alternative. Users who are confident that their libc implementations are solid in this regard can re-enable the optimization by compiling with TRUST_STRXFRM. Users who have built indexes using PostgreSQL 9.5 or PostgreSQL 9.5.1 should REINDEX if there is a possibility that they may have been affected by this problem. Report by Marc-Olaf Jaschke. Investigation mostly by Tom Lane, with help from Peter Geoghegan, Noah Misch, Stephen Frost, and me. Patch by me, reviewed by Peter Geoghegan and Tom Lane.
  • 25. Ускорение сортировки ● Что же делать нам с нашей локалью !!?? ● Postgres Pro имеет поддержку ICU (--with-icu) для обеспечения системо- независимой локали (важно для 1С, в частности). ICU быстрее и обеспечивает корректную работу abbreviated keys. ● Пример Роберта Хааса из http://www.postgresql.org/message-id/CA+TgmoaTiYy9aaMRe7m71Z=mrNZ_aPqepspQ HtSNHq8Wiafjow@mail.gmail.com
  • 26. Ускорение сортировки create table stuff as select random()::text as a, 'filler filler filler'::text as b, g as c from generate_series(1, 1000000) g; create index on stuff (a); Pgpro 9.5.0.1 (--with icu) Vanilla REL9_5_STABLE (no abbrev.) 2.3 sec 30 sec Эффект abbreviated keys не должен быть заметен: create table stuff as select 'aaaaaaaa' || random()::text as a, 'filler filler filler'::text as b, g as c from generate_series(1, 1000000) g; Pgpro 9.5.0.1 (--with icu) Vanilla REL9_5_STABLE (no abbrev.) 11.4 sec 32 sec
  • 28. Что такое Postgres Pro ? 1.Российский форк PostgreSQL, вошедший в Реестр Российского ПО 2.Наши разработки ядра PostgreSQL, которые ещё не успели войти в релиз, но закоммичены в апстрим 3.Бэкпорты из 9.6, которые мы считаем полезными 4.Полезные расширения (не только наши) 5.Возможность оперативно реагировать на запросы клиентов Postgres Pro предоставляет доступ к новой функциональности и улучшениям раньше, и позволяет быстрее реагировать на запросы клиентов
  • 29. Что еще есть в Postgres Pro ? ● Увеличение производительности на многоядерных системах: ● Улучшение полнотекстового поиска: поиск фраз, словарь=extension, словари в shared memory ● Покрывающие индексы. Поддержка конструкции INCLUDES в CREATE INDEX. https://pgconf.ru/2016/89847 ● Переносимость: ICU ● Модуль pg_trgm: нечеткий поиск подстроки ● Модуль pageinspect: доступ к внутреннему представлению данных ● Модуль sr_plan: сохранение планов запросов ● Модуль dump_stat: дамп и восстановление статистики ● Модуль JSQuery ● Мониторинг ожиданий (WAIT-мониторинг с сэмплингом) ● Libpq с поддержкой failover
  • 30. Скоро в Postgres Pro (9.5.*) ● Секционирование таблиц без накладных расходов ● Инкрементальный бэкап на уровне блоков ● Компрессия B-Tree индексов ● Миллисекундный полнотекстовый поиск (на основе CREATE ACCESS METHOD и Custom WAL) https://wiki.postgresql.org/images/2/25/Full-text_search_in_PostgreSQL_in_milliseconds -extended-version.pdf ● Мониторинг ожиданий http://akorotkov.github.io/blog/2016/08/26/wait_monitoring_9_6/ , http://www.postgresql.org/docs/devel/static/monitoring-stats.html#WAIT-EVENT-TABLE
  • 32. Секционирование Уже сделано в Postgres Pro (расширение pathman): ● Хранение метаданных секций ● Бинарный поиск по ним при планировании запроса ● RANGE partitioning До сих пор: ● Делается через наследование таблиц (мега-костыль ?) ● Работает неэффективно
  • 33. Секционирование (планы на 9.6) ● Выбор секций во время выполнения запроса ● Упорядоченная выдача выборок из секций для ускорения Merge join и сортировки. ● Оптимизация Hash join при секционировании по ключу JOIN ● LIST-partitioning ● HASH-partitioning ● Поддержка декларативного синтаксиса
  • 34. Секционирование Время планирования при попадании в план одной секции. Обычная реализация на основе наследования таблиц страдает большими накладными расходами. Pathman — свободен от них.
  • 35. Секционирование Производительность SELECT, INSERT, UPDATE pg_partman — основан на наследовании таблиц pg_pathman — разработка Postgres Pro https://pgconf.ru/2016/89633 http://akorotkov.github.io/blog/cat egories/partitioning/ http://postgrespro.ru/blog/pgsql /pg_pathman
  • 36. Планы Postgres Pro ● Компрессия данных ● Система управления кластером СУБД ● Упрощение миграции с Oracle ● Пакеты, автономные транзакции, глобальные переменные ● Улучшение мониторинга ● Частичный бэкап и восстановление ● JIT-компиляция SQL-запросов. Использование GPU. ● InMemory и колоночные хранилища ● Совершенствование кластера
  • 37. Что ждёт нас «завтра» (9.6)? ● Параллельное исполнение запроса – Seqscan – Join – Aggregates – Explain analyze показывает информацию по каждому воркеру – Parallel create GIN index ? – FDW pushdown
  • 40. Завтра (9.6). Расширяемость ● Create access method ● Custom WAL records ? Можно будет создавать полноценные методы доступа как расширения !
  • 41. Завтра (9.6). DBA ● Немного счастья для DBA – VACUUM FREEZE не будет трогать уже «замороженные» блоки — сильное облегчение для больших и нагруженных проектов – idle_in_transaction_session_timeout - решает проблему «idle in transaction" – a generic command progress reporting facility – simple VACUUM progress reporting — можно следить за выполнением вакуума pg_stat_progress_vacuum.
  • 43. ● Wait monitoring ● pg_wait_sampling (http://akorotkov.github.io/blog/2016/08/26/wait_monitoring_9_6/)
  • 44. Завтра (9.6) …. ● ev — редактирование представлений ● sv — показ ● KNN для CUBE ● TSVECTOR EDITING FUNCTIONS convert tsvector to/from text array, set weight for given lexemes, delete lexeme(s), unnest, filter lexemes with given weights ● Улучшена поддержка словарей ● Поиск фраз ? ● Covering indexes ? ● Btree-compression ? ● Масштабирование на большое количество ядер ?
  • 45. Что будет в «10.0» (в работе) ● BDR — двунаправленная репликация http://2ndquadrant.com/en/resources/bdr/ ● Pglogical (5x быстрее slony, londiste3) http://2ndquadrant.com/en/resources/pglogical/ ● Declarative partitioning (+pg_pathman) ● Highly Available multi-master ● Инкрементальный бэкап ● Миллисекундный полнотекстовый поиск ● In-memory
  • 46. 50 способов помочь сообществу
  • 47. 50 способов помочь сообществу Ядро Разработка, review, тестирование, reporting bugs Экосистема Расширения, драйверы, ORM, средства мониторинга… поддержка Pg в прикладном ПО Создание дистрибутивов, пакетирование Документация Улучшение, перевод, публикация статей, книг, учебных, маркетинговых материалов…блоггинг! Расскажите о своей истории с PostgreSQL! Общение, образование Создание локальных сообществ Проведение конференций, митапов, семинаров, учебных курсов. Внедрите PostgreSQL! В Вашей компании. Запустите учебный курс в Вашем ВУЗе Спонсорство Спонсируйте разработку нужной Вам функциональности. Спонсируйте мероприятие.
  • 48. СПАСИБО ЗА ВНИМАНИЕ ! info@postgrespro.ru jobs@postgrespro.ru sales@postgrespro.ru www.postgrespro.ru