- PVSM.RU - https://www.pvsm.ru -

Мир магии PostgreSQL: интервью с Николаем Самохваловым

Сегодня мы поговорим с Николаем, «борцом» за продвижение новых технологий в мире БД, членом нашего программного коммитета и активным участником всевозможных конференций. Главные темы — самоуправляемые СУБД, DBA AI, облака, NoSQL, встроенные механизмы контроля БД, доклады на РИТ++ и HighLoad++ Siberia, а также масса дельных советов и примеров, которые могут пригодится в реальной работе как разработчику, так и DBA.

Мир магии PostgreSQL: интервью с Николаем Самохваловым - 1

— Расскажи немного о себе. Что заканчивал, с чего начинал и чем занимаешься сейчас?

Физтех, ФУПМ выпуска 2004, кафедра ИСП РАН. В далеком 2005 месте с небольшой командой разработчиков из МФТИ и МГУ создал исторически первую соцсеть МойКруг, а потом ещё несколько социальных сетевых проектов.

В 2006-2007 годах поучаствовал в создании типа данных XML для Postgres, тогда же начал проводить постгресовые митапы (не было тогда еще такого слова) в Москве. Теперь это превратилось в русскоязычную группу #RuPostgres [1], представленную на площадках Meetup.com и YouTube. На Meetup.com мы, кстати, вторые по численности среди всех постгресовых сообществ в мире, более 1600 участников — опередили группу SF Bay Area, но уступаем Нью-Йорку.

Сейчас базируюсь в Долине, регулярно бываю в Москве. Помогаю компаниям получать максимум от Postgres, все чаще — в облаках Amazon и Google.

— На чем сейчас сфокусировано твое внимание в контексте работы с данными?

Одна из самых горячих тем в мире баз данных сегодня — самоуправляемые СУБД. Oracle с прошлого года активно «топит» за то, что их СУБД в облаках автономна [2] и не нуждается в «водителе» (DBA), а митапы с изобретателем понятия self-driving databases и создателем СУБД Peloton [3] профессором Carnegie Mellon University Andy Pavlo [4] собирают [5] по 200+ человек. Кстати, он недавно принял наше приглашение и приедет [6] на Highload++ 2018.

Тем временем Постгрес, будучи, конечно же, лучшей СУБД с открытым исходным кодом и обладая безумно растущей [7] популярностью [8], сейчас требует огромного количества знаний и ручных действий при эксплуатации.

Я уверен, что в ближайшие годы ситуация изменится к лучшему. Появятся более понятные и автоматизированные инструменты, помогающие и DBA, и разработчикам. Разовьются средства автоматизации тюнинга БД и оптимизации запросов.

— То есть DBA сейчас должен обладать обширными знаниями по различным направлениям? Реальная работа выходит за рамки знаний БД?

Деятельность DBA далеко не тривиальна. Внутри и вокруг БД всегда есть огромное количество служебных данных: внутренняя статистика, логи, показатели мониторинга. Чтобы найти самые узкие места производительности, надо уметь быстро разбираться в куче чисел, а это требует большого количество знаний и опыта. При оценке работы грамотного DBA я часто слышу фразы «чёрная магия», «отличная интуиция». Хотя на самом деле у такого DBA на вооружении прежде всего большой багаж знаний и многие годы опыта.

И в то же время работа DBA сейчас — это чисто ручные действия! Например: нашли самый «тормозной» запрос в pg_stat_statements [9]. Но чтобы его оптимизировать, вам нужен конкретный запрос с конкретными параметрами — ведь от этого зависит и план выполнения, и скорость запроса, и EXPLAIN без них вы не прогоните (ситуация немного улучшится в Постгрес 12, если будет принят патч от ПостгресПро [10]). И что же сейчас делает DBA? Одно из двух: или лезет в логи откапывать конкретные примеры запросов, или же «высасывает из пальца» какие-то значения, оптимизируя в итоге сферического коня в вакууме. Последний вариант хорошо сработает, только если за плечами годы опыта. Если есть «интуиция».

А дальше, когда подобрано конкретное решение, устраняющее проблему, — скажем, надо добавить какой-то индекс — происходит еще более забавная штука. Если DBA опытный и с доступом к «проду», то он, возможно, прямо «на проде» и отладится, и даже индекс создаст вручную. Минуя git, да. Если же «ну прям очень надо» проекту провести DDL через git, то индекс получит название типа i_tmp_killme, а разработчикам будет предложено добавить в систему миграции и отрелизить индекс с уже более вменяемым названием.

Если у DBA авторитет зашкаливает, покорные разработчики и вопросов не будут задавать. Но в компаниях с хорошей культурой git flow, code review, devops и любознательными разработчиками необходимо заранее, до каких-то реальных действий с «боевыми» БД объяснять, почему именно такой индекс выбран, как конкретно он ускоряет запрос. В Долине, кстати, разработчики довольно часто попадаются дотошные, им всё надо разжевать, обосновать. И тут очень выручают облака. Это очень удобно — в пару кликов создать реплику боевой БД в AWS RDS, на ней прогнать `explain (analyze, buffers)` в разных вариантах, найти наилучшее решение и представить его разработчикам с конкретными оценками улучшения производительности и детальной диагностикой. В RDS отлично автоматизировали процессы создания БД, но от массы ручных действий по оптимизации запросов и тюнингу БД RDS никак не избавляет — эксплейны за вас никто (пока!) не прогонит и объяснения разработчикам не представит.

В итоге работа Postgres DBA сейчас выглядит как управление прекрасным скоростным болидом с ручной коробкой передач. Вы любите ездить «на ручке»? Я — да, но только не каждый день.

— Фактически ты кратко описал начало алгоритма действий для поиска проблемных запросов. Данные знания могут служить основой создания новых полезных «надстроек»?

Верно. Именно поэтому область моих интересов сейчас — это DBA AI. Искусственный интеллект, помогающий «готовить» Postgres быстро и эффективно, без чисто ручных действий, в больших и растущих масштабах (как правило, в облаках). Такого в природе пока нет, но работы в этом направлении уже ведутся (одна из интересных, хотя и пока сугубо исследовательских разработок — уже упомянутая Peloton [3]).

— На РИТ++ 2017, выступая с докладом Database First! О распространённых ошибках использования РСУБД [11], ты говорил, что СУБД — это сердце IT системы, неиспользование возможностей БД — это глупость. Какие примеры ты можешь привести в поддержку своих слов? Прежде всего интересуют факты, когда именно использование стандартных механизмов контроля БД помогло избежать ошибок или наоборот, когда не использование стандартных фич привело к плачевным результатам? Например, отсутствие FK и, возможно, другие, на первый взгляд, обычные механизмы.

В том же докладе я утверждал, что «плачевные результаты» наблюдаются в большинстве проектов, в которых поддержка целостности и «чистоты» данных вынесена из СУБД и реализована на стороне приложения — на PHP, Ruby, Python или на чём-то ещё. По мере того как такой проект накапливает данные, собираются и «грязные данные» — такие как «строки-сироты» (не стали использовать внешние ключи, удалили пользователей, а приписанные им данные удалить забыли), дубликаты (не реализована или некорректно реализована проверка на уникальность на стороне приложения), недопустимые или ошибочные значения. Другой вопрос — как вы относитесь к таким проблемам. Если это небольшой блог, то, может быть, большой беды и нет. Но если это система биллинга… Как только вы «уносите» проверку данных за пределы СУБД, вы допускаете возможность, что появится кто-то (человек или программа), кто эту проверку обойдет. Не говоря уже о том, что ваша реализация проверок может быть далека от идеала.

Так что полезно знать и применять доступные в СУБД возможности поддержки ограничений целостности данных. Их всего несколько: поддержка уникальных значений (на практике реализуется с помощью уникального индекса), внешние ключи, пользовательские ограничения (то, что достигается использованием ключевого слова CHECK), запрет значений NULL, а в Постгресе еще специальные exclusion constraints [12], с помощью которых удобно обеспечивать, например, непересекаемость интервалов.

Использование подходящих типов данных тоже является важным инструментом обеспечения чистоты данных. Простой пример. Очевидная и очень частая ошибка: использование типа данных text (varchar) для хранения электронных адресов в столбце и навешивание обычного уникального индекса на столбец. Для email-ов нам, конечно, нужны регистронезависимые проверки, поэтому тут лучше подойдет тип данных citext (его нет «в коробке», зато есть расширение citext, доступное в большинстве инсталляций Постгреса) или же навешивание функционального индекса типа `create index … using btree(lower(email))`. Кстати, в последнем случае не забудьте перестроить статистику (`vacuum analyze …`), чтобы postgres осознал, какое распределение в таблице имеют значения выражения `lower(email)`.

Кроме грамотного использования типов данных и поддержки разных видов ограничений целостности СУБД позволяет реализовывать сложную логику проверки данных — например для случаев, когда надо при модификации данных в одной таблице сделать некоторые проверки с использованием сразу нескольких таблиц. Это задача для триггеров. С позиции своего опыта, который включает очень разные проекты и разных людей, я берусь утверждать: нелюбовь к триггерам прямо пропорциональна БД-невежеству разработчика. Такая вот простая формула.

Никто в здравом уме не будет заявлять, что PL/pgSQL или, скажем, PL/Python супербыстры. На обычных арифметических вычислениях PL/pgSQL (как, впрочем, и простой SQL) заметно уступают [13] С и даже PHP. Так медленны, что их для таких целей в значительных масштабах будет использовать только безумец (ну или тот, кто возьмет на вооружение, скажем, библиотеку MADlib [14], которую я, кстати, очень уважаю и иногда с удовольствием использую). А вот для работы с очень большим количеством данных, когда надо найти правильные иголки в стогах сена, нет ничего лучше позиции «рядом с данными», когда на вашей стороне играют все доступные в БД индексы и отсутствие сетевой сложности, и помощи одного из двух самых популярных языков программирования в мире — SQL. Не использовать эти возможности, когда это точно выгодно, и есть глупость! Грамотно написанный триггер и быстро отрабатывает, и довольно прост в отладке (для профайлинга и отладки помогают расширения pg_stat_statements и auto_explain [15] с включенными опциями `pg_stat_statements.track = all` и `auto_explain.log_triggers = on`) и, главное, является рубежом, который не преодолеют грязные данные.

— В продолжение предыдущего вопроса, скажи, почему именно встроенные возможности PostgreSQL по контролю и манипуляциям с данными — оптимальнее и выигрышнее, чем самописные конструкции?

Одна очевидная причина: встроенные возможности разработаны и многие годы развиваются умными людьми, создателями Постгреса — такими как Том Лейн [16].

Другую — архитектурную — причину мы уже обсудили, осталось разве что проиллюстрировать. Вот сколько у вас входов в дом? Один? Два? Когда уходите, сколько дверей закрываете/контролируете? Точно же не десять? В современном проекте может быть одновременно и веб-сайт, и back-office, и различные API для мобильных приложений, а может еще и для внешних пользователей. Если вы реализуете поддержку целостности средствами приложения, то в вашем доме оказывается множество дверей, через которые входят и выходят посетители (в случае БД — данные). А если вам еще больше «повезло» и проект развивается силами не пары-тройки программистов, а большой команды или даже группой команд, то все, привет, приехали. Ваши двери сделаны и поддерживаются разными людьми/командами, которые зачастую еще и говорят на разных языках… Понятно же, о чем речь, да? Или вам придется ограничивать и сдерживать развитие проекта («нельзя подключать этот уже готовый GUI для работы с данными — ведь тогда менеджер сможет в БД записать что угодно, лучше уж мы сами создадим админку!..») или же как-то синхронизировать разработку одних и тех же механизмов контроля данных в разных подсистемах, зачастую и на разных языках.

На самом деле я тут рассказываю тривиальные вещи, но мои личные наблюдения показывают, как много стереотипов типа однозначных «хранимки — зло» или «FK — большие тормоза» еще живы и приводят к массовому велосипедостроению, и как дорого за это приходится впоследствии платить проектам.

— Очень много обсуждений и вопросов идет вокруг релизов PostgreSQL. Наверное, тебя часто спрашивают о корректных вариантах перехода с версий 9.3 — 9.6 на 10.
Всегда ли использование инструмента pg_upgrade [17] оправданно? Встречал ли ты на практике ситуации, когда нужно опасаться данного инструмента?

Был очень болезненный баг [18] в версии 9.3, были бессонные ночи у многих (включая меня) «благодаря» этому багу. К счастью, это уже в прошлом. Конечно, от багов нет стопроцентной страховки, но сегодня pg_upgrade – практически промышленный стандарт, его применение разумно в большинстве ситуаций, когда допустимы несколько минут простоя. Тут повезло тем, кто уже в облаках и с managed database типа AWS RDS — там про него вообще не думают, просто планируют maintenance window и производят апгрейд. Если же вам приходится об этом думать, обязательно стоит поэкспериментировать по возможности, проведя как хотя бы несколько тестовых прогонов на склонированной БД (именно в полноценном объеме и в идентичной инфраструктуре — конечно, если позволяют объемы данных и ресурсы). Тут, кстати, заманчиво опять же использование облаков, но уже на более низком уровне — просто EC2-машины в Amazon, например. Это очень дешево, если вы не забываете про такую возможность как спотовые инстансы [19].

Свежий и подробно расписанный кейс, как 1500 БД общим объёмом 55 ТБ в 6 ДЦ проапгрейдили всего за 15 минут: https://bricklen.github.io/2018-03-27-Postgres-10-upgrade/ [20]. Обратите внимание, как много тестов они проделали, прежде чем проводить операции «в бою». Главная формула этой статьи универсальна: «Test, find problems, fix; lather, rinse, repeat». Тут мне очень хочется опять завести речь про автоматизацию экспериментов, но я вас, наверное, уже утомил.

Если же и такое малое время простоя недопустимо, то нужно рассматривать более трудоемкие в реализации решения — прежде всего, на базе pglogical (свежий пост на эту тему [21]).

Мир магии PostgreSQL: интервью с Николаем Самохваловым - 2

— На майский РИТ++ [22]  ты заявлен с докладом "Continuous Database Administration [23]". В описании выступления первая часть посвящена инструменту «postgres_dba». Расскажи, пожалуйста о нем.

postgres_dba – это такой «полуавтоматический» «швейцарский нож» для работы с Постгресом. У любого опытного DBA есть накопленная годами подборка полезных скриптов, отвечающих на разные вопросы — от «какие таблицы в этой БД занимают больше всего места» до оценки bloat-а, нахождения неиспользуемых или избыточных индексов, работы с pg_stat_statements. Я перелопатил не одну подборку таких скриптов и сделал интерактивную менюшку для них — и теперь родной постгресовой консольке, psql, вы можете «общаться» с Постгресом, получая ответы на свои вопросы очень быстро. Очень просто добавить в этот набор и любые свои отчёты или интерактивные скрипты (например, можно добавить что-то для добавления/удаления пользователей БД с генерацией паролей так, чтобы это было максимально безопасно).

Работу DBA этот инструмент, конечно, не делает полностью автоматизированной. Но уже заметно ускоряет. Для себя я отметил, что получившийся инструмент сближает DBA и БД, с которыми она/он работает: отчёты теперь доступны на расстоянии нажатий всего пары клавиш, время сильно экономится, полноценное «общупывание» БД происходит очень быстро, а значит и чаще. Проект открытый, приглашаю попробовать и поучаствовать в развитии: https://github.com/NikolayS/postgres_dba [24].

— Вторая часть доклада состоит из нескольких блоков, посвященных автоматизации, облачным решениям и вопросам, связанным с AI. Как ты думаешь, какое из этих направлений будет активно использоваться в ближайшем будущем?

Тут сразу несколько направлений. Во-первых, Amazon, Google и Microsoft уже предоставляют так называемые managed databases — это когда за вас решаются вопросы развертывания БД, настройки репликации, switch-over/fail-over, автоматических бэкапов и базового мониторинга. Но такие решения, хоть и строятся на Open Source продуктах, сейчас сделаны отнюдь не в духе FLOSS [25]. AWS RDS даже не дает скачать бэкапы, не говоря уж о возможности репликации куда-то еще, кроме как на другой RDS-инстанс. А Google Cloud SQL for Postgres, хоть и объявил [26] в апреле о GA, все еще чрезвычайно беден в плане конфигурации Постгреса. Не дает даже логировать запросы, только ошибки.

Но в целом это все успешные истории построения проприетарных решений на базе открытых, особенно если говорить об RDS и RDS Aurora. В то же время я верю, что в ближайшем будущем появятся открытые аналоги, готовые работать где угодно (в амазоновоском или гугловском облаке, в частном облаке или же on-premise), при этом не менее продвинутые, с различными вариантами построения HA-решений, политиками бэкапов, при этом с полным доступом к ОС, ФС с superuser-доступом. По моим наблюдениям, эта ниша точно есть и она пока не занята. Кстати, строительные блоки для этого уже созданы и обкатаны в многочисленных компаниях: тут и Patroni [27] со Stolon [28] для поднятия мастера и реплик с поддержкой автофейловера, и не так давно начавшиеся развиваться k8s-операторы от Zalando [29] и от Crunchy [30], и решения для бэкапов WAL-E [31], WAL-G [32], pgBackRest [33].

Кстати, инженерам из России — вообще всем, не только DBA — я настоятельно рекомендую поскорее двигать свое сознание в сторону облаков, если они еще не сделали этого. Тут вышла странная история. Общеизвестно, что в большинстве случаев задержка с адаптацией новых технологий по сравнению с Долиной в России составляет два-три года. А вот в случае облаков этот лаг явно больше. В США облака сегодня — это практически уже commodity [34] (сорри, не знаю русского слова-эквивалента). А вот у нас в прошедшие годы «облачных» докладов на конференциях РИТ/Highload++ и прочих было по пальцем сосчитать. Но сейчас, кажется, чувствуется переломный момент. По разным причинам люди наконец-то созревают. Улучшаются каналы до европейских AWS-регионов, RTT из Москвы, по моим наблюдениям, опустился уже до ~50 мс. Яндекс и Mail.ru вовсю растят собственные решения — очень ждем, когда можно будет просто зарегистрироваться, ввести данные карточки и начать использовать. Вдобавок Роскомнадзор тут старательно учит всех гибкости и мобильности.

Вторая история — постепенное осознание того, что нужна еще большая автоматизация, чем только лишь поднятие Постгреса, настройка репликации и бэкапов. Если вам более 35-40 лет и вы программист, то, возможно, вы застали эру работы без систем контроля версий (сейчас повсеместно Git, а до него — CSV, SVN и прочие). Люди использовали ftp, верстальщик отправлял HTML по почте программисту. Был мрак, такой каменный век, что сейчас даже сложно уже представить. Всё это уже автоматизировано, отдельное спасибо Линусу Торвальдсу [35], а также командам GitHub, BitTorrent, GitLab. Та же история с тестами — когда-то было только ручное тестирование, теперь же повсюду автотесты и CI. Аналогично с вопросами деплоя: есть devops-инструменты, никакой ручной настройки серверов и сервисов, всё скриптуется, автоматизируется.

Так вот, в области DBA сейчас, наверное, уже не каменный век (спасибо облачным компаниям за хотя бы базовую автоматизацию), но еще и далеко не железный. Труд DBA по-прежнему ручной. Я уже приводил примеры. Ещё очень многого предстоит достичь, будут появляться новые технологии. У нас в PostgreSQL.support [36] уже проходит внутреннее тестирование аналог ораклового Database Replay, позволяющий проводить массу параллельных экспериментов без ручных действий. Конечно же, прежде всего в облаках. Например, если вы хотите подобрать оптимальный параметр — скажем, попробовать разные варианты значений `shared_buffers`, `seq_page_cost` или же `default_statistics_target` — вам достаточно задать вопрос нашему роботу-DBA Nancy, она развернёт сразу несколько копий вашей БД (одну с вариантами параметров «как сейчас на проде», другие — с такими, которые вы хотите проверить), прогонит кусок реальной нагрузки с вашей боевой БД или же запросы, заданные вами вручную, и сведёт результаты в одну таблицу, где будет видно, как в целом каждый вариант себя показал, сколько времени ушло, плюс сравнение по каждому кластеру из самых нагружающих систему запросов. Аналогично можно поступить, если вы оптимизируете набор индексов — можно попросить систему проверить разные индексы.

Тут очень важный момент: зачастую, оптимизируя вручную один запрос, вы забываете проверить смежные запросы, а они запросто могут ухудшиться. Недавний пример: соптимизировали было SELECT-ы за счет замещения части индексов таблицы на их более легковесные частичные аналоги (`create index … where …`), но оказалось, что при этом существенно замедлили UPDATE-ы. Причина в том, что после замены индексов перестали срабатывать HOT Updates [37] (кейс подробно разобран в моей статье [38]). Автоматизация экспериментов с помощью нашего решения позволяет увидеть картину целиком, все trade-offs. Только такая автоматизированная система позволяет гарантировать выполнение базового принципа оптимизаций — найденное решение должно улучшать что-то конкретное, не ухудшая при этом всё остальное.

И наконец, третье направление — история с DBA AI. В прошлом году появилось решение, использующие ML, чтобы тюнить Postgres и MySQL, называется OtterTune [39]. Его сделала команда того же Andy Pavlo. До этого появлялись разные решения у проприетарных СУБД — тут выделяется проект AutoAdmin [40] у Microsoft начала нулевых, наработки которого потом перетекли [41] в сам SQL Server. Сегодня весь такой облачный и автономный (якобы) Oracle, а также Peloton, которых я уже упоминал, – еще одни звоночки.

Это направление чрезвычайно интересное. Тут точно стоит ждать прорывов. Я поясню, почему сейчас. Очень важны два аспекта. Первый — взрывное развитие методов машинного обучения, которое мы наблюдаем последние лет пять-шесть, новые технологии, железо. Второй — развитие облаков, их удешевление. Маленькая РИТ-история. Мой добрый друг и физтех Дима Пушкарев рассказывал на РИТ-2013 [42], как он в десять раз снизил стоимость расшифровки генома за счет интересных собственных алгоритмов использования спотовых инстансов в AWS, это был большой прорыв. А потом в 2015 его компанию купил Amazon [43] и поглотил эти разработки, так что теперь EC2-споты являются рабочей лошадкой в огромном количестве компаний, включая крупнейших из списка Fortune-500, например, Disney [44]. Нам споты очень кстати, проведение экспериментов становится экономически выгодным, без них появление нашего робота-DBA Nancy было бы маловероятным.

Тема создания искусственного интеллекта, обучающегося на экспериментах с разными БД и нагрузками (включая ваши) и помогающего инженерам с настройкой БД, индексами, партиционированием, оптимизацией запросов, не нова в научной среде и в enterprise-секторе [45] (разные решения появляются не одно десятилетие и у Oracle, и у Microsoft, и у IBM), но для нас — тех, кто использует в основном Open Source, — это целый новый мир. Некоторые компоненты уже есть, их мы обсудим на предстоящем фестивале РИТ++, но если говорить в целом, то мы пока находимся в самом начале очень интересного пути.

Мир магии PostgreSQL: интервью с Николаем Самохваловым - 3

— Мы затронули темы конференции, но не поговорили о тенденциях индустрии в целом. Как ты считаешь, хайп вокруг NoSQL решений уже закончился? Какие прогнозы ты можешь дать по поводу соперничества MySQL и PostgreSQL? Или это можно считать обоюдовыгодным противостоянием?

Хайп изменился. В тренде теперь NewSQL [46], а не NoSQL. Причем в этом термине зашиты разные смыслы. Можно выделить как минимум три значения. Первое — те же NoSQL-решения, добавляющие поддержку своих диалектов SQL. В этом плане SQL сейчас — язык-победитель. Уродливый, избыточный, с неподъемными талмудами стандарта (в который, кстати, недавно добавили раздел SQL/JSON, работы по внедрению в Постгрес которого ведутся [47]), но он сейчас явно язык-победитель.

Вторая история — это про традиционные РСУБД, расширенные поддержкой нарушающих первую нормальную форму [48] данных, прежде всего данных JSON, что в итоге приводит нас к гибридной модели данных — получаем реляции, например, с JSON-документами внутри. В Постгресе очень давно были массивы, hstore, XML, а теперь и отличная поддержка JSON, с кучей возможностей и различными вариациями индексов. В этом смысле Постгрес — тоже NewSQL-СУБД.

И наконец, третий вариант трактовки понятия «NoSQL»: новые РСУБД, сразу ориентированные на язык SQL. Это прежде всего облачный Google Spanner, опенсорсные CocroachDB и ClickHouse. Создается много интересного, это большой новый вызов Постгресу. Хайпы предыдущих десятилетий — объектные СУБД, потом XML и далее NoSQL — он пережил очень успешно, окреп и вырос, а вот как пойдут дела далее, время покажет.

В целом с вызовами эпохи NewSQL пока неясно. Тут надо много работать, новые решения уже бьют по слабым местам Постгреса: например, один из крупнейших клиентов Citus-а CloudFlare недавно для своей аналитики отказался от их решения (а значит, и от Postgres) в пользу ClickHouse [49]. Что неудивительно — колоночная БД с векторизированными вычислениями и встроенным шардингом в данный момент на задачах аналитики оказывается на голову лучше Постгреса, даже снабженного шардированием от Citus. Если сообществу удастся в обозримом будущем добавить качественную поддержку pluggable engines, новые «движки хранения» — прежде всего, column store, а также row store нового типа (c «undo», с замещением кортежей «на месте», избавляющий от необходимости проведения частых и дорогих операций VACUUM – см. разработку компании EnterpriseDB zheap [50]) — и развить, а может даже и встроить в ядро Постгреса решения для шардинга (решения «сбоку» уже есть, например, Citus [51], а вот про встроенный ведутся пока только разговоры [52]), то всё у Постгреса будет хорошо в обозримом будущем. Лично я очень надеюсь, что в ближайшие несколько лет Постгрес-сообщество успешно решит перечисленные задачи.

А с MySQL да, есть какое-то взаимовыгодное… Как бы лучше сказать. Наверное, не противостояние, а уже какая-то даже кооперация. Постгресовые конференции приглашают [53] докладчиков из MySQL и Percona и наоборот [54], делаются совместные бенчмарки [55] (см. совместный доклад [56] разработчиков ПостгресПро и Percona на Highload++ 2016) и так далее. Один из самых активных участников российского постгрес-сообщества — Алексей Копытов, человек из MySQL-сообщества, автор sysbench [57], активно [58] «топит» [59] за MySQL [60] и против Постгреса [61], причем почему-то очень часто объявляется в нашей постгресовой фейсбук-группе [62]. Не знаю, что им движет, но в итоге делает он очень хорошую работу, не дает забыть о недостатках Постгреса, подталкивает к развитию.

— И главный вопрос на сегодня. Когда все таки митап-группа #RuPostgres будет первой?

Была некоторая личная скромная цель — обогнать группу SF Bay Area, где я теперь живу. Цель достигнута. Группа Нью-Йорка очень активна, и ее мы пока вряд ли догоним, но меня это особо уже не тревожит. Переезжать туда пока не планирую.

С учетом того, что и я, и соведущий наших трансляций Илья Космодемьянский [63] в основном находимся не в Москве, группу мы сейчас активно тянем в онлайн. Я думаю, тут есть еще очень большой потенциал для роста. По-первых, русскоговорящие постгресмены раскиданы по всему миру. Во-вторых, средства проведения онлайн-митапов становятся доступнее и совершеннее — например, совсем недавно в YouTube чат стал, наконец, сохраняться после завершения трансляции, а это для наших онлайн-сессий очень важно. Во время трансляций там часто разгорались интересные параллельные обсуждения затронутых тем. И вот YouTube теперь синхронно накладывает все реплики на запись, смотреть становится ещё интереснее.

— Поскольку ты отвечаешь за доклады по БД к новосибирскому HighLoad++ Siberia, не могу не спросить, какие темы будут затронуты в этом году и на какие доклады надо обратить внимание в первую очередь? Какова будет специфика сибирского форума, стоит ли туда приезжать после РИТ++?

Конечно стоит. Highload++ Siberia [64] — полноценный, «взрослый» Highload, его не стоит путать с прошлогодним Highload++ Junior. Большая конференция приезжает в новый регион, чтобы активировать обмен опытом между еще большим количеством экспертов. Программа у нее своя, уникальная, сейчас формируется. Мы стараемся минимизировать пересечения тем, представлять новую информацию.

Уже поданы очень интересные заявки. Например рассказ о внедрении ClickHouse в VK, очень интересные доклады от специалистов из Яндекс, Mail.ru, Одноклассников, Badoo — про базы данных, видеостриминг, алгоритмы сжатия.

Отдельно отмечу, что целый блок заявок получен от enterprise-сектора. Местные компании готовы делиться своим опытом работы с Oracle, прежде всего в финансовом секторе. И так вышло, что в этот раз я поддержал большую часть заявок — потому что в отличии от прошлого опыта (когда к нам приходили люди из российского офиса Oracle и не могли ответить даже на базовые технические вопросы) тут есть новые ожидания, видна хорошая техническая экспертиза.

Ну и конечно, будут доклады о Postgres. Обещали приехать Andreas Scherbaum (Greenplum) и Alvaro Hernandez (OnGres), лидеры немецкого и испанского постгресовых сообществ.

Уверен, будет интересно!

Автор: Олег Бунин

Источник [65]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/postgresql/281145

Ссылки в тексте:

[1] #RuPostgres: http://rupostgres.org/

[2] автономна: https://www.oracle.com/ru/database/autonomous-database/feature.html

[3] Peloton: https://github.com/cmu-db/peloton

[4] Andy Pavlo: http://www.cs.cmu.edu/~pavlo/

[5] собирают: https://www.meetup.com/Bay-Area-NewSQL-Database-Meetup/events/249676562/

[6] приедет: http://www.highload.ru/2018/abstracts/3557.html

[7] растущей: https://www.hntrends.com/2018/apr-golang-jumps-into-top-10.html?compare1=postgresql&compare2=oracle&compare3=mysql&compare4=mongodb

[8] популярностью: https://db-engines.com/en/blog_post/76

[9] pg_stat_statements: https://www.postgresql.org/docs/current/static/pgstatstatements.html

[10] патч от ПостгресПро: https://www.postgresql.org/message-id/flat/permail-201804061303303cc687ad000076e9-j_mark05@message-id.uni-muenster.de#permail-201804061303303cc687ad000076e9-j_mark05@message-id.uni-muenster.de

[11] Database First! О распространённых ошибках использования РСУБД: https://www.youtube.com/watch?v=nW1oYRA-hp0

[12] exclusion constraints: https://www.postgresql.org/docs/current/static/ddl-constraints.html

[13] уступают: http://okbob.blogspot.ru/2018/05/dudes-test-speed.html

[14] MADlib: http://madlib.apache.org/

[15] auto_explain: https://www.postgresql.org/docs/current/static/auto-explain.html

[16] Том Лейн: https://en.wikipedia.org/wiki/Tom_Lane_(computer_scientist)

[17] pg_upgrade: https://www.postgresql.org/docs/10/static/pgupgrade.html

[18] болезненный баг: https://www.postgresql.org/message-id/flat/D5359E0908278642BB1747131D62694DAB22560F%40AUSMXMBX01.mrws.biz#D5359E0908278642BB1747131D62694DAB22560F@AUSMXMBX01.mrws.biz

[19] спотовые инстансы: https://aws.amazon.com/ru/ec2/spot/

[20] https://bricklen.github.io/2018-03-27-Postgres-10-upgrade/: https://bricklen.github.io/2018-03-27-Postgres-10-upgrade/

[21] свежий пост на эту тему: https://blog.2ndquadrant.com/near-zero-downtime-automated-upgrades-postgresql-clusters-cloud/

[22] РИТ++: http://ritfest.ru/moscow/2018

[23] Continuous Database Administration: http://ritfest.ru/moscow/2018/abstracts/3540

[24] https://github.com/NikolayS/postgres_dba: https://github.com/NikolayS/postgres_dba

[25] FLOSS: https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D0%BE%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5

[26] объявил: https://cloud.google.com/sql/docs/postgres/release-notes

[27] Patroni: https://patroni.readthedocs.io/en/latest/

[28] Stolon: https://github.com/sorintlab/stolon

[29] от Zalando: https://github.com/zalando-incubator/postgres-operator

[30] от Crunchy: https://github.com/CrunchyData/postgres-operator

[31] WAL-E: https://github.com/wal-e/wal-e

[32] WAL-G: https://github.com/wal-g/wal-g

[33] pgBackRest: https://github.com/pgbackrest/pgbackrest

[34] commodity: https://en.wikipedia.org/wiki/Commodity

[35] Линусу Торвальдсу: https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290

[36] PostgreSQL.support: http://postgresql.support/

[37] HOT Updates: http://www.interdb.jp/pg/pgsql07.html

[38] в моей статье: https://medium.com/@postgresql/how-partial-indexes-affect-update-performance-in-postgres-d05e0052abc

[39] OtterTune: https://ottertune.cs.cmu.edu/

[40] AutoAdmin: https://www.microsoft.com/en-us/research/project/autoadmin/

[41] перетекли: https://docs.microsoft.com/ru-ru/sql/relational-databases/performance/database-engine-tuning-advisor?view=sql-server-2017

[42] рассказывал на РИТ-2013: http://ritconf.ru/2013/abstracts/1326.html

[43] купил Amazon: https://venturebeat.com/2015/04/29/amazon-pays-20m-50m-for-clusterk-the-startup-that-can-run-apps-on-aws-at-10-of-the-regular-price/

[44] Disney: https://www.youtube.com/watch?v=btGphZQZqkY

[45] не нова в научной среде и в enterprise-секторе: http://www.cs.cmu.edu/~pavlo/blog/2018/04/what-is-a-self-driving-database-management-system.html

[46] NewSQL: https://en.wikipedia.org/wiki/NewSQL

[47] ведутся: https://obartunov.livejournal.com/199291.html

[48] первую нормальную форму: https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B2%D0%B0%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0

[49] в пользу ClickHouse: https://blog.cloudflare.com/how-cloudflare-analyzes-1m-dns-queries-per-second/

[50] zheap: https://github.com/EnterpriseDB/zheap

[51] Citus: https://www.citusdata.com/

[52] разговоры: http://rhaas.blogspot.ru/2018/05/built-in-sharding-for-postgresql.html

[53] приглашают: https://pgday.ru/ru/2017/papers

[54] наоборот: https://www.percona.com/live/18/schedule/day-2-grid

[55] бенчмарки: http://akorotkov.github.io/blog/2016/05/09/scalability-towards-millions-tps/

[56] совместный доклад: http://www.highload.ru/2016/abstracts/2337.html

[57] sysbench: https://github.com/akopytov/sysbench

[58] активно: https://habr.com/post/269463/

[59] «топит»: https://pgday.ru/ru/2016/speakers/81

[60] за MySQL: https://devconf.ru/ru/archive/devconf2017/offer/314

[61] против Постгреса: https://2018.secon.ru/reports/silnye-storony-mysql-ili-zachem-on-vsyo-taki-nuzhen-kogda-est-postgresql

[62] фейсбук-группе: https://www.facebook.com/groups/postgresql/

[63] Илья Космодемьянский: http://www.highload.ru/authors/1475

[64] Highload++ Siberia: http://www.highload.ru/siberia/2018

[65] Источник: https://habr.com/post/359306/?utm_source=habrahabr&utm_medium=rss&utm_campaign=359306