Вместо предисловия
Два года назад на конференции мы осмелились заявить, что 1С + Postgres = Дружба!
Сейчас я хочу рассказать про сборку Postgres Pro для 1С, что в ней нового и интересного для специалистов 1С.
Все эти годы мы плотно занимались тем, чтобы наша российская СУБД Postgres Pro могла работать с 1С. Как результат, на сайте 1С вы теперь можете найти сборку российской СУБД Postgres Pro и спокойно использовать ее в своих проектах.
Почему PostgreSQL заслуживает внимания
Пару слов обо мне. Я являюсь ведущим разработчиком PostgreSQL более 20 лет. На картинке свой вклад в PostgreSQL в виде слона, который является “тотемным животным” этой СУБД.
Три года назад мы организовали компанию Postgres Professional, в которой я являюсь генеральным директором. Я также профессиональный астроном, работаю в ГАИШ МГУ научным сотрудником, то есть совмещаю два вида деятельности.
Вкратце напомню, что такое PostgreSQL. Это ведущая мировая система управления базами данных с открытым кодом. В 2017 году она получила статус «СУБД №1» в независимом рейтинге баз данных DB-Engines Ranking.
Проект PostgreSQL замечателен тем, что существенный вклад в него внесли российские разработчики, и это общепризнано. В нашей команде есть три ведущих разработчика Postgres и два коммитера. Причем коммитер в таких больших проектах – это очень большое звание! Для нас это означает, что мы можем развивать и вносить в ядро PostgreSQL наши разработки, нужные фичи.
Postgres поддерживается платформой 1С с 2008 года, когда мы подписали контракт с фирмой 1С и сделали первые два патча. Хотя это был важный шаг, для коммерческого, профессионального использования Postgres с 1С этого было недостаточно, потому что необходима техническая поддержка пользователей. Теперь такая поддержка есть в лице нашей компании. Так что вы можете скачать Postgres для 1С, использовать и не бояться того, что что-то пойдет не так.
Почему я говорю, что Postgres – СУБД №1 в России? Недавно в Москве на большой IT-конференции проходил опрос, и люди проголосовали за Postgres. Это не случайно. Политическая ситуация в мире сложилась так, что коммерческие компании типа Microsoft и Oracle начинают терять интерес к России. Поэтому сейчас все большие айтишные проекты стартуют с Postgres. Практически все стартапы работают с СУБД Postgres. Это можно объяснить тем, что Postgres является универсальной базой данных, то есть поддерживает практически все, что вам нужно. А если чего-то не хватает, то вы всегда можете это сами дописать, т.к. код открыт. Postgres является расширяемой базой данных. Вы можете обратиться к своему разработчику, а если такого нет, обратиться к нам, и мы разработаем необходимую функциональность. Именно поэтому люди любят Postgres.
Вторая причина, почему люди любят Postgres, – эта база данных не принадлежит ни одной компании. Проект развивается международным сообществом. Это также гарантирует, что СУБД проходит очень хорошие испытания, имеет поддержку и динамично развивается. Поэтому можно не сомневаться, что с Postgres все будет хорошо.
Ниже вы можете увидеть часть форков Postgres. Это ответвления от основного проекта PostgreSQL, которые создали различные компании. Все это также говорит о том, что PostgreSQL - база действительно хорошая, иначе бы ее не брали за основу. PostgreSQL имеет очень либеральную лицензию: любой может взять PostgreSQL, создать на ее основе новую базу имени себя и выйти с ней на рынок. То есть такая СУБД очень хороша для коммерческого использования.
Postgres поддерживает все указанные нагрузки: OLTP, массивно-параллельную обработку данных, OLAP, CLOUD, потоковые данные, TIMESERIES. Есть поддержка графических ускорителей, и в последнее время добавили еще поддержку блокчейн. Наша компания лично добавила блокчейн. И не потому, что это такое модное и привлекательное слово. Но мы же говорим про цифровую экономику, и с развитием цифровых технологий разработчики баз данных встают перед проблемой: как защитить пользователей, чтобы кто-то не скомпрометировал ваши базы данных? Вот вы сейчас думаете, что ваша база данных работает, и все хорошо. А в это время ваш администратор или владелец сервиса может ее просто подменить. И вы даже не заметите этого. Вы заметите это только тогда, когда вдруг появятся какие-то данные, которые вы не помните. И чтобы защититься, мы придумали, как использовать для этого блокчейн.
Я хочу подчеркнуть, что ни одна база данных не имеет такой защиты. В Microsoft и Oracle дайте 100 долларов системному администратору, и он вам сделает все, что угодно с этой базой данных. И это надо понимать. Причем это может быть не только системный администратор, но и просто владелец хостинга. Он может подменить эту базу. Поэтому блокчейн очень важен. Уже существуют прецеденты, когда люди взламывают медицинские карточки и могут вам дописать какую-то болезнь или стереть запись об аллергии. То есть сохранность базы данных – серьезная вещь, и это касается не только финансовых областей, но и многих других.
Компанию Postgres Professional создали разработчики Postgres, нескольких из них вы можете увидеть на фотографии.
Наша цель – создать систему управления базами данных для России. Многие нас спрашивают, зачем это нужно, ведь можно взять просто обычный Postgres и использовать его?
В силу законодательного регулирования в России необходимо, чтобы у программного продукта была техническая поддержка и чтобы он удовлетворял определенным требованиям. Например, требованиям к работе с персональными данными. Для удовлетворения этим требованиям мы сделали довольно много патчей в Postgres. Они, естественно, не интересны международному сообществу, но они нужны нам для того, чтобы Федеральная служба по техническому и экспортному контролю (ФСТЭК) могла сертифицировать продукт. В таком случае вы можете без опаски использовать сертифицированную СУБД Postgres Pro.
Postgres Pro входит в реестр российского программного обеспечения. И это дает право выбрать его при проведении конкурсов и закупок, ничего согласовывать больше не придется.
Но мы не только выпускаем свои продукты, но и продолжаем развивать международный Postgres. Например, в прошлой 10-ой версии Postgres от нашей компании было больше 100 патчей. Если почитать релиз для 11-ой версии, там можно увидеть 20 фамилий ребят из нашей компании. То есть мы не занимаемся изоляционизмом, мы являемся членами международного сообщества. Но при этом мы разрабатываем нашу ветку Postgres, потому что существуют объективные требования, по которым должна быть российская компания, осуществляющая профессиональную поддержку, участвующая в развитии, которая также сможет отвечать на запросы клиентов.
Дело в том, что постгресовое сообщество - не какое-то формальное объединение, а скорее группа по интересам. Вы никому ничем не обязаны, и перед вами никто ничем не обязан. Но когда вы начинаете работать с Enterprise, когда вы начинаете работать в коммерческой компании, кто-то должен отвечать за продукт, кто-то должен предоставлять поддержку, кто-то должен помогать вам, чтобы вы не остались вдруг наедине с проблемой. Open Source очень хорош. Я сам больше 20 лет, занимаясь разработкой Postgres, являюсь апологетом Open Source. Но когда дело касается серьезных производственных вещей, то необходима какая-то компания, которая поможет.
Посмотрите опыт построения бизнеса ведущих компаний: все компании, которые выросли из Open Source, сначала делали свободный продукт, а потом начинали делать из него бизнес, продолжая поддерживать Open Source продукт. Мы пошли тоже по такому пути. У нас имеется улучшенный вариант Postgres. Это значит, что существует обычный Postgres, в который мы добавляем свои собственные патчи, которые мы делаем сами либо по заявкам наших клиентов. К нам обращаются с проблемой, мы это фиксируем, и решение этих проблем помещаем уже в Postgres Pro Standard – улучшенную версию Postgres.
Я хочу обратить внимание, что это вынужденный шаг. Дело в том, что ванильный Postgres развивается достаточно консервативно. Новый релиз, в который попадают одобренные сообществом фичи, происходит только один раз в год,. А зачастую клиенты не хотят ждать так долго, они хотят пользоваться улучшенной базой данных уже сегодня. Поэтому мы предлагаем свою версию, чтобы у людей был сразу доступ к новым фичам.
В Postgres Pro Standard уже есть патчи для 1С. Вам ничего не нужно собирать, он по умолчанию поддерживается. Его можно бесплатно скачать с сайта, попробовать, посмотреть, как он работает.
Postgres Pro Enterprise – это уже достаточно дорогая вещь, включает очень много наработок и собственные ноу-хау, которые пока закрыты и никому не доступны. Эта версия рассчитана на большие проекты. Если вы сталкивались с тем, что обычный ванильный Postgres или Postgres Pro Standard не справляются с вашими нагрузками, имеет смысл попробовать Postgres Pro Enterprise. Мы ничего не придумывали: взяли ценник как у Oracle, уменьшили его в насколько раз, а все остальное то же самое – вы платите за поддержку и за ядра. Но вы можете написать нам заявку и получить его бесплатно для того, чтобы посмотреть, поможет он вам или нет.
Преимущества Postgres Pro Enterprise:
- повышенная производительность;
- улучшенная надежность;
- отказоустойчивость.
Это то, над чем мы работаем, и то, почему очень большие компании используют Postgres Pro Enterprise. Возможно, Enterprise вам не понадобится. Но вам в любом случае понадобится поддержка. Обращайтесь к нам, мы вам поможем.
Также у Postgres Pro есть сертификат безопасности по персональным данным и конфиденциальности. И если ваши предприятия работают с чувствительными данными, вы просто обязаны работать с сертифицированной версией базы данных. Я не знаю о том, насколько сертифицирован продукт Microsoft, но по требованиям законодательства вы обязаны работать только с сертифицированным базами данных. Это обязательно в медицине, в МФЦ, еще в ряде отраслей. До поры до времени, возможно, это сходит с рук, но когда-нибудь к вам придут и спросят, сертифицирована ли у вас база данных, сертифицировано ли все остальное. Я знаю, что 1С сертифицирована. Но кроме нее, вам надо еще иметь сертифицированную базу данных. Так вот у нас она есть.
Совместимость с 1С
Проверено, доказано и везде написано, что 1С может работать c:
- версией PostgreSQL 9.6*;
- PostgreSQL 10.3, начиная с платформы 8.3.13 – наиболее актуальной для всех версией;
- версией Postgres Pro Enterprise 9.6.3.1.
Мы запускаем автоматизированные тесты – функциональные и нагрузочные - после чего все согласовываем с 1С. Сейчас такие тесты проходят:
- Postgres Pro Enterprise 10.*;
- Postgres Pro Standard 10.*;
- PostgreSQL с патчами 10.*
Как видите, мы не отказываемся от поддержки 1С обычного ванильного PostgreSQL.
Обычно люди предпочитают брать ванильную версию на свой страх и риск, разбираться, пробовать. А потом если им чего-то не хватает или им нужна какая-то поддержка, они приходят к нам.
Хочу сказать, что процент внедрения Postgres в сообществе 1С еще небольшой. Но я всех убеждаю начать пользоваться Postgres уже завтра. Всем сомневающимся я отвечаю: «Не бойтесь!». Вы знаете, уже существуют достаточно крупные сервисы на Postgres, облачные бухгалтерии в Новосибирске, Екатеринбурге работают на Postgres, они обслуживают тысячи пользователей. Я лично знаю десятки клиентов, которые внедрили Postgres на заводах, работают на нем и просто счастливы. Вы почувствуете свободу с Postgres. Потому что вам не надо будет платить Microsoft, вы не будете зависеть от его патчей, от его поддержки и так далее.
Как проводится тестирование на совместимость с 1С
Что собой представляют тесты? Это тестовые конфигурации 1С, которые выполняют типовые операции с платформой. Они поддерживаются Postgres Professional, мы их разрабатываем и тестируем. А приемку результатов тестирования осуществляет компания 1С.
Если у вас есть какие-то идеи или свои тесты, давайте сотрудничать. От этого будет зависеть качество нашего продукта. Мы, конечно, можем сами написать тесты и сотрудничаем с компаниями, но то многообразие данных и многообразие ситуаций, которые существуют в сообществе 1С, мы не можем охватить. Поэтому призываю, если вы проводите свои тесты, например, «Операционный день» или «Операционный месяц», и у вас есть тестовые данные, есть результаты - поделитесь с нами. Можете сделать данные предварительно анонимными. Мы включим их в наши тесты, и вы будете уверены, что мы вашу ситуацию точно проверили, протестировали. Нам очень не хватает фидбэка от всех вас.
Новая версия Postgres для 1С
Вы сейчас работаете на Postgres 9.6, несмотря на то, что скоро выйдет Postgres 11. Но пока на него ни один серьезный человек не перейдет, нужно подождать, по крайней мере, несколько минорных релизов, потому что база данных – вещь серьезная. Поэтому наиболее актуальная для вас версия 10.
Что вас ожидает нового в этой версии, когда мы завершим тестирование? Вас ждут такие вещи, как:
- параллельная обработка запросов - она уже была, но сейчас стала очень интересной;
- многопараметрическая статистика добавлена. Это очень важно, потому что в Postgres выполнение запросов зависит от того, какую оценку стоимости база данных может дать для вашего запроса. И это зависит от статистики. До сих пор до версии 10 статистика была однопараметрическая, т.е. для какой-то определенной колонки. А сейчас стала многопараметрической, так что вы можете делать статистику для связанных колонок. Это важно для 1С, потому что в 1С бывают сложные запросы, когда колонки друг с другом связаны, и это надо учитывать;
- логическая репликация и секционирование таблиц. Это очень важно, когда у вас база данных становится большой. Тогда ее начинают разбивать на секции. И в Postgres 10 добавлено надежное секционирование, которое позволяет масштабироваться. Не на уровне приложения, а на уровне баз данных.
Расскажу немного подробнее про параллельную обработку запросов. В версии 9.3 появились background workers – это «демоны», которые делают задачки в фоновом режиме. В версии 9.6 появились Parallel sequential scans, когда диск читается параллельно сразу несколькими запросами. Т.е. если у вас 1С генерит 10 запросов к одной и той же таблице, то раньше эти все 10 запросов «дрались» за диск, и тогда там очень много overhead. А с параллельной обработкой один процесс читает, а все остальные ждут и пользуются результатами этого «чтения». Это сильно облегчает работу базы данных.
Появились еще Hash joins и Nested Loops – все это обрабатывается в системе параллельно. Наверное, ни у кого не осталось ноутбука или сервера, у которого только 1 ядро. Сейчас нормально, когда сервера имеют 8-12 ядер, и Postgres их эффективно использует. В этом и заключается параллелизм. Все ядра используются для выполнения вашего запроса.
В версии 10 появилось еще больше поддержки параллелизма – Bitmap heap scans, Index scans, Merge joins…
Я хочу отметить одну вещь. Известно, что 1С-ники пишут запросы на “своем” языке. В первый раз, когда я столкнулся с запросами 1С в 2008 году, я был шокирован. Несколько дней мы занимались тем, что пытались сократить запрос размером в 100 кБ и сделать его удобоваримым. Сейчас к нам приходят запросы длиной даже в 1 мБ. Я всегда поражаюсь, когда прихожу к вам, смотрю, неужели вот этот человек может описать вот такой запрос? И я очень горд за Postgres, потому что он справляется с такими запросами и при этом не умирает. Перечисленные выше функции и помогают решать такие проблемы.
В версии 11 появятся еще более удивительные вещи: улучшилась параллельная обработка запросов, появилась JIT-компиляция - Just-in-time compilation, компиляция «на лету».
Преимущества Postgres Pro
Несколько примеров того, почему люди выбирают нашу базу данных. В Postgres Pro есть встроенная компрессия таблиц. И если у вас была база данных в 60 TB, в нашей версии она будет 10 TB. Реальный и хороший выигрыш.
Есть адаптивный оптимизатор запросов. 64-разрядный счетчик транзакций, что позволяет вам работать долго, практически до бесконечности, пока вселенная будет жить. Вы можете не переживать, что счетчик транзакций в базе данных перейдет порог 2 млрд., и вы испытаете боль. Большие компании особенно часто сталкиваются с такой проблемой.
Есть множество разных оптимизаций.
Например, устранение SELF-join. Вы знаете, что если вы хотите взять три колоночки из одной таблицы, 1С генерирует SELF-join. Это боль для любой базы данных. И в нашей версии мы уточняем, что это три колонки из одной таблички. Надо просто написать «select a, b, c from table» и все. А не генерить под запросы join и т.д.
Мы сделали оценку селективности join, потому что когда вы делаете таблицы, нужно четко и очень хорошо предсказывать, сколько данных мы возьмем с одной таблицы, сколько с другой. И в зависимости от количества данных (оценки), мы делаем разные стратегии, разные алгоритмы работы. Этот аспект мы тоже улучшили, а еще сделали оптимизацию GROUP BY.
Наконец, мы решили проблему переименования файлов статистики в Windows. Под Windows существовала проблема со статистикой, когда база работает-работает, а потом вдруг начинает работать медленно. Потому что потерялись файлы статистики. Эту проблему обнаружил Антон Дорошкевич, и мы ее исправили.
Эффект оптимизации – все работает быстрее. На официальных бенчмарках мы получили выигрыш 20%. На самом деле, у нас выигрыши в несколько раз больше, хотя все, конечно, зависит от нагрузок. Но, по-моему, и 20% - это очень хорошо. Не затратив ни копейки, получаете дополнительный выигрыш.
Напоследок я хочу всех пригласить на 5-ую конференцию по Postgres, которая пройдет в Москве 4-6 февраля 2019 года.
Приезжайте к нам, чтобы прокачать знания в работе на Postgres. Конференция пройдет в Москве, в шикарных залах на экономическом факультете МГУ.
А в самом конце скажу: «All you need is Postgres!».
Спасибо за внимание.
Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2018 EDUCATION.