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

С 6 по 7 февраля в бизнес-центре Digital October в Москве пройдёт конференция PGCONF.RUSSIA 2015 [1], одним из организаторов которой я являюсь. PostgreSQL — одна из наиболее перспективных современных свободно распространяемых СУБД, активно развивающаяся и во многих случаях уже не уступающая флагману коммерческих СУБД Oracle, а в чем-то и превосходящая его. При этом что Postgres распространяется по очень свободной лицензии, близкой к BSD и MIT-лицензиям, позволяющих делать с ним что угодно — даже продавать от своего имени. Поэтому нет препятствий в создании на базе постгреса коммерческих СУБД и прикладных систем, и этим многие пользуются. Это, в свою очередь, дает возможность участвовать в разработке большему количеству людей, и активнее подпитываться новыми идеями. На страницах данного поста мы расскажем о том, как возникла и развивалась эта СУБД, каковы её сильные и слабые стороны, в том числе с точки зрения широкого распространения.
В мире существует очень много систем управления базами данных. Самая известная, конечно, Oracle, сегодня это общепризнанная СУБД №1 в мире. Из свободно распространяемых СУБД наиболее известна и популярна MySQL. Однако в последние годы все больший интерес в мире вызывает PostgreSQL, свободно распространяемая объектно-реляционная система управления базами данных (ORDBMS), наиболее развитая из открытых СУБД. Рост запросов на миграцию с проприетарных систем на PostgreSQL доказывает, что он является реальной альтернативой коммерческим СУБД.
В чем причина роста популярности Postgres? Прежде всего, он очень тщательно продуман, гибок и за счет этого имеет ряд преимуществ.
Postgres был создан в 1986 профессором университета Калифорнии в Беркли Майклом Стоунбрейкером, как следующая ступень после СУБД Ingres. Основы его устройства и механизмы для обеспечения расширяемости были заложены уже тогда. Интересно, что в то время использование языка SQL еще не считалось обязательным для реляционных баз данных. И когда в 1996 году Postgres, уже научившийся языку SQL, стал свободно распространяемым продуктом, он стал назывался замысловатым словом PostgreSQL («постгр ́есквел»), но для удобства произношения старое название «постгрес» тоже сохранилось и используется.
В последние годы в PostgreSQL испытывает бурный расцвет, связанный с его проникновением на рынки промышленных решений. Поэтому в него целенаправленно добавляются возможности, необходимые для использования его в серьёзных проектах – репликация, средства для хранения неструктурированных данных, row level security. Производительность с каждой новой версией возрастает.
За рубежом к PostgreSQL проявляют большой интерес. Многие компании оказывают коммерческие услуги по поддержке и кастомизации — в частности, этим занимаются американская компания EnterpriseDB, британская The Second Quandrant и французская Dalibo. К слову, директор последней Жан-Поль Аргудо в своем докладе [2] на PGCONF.RUSSIA 2015 поделится опытом оказания коммерческих услуг в отношении свободного распространяемого продукта и поддержки правительственных учреждений Франции в миграции с Oracle на Рostgres. Также на PGCONF.RUSSIA 2015 будут выступать довольно известные разработчики PostgreSQL из Японии [3] и Китая [4], которые расскажут о причинах высокой его популярности в этих странах.
Технические детали PostgreSQL
На волне сегодняшней тенденции к импортозамещению на Postgres стали обращать внимание многие государственные и окологосударственные структуры, которые сегодня пользуются СУБД Oracle и другими проприетарными системами. Конкретные шаги по миграции предпринимаются рядом министерств и госкорпораций. Кстати, в Европе такая же картина, как у нас: там тоже хотят, как ни странно, «слезать» с проприетарных решений. Причем хотят очень давно. Но многие свободно распространяемые решения еще только подходят к такому уровню качества, чтобы на них можно было переходить. РostgreSQL — одна из наиболее серьезных систем.
Российские разработчики вносят серьезный вклад в развитие Рostgres. Вероятно, это одна из причин, почему Postgres так серьезно в последнее время стали рассматривать в различных министерствах. Не обошли его вниманием и силовые структуры, включая военных. Ведь, поскольку это система с открытым кодом, есть возможность проверить ее код на наличие различных шпионских и диверсионных закладок.
Благодаря индексной поддержке работы с пространственными данными PostgreSQL очень широко используется в геоинформационных системах. В частности, на нем сделаны такие известные проекты, как OpenStreetMap и российский 2ГИС. Кстати, Postgres лежит и в основе площадки объявлений Avito.
К сожалению, во многих случаях открытость системы и отсутствие явной компании-разработчика мешает активному распространению. Ведь, несмотря на свою бесплатность, как и любая другая сложная система, Postgres имеет ненулевую стоимость владения, требуя определенных затрат на разработку и обслуживание. Нужны квалифицированные и компетентные специалисты. И, если в случае с той же Oracle или Microsoft есть формальная система сертификации, то у Рostgres такой системы нет. Поэтому организации и государственные структуры, которые привыкли или вынуждены работать строго формально, не понимают, кого им брать на работу. Ну хорошо, поставят они Рostgres. А где они возьмут сертифицированных инженеров? В России их формально нет. Поэтому сейчас в воздухе витает идея, что российскому сообществу разработчиков необходимо приобрести или создать некую формальную структуру, которая будет заниматься сертификацией, обучением и продвижением Рostgres в России. Конечно, есть частные фирмы, занимающиеся обучением работе с Postgres. Но для того, чтобы государство признавало выдаваемые ими сертификаты, требуется поддержка на достаточно высоком уровне. Нужна мощная поддержка со стороны потенциальных клиентов, нужна политическая воля, пиар. Возможно, в будущем это будет реализовано.
Для любого нового бизнеса Postgres заманчив по сравнению с проприетарными СУБД отсутствием стартовых вложений — вам не требуется покупать лицензию. Однако в этих случаях часто выбирают более популярную MySQL. Достоинства Postgres становятся более заметными и даже определяющими, когда требуется база данных более-менее сложной структуры с внутренней логикой, репликацией, взаимодействием с другими базами, то есть когда речь идет не о веб-сайте из нескольких страниц, а об информационной системе для бизнеса, крупном интернет-портале, системе электронной коммерции.
Postgres можно порекомендовать для тех проектов, где важна высокая надежность работы, возможность без остановки системы обновлять конфигурацию самой базы, хранимых процедур. В новых версиях Рostgres можно будет (пока с помощью хитроумного DBA) даже обновлять версию самого постгреса без остановки сервиса.
По сравнению с другими свободно распространяемыми реляционными СУБД Рostgres выигрывает технологически. В него изначально были заложены очень грамотные технические решения, опередившие время. Postgres обладает высочайшей степенью гибкости и расширяемости: можно создавать свои типы данных, свои типы индексов, писать встроенные функции на огромном количестве языков, чего нигде больше нет. К примеру, доминирующая позиция Postgres в ГИСах является прямым следствием его гибкости и расширяемости.
Мы надеемся, что проводимая нами конференция позволит сообществу организоваться, найти какие-то формы взаимодействия, создать новые структуры. Еще мы надеемся продемонстрировать крупным отечественным заказчикам и государству зрелость самого PostgreSQL и сообщества, а членам сообщества продемонстрировать широту задач, открытых для них.
Мы хотим способствовать формированию сообщества и рынка, собрать вместе разные заинтересованные стороны. Тех, кто разрабатывает сам Рostgres, кто разрабатывает на нем, кто использует его. Ведь если будет развиваться рынок услуг, связанных с Рostgres, то будет развиваться и сам Рostgres.
Вообще, такие конференции — одна из форм самоорганизации мирового сообщества разработчиков и пользователей. Есть серия международных конференций, которые проходят в Канаде; в США проводятся американские конференции; в различных городах Европы — ежегодные общеевропейские. В Китае и Японии тоже проводят свои национальные конференции по Postgres. Европейские конференции собирают обычно по 200-300 человек. Первая крупная российская конференция была организована энтузиастами прошлым летом в Санкт-Петербурге, ее посетили около 250 человек. Примерно столько же мы ожидаем и на PGCONF.RUSSIA 2015.
В России, в отличие от многих других стран, есть свои члены международной команды разработки ядра PostgresQL, то есть ключевые, фундаментальные разработчики Рostgres. Один из них, Федор Сигаев, работает у нас в Mail.Ru Group. В свое время он создал важные инструменты для Рostgres, которые позволили работать с массивами [6] и неструктурированными данными [7]. Вместе с Олегом Бартуновым — другим российским разработчиком ядра — он создавал модуль полнотекстового поиска [8].
Федор будет также выступать на нашей конференции (всего заявлено более 40 докладчиков в трех параллельных секциях). В качестве расширенного анонса мы хотим немного рассказать о содержании его доклада.
Исторически Postgres создавался как база данных, которая не имеет жестко зашитого набора правил, жестко зашитых типов. Она позволяет добавлять свои типы, создавать свои функции и т.д. Конечно, не все удавалось сделать сразу, многие заложенные идеи все еще развиваются. Скажем, только в середине 2000-х Postgres наконец избавился от «знания» семантического значения знаков операций. Затем это знание было обобщено, и теперь есть возможность объяснять ядру Postgres, как именно с помощью индекса ускорять поиск по выражениям с любыми знаками операций. Это дало возможность с помощью индексов специального типа ускорить поиск по вхождению элемента в множество (массив), по пересечению множеств, и затем — полнотекстовый поиск.
В свое время полнотекстовый поиск зарождался как модуль, состоящий из подключаемых типов и подключаемых индексов. Таких расширений существует достаточно много. Можно упомянуть LTree [9] — это модуль и тип, который позволяет хранить в базе данных деревья и достаточно эффективно с ними работать.
Итак, Postgres позволяет создавать свои типы и функции. В докладе Федор расскажет о том, как это лучше всего делать. Проще всего создать новый тип: для этого достаточно написать две функции, которые превращают простую текстовую строку во внутреннее представление и обратно, и запустить эти функции в жизнь специальной SQL-командой. С этим Postgres уже может жить и реплицироваться. Но, чтобы получить какой-то толк от созданного типа данных, вам потребуется определить над ними какие-то функции и операции. Если нужна индексная поддержка поиска по какой-то операции — тоже потребуется написать несколько функций.
Существуют операции над типами данных, которые являются не слишком тривиальными, такие как близость (похожесть) двух строк. Например, задача поиска — чтобы по фразе «черная дыра» в базе нашлась и «дыра черная». На самом деле, не так просто устранить чередование терминов без потери смысла, и при этом находить нужные строчки (а ведь еще бывают опечатки!). Здесь не вводятся новые типы; вместо этого сравниваются две строки, учитывая меру похожести Левенштейна. Те, кто пробовал с ней работать, знают, что поиск по ней работает только полным перебором. Поэтому в свое время был создан модуль pg_trgm [10], который представляет строку в виде множества триграмм, индексировать эти множества и искать достаточно эффективно.
Также в докладе будет рассказано о возможности использования этого модуля для индексного поиска по некоторым подмножествам регулярных выражений — о том, как можно сделать что-то совершенно необычное со строками, используя уже существующие возможности Postgres. Отдельно будет упомянуто о foreign data wrappers (fdw), обертках над источниками данных, которые не являются самим Postgres. Сейчас этот функционал развился настолько, что поддерживаются даже транзакции.
Ахиллесова пята Postgres — это, как ни странно, подключение новых типов индексов. Операция эта довольно редкая, но заложенная в ней гибкость реализована еще не полностью. В целом, Postgres и без того богат индексами: в нем есть BTree, Rtree, обратный индекс (GIN), обобщенный индекс (GIST), пространственный обобщенный индекс (SP-GIST). Однако иногда возникают задачи, которые не ложатся в традиционную базу данных, например, Блумовские фильтры. На первый взгляд, достаточно создать новый тип индекса и вставить в системный каталог в несколько табличек.
Проблема в том, что такие подключаемые индексы не имеют доступа к WAL (write ahead log), который лежит в основе восстановления после сбоев и репликации. В результате этот индекс не реплицируется вообще, потому что репликация идет через WAL. Для того чтобы новый индекс писался в WAL, необходимо патчить ядро системы, одними расширениями тут не обойтись. Но мы ожидаем, что в версии 9.6 будет реализована возможность подключения индексов с использованием WAL.
Также в своем докладе Федор коснется темы exclusive constraints. Все знают о unique constraints, использующихся, если какое-то поле должно быть уникальным в таблице. Но, например, представьте себе расписание, в котором для каждой лекции указана аудитория, время и длительность. Арендовать аудиторию можно на три часа, а можно на 15 минут. Требуется, чтобы лекции не пересекались в пространстве-времени. Для этого unique constraints, естественно, не подходят. Тут помогут exclusive constraints, чтобы можно было гарантировать, что эти два временных интервала в одной аудитории не пересекаются.
В одной из ближайших статей Олег Царёв, другой PGCONF.RUSSIA 2015 из Mail.Ru Group, расскажет о некоторых принципиальных различиях между MySQL и Postgres и даст несколько советов по миграции с одного на другой. Этот материал будет полезен всем тем, кого уже не устраивают возможности и особенности MySQL, а также тем, кто делает первые шаги в Postgres. Если у вас есть вопросы к Олегу или ко мне — задавайте их в комментариях.
Автор: x-wao
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/postgresql/80666
Ссылки в тексте:
[1] конференция PGCONF.RUSSIA 2015: http://pgconf.ru/
[2] докладе: http://pgconf.ru/paper/2
[3] Японии: http://pgconf.ru/paper/9
[4] Китая: http://pgconf.ru/paper/17
[5] MVCC: http://en.wikipedia.org/wiki/Multiversion_concurrency_control
[6] массивами: http://www.postgresql.org/docs/9.4/static/intarray.html
[7] неструктурированными данными: http://www.postgresql.org/docs/9.4/static/hstore.html
[8] полнотекстового поиска: http://www.postgresql.org/docs/9.4/static/textsearch.html
[9] LTree: http://www.postgresql.org/docs/9.4/static/ltree.html
[10] pg_trgm: http://www.postgresql.org/docs/9.4/static/pgtrgm.html
[11] Источник: http://habrahabr.ru/post/248689/
Нажмите здесь для печати.