PostgreSQL обладает весьма развитой функциональностью и пригодна для работы в корпоративной среде, где требуются высокая производительность и масштабируемость. Вокруг PostgreSQL сложилось квалифицированное и радушное сообщество, а документация отличается высочайшим качеством.
История PostgreSQL
СУБД PostgreSQL начиналась как исследовательский проект в Калифорнийском университете в Беркли. С 1996 года она разрабатывалась сообществом, и до сих пор в разработке PostgreSQL принимают активное участие сообщества и университеты. Перечислим основные исторические вехи:
- 1977-1985, проект Ingres: Майкл Стоунбрейкер (Michael Stonebraker) создал РСУБД на основе формальной реляционной модели;
- 1986-1994, postgres: Майкл Стоунбрейкер (Michael Stonebraker) создал postgres, чтобы поддержать сложные типы данных и объектно-реляционную модель;
- 1995, Postgres95: Эндрю Ю (Andrew Yu) и Джолли Чен (Jolly Chen) модифицировали язык запросов PostQUEL, являвшийся частью postgres, превратив его в расширенное подмножество SQL;
- 1996, PostgreSQL: группа разработчиков потратила много времени и труда, чтобы стабилизировать postgres95. Первая версия с открытым исходным кодом была выпущена 29 января 1997 года. Поскольку проект стал открытым и в него были добавлены новые возможности и дополнения, название postgres95 изменили на PostgreSQL.
Первая версия PostgreSQL имела номер 6, что можно оправдать несколькими годами напряженных исследований и разработок. Будучи проектом с очень хорошей репутацией, PostgreSQL привлекла сотни разработчиков. В настоящее время PostgreSQL может похвастаться бесчисленными расширениями и очень активным сообществом.
Преимущества PostgreSQL
PostgreSQL обладает многими возможностями, которые привлекают разработчиков, администраторов, архитекторов и компании.
Преимущества PostgreSQL с точки зрения бизнеса
PostgreSQL - бесплатное ПО с открытым исходным кодом. Она выпускается на условиях весьма либеральной лицензии PostgreSQL. СУБД не может быть монополизирована и приобретена, что дает компаниям следующие преимущества:
- за лицензирование не нужно платить;
- количество развернутых экземпляров PostgreSQL не ограничено;
- более выгодная бизнес-модель;
- PostgreSQL совместима со стандартами SQL, поэтому нетрудно найти профессиональных разработчиков. PostgreSQL несложна для освоения, а перенос кода из другой СУБД обходится недорого. Кроме того, администрирование PostgreSQL легко автоматизировать, что позволяет существенно сэкономить на зарплате персоналу;
- PostgreSQL - кросс-платформенное ПО, к нему существуют интерфейсы из всех современных языков программирования, поэтому нет нужды изменять политику компании в части набора используемого ПО;
- PostgreSQL хорошо масштабируется и обеспечивает высокую производительность;
- PostgreSQL очень надежна, аварийное завершение случается редко. Кроме того, PostgreSQL в полной мере поддерживает свойства ACID, т. е. устойчива к некоторым отказам оборудования. К тому же СУБД можно сконфигурировать и установить как кластер для обеспечения высокой доступности.
Преимущества PostgreSQL с точки зрения пользователя
PostgreSQL весьма привлекательна для разработчиков, администраторов и архитекторов. Развитая функциональность позволяет гибко решать различные задачи. Перечислим некоторые ее преимущества с точки зрения разработчика: О новые версии выходят ежегодно; к настоящему моменту, начиная с версии 6.0, было выпущено 24 основные версии;
- наличие великолепной документации и активного сообщества позволяет быстро находить ответы на возникающие вопросы. Руководство по PostgreSQL насчитывает свыше 2500 страниц;
- богатый арсенал расширений позволяет разработчику сосредоточиться на логике приложения, а также оперативно реагировать на изменение требований;
- исходный код бесплатен. Его можно адаптировать под свои нужды без особого труда;
- развитая экосистема клиентов и административных средств позволяет легко и быстро выполнять такие рутинные задачи, как описание объектов базы данных, экспорт и импорт данных, резервное копирование и восстановление базы;
- решение административных задач не занимает много времени и поддается автоматизации;
- PostgreSQL легко интегрируется с другими СУБД, что открывает возможность для гибкой реализации программных проектов.
Применения PostgreSQL
PostgreSQL применяется в различных ситуациях. Основные области применения PostgreSQL можно отнести к двум категориям:
- обработка транзакций в реальном времени (OLTP): OLTP характеризуется большим количеством операций вставки, обновления и удаления, очень высокой скоростью работы и поддержанием целостности данных в многопользовательской среде. Производительность измеряется количеством транзакций в секунду;
- интерактивная аналитическая обработка (OLAP): OLAP характеризуется небольшим количеством сложных запросов, включающих агрегирование данных, получение гигантских объемов данных из разных источников в разных форматах, добычу данных и анализ исторических данных.
OLTP применяется для моделирования таких приложений, как управление взаимоотношениями с клиентами (CRM). Например, сайт торговли автомобилями из предыдущей статьи - пример OLTP-приложения. OLAP находит применение в задачах бизнес-аналитики, поддержки принятия решений, генерации отчетов и планирования. Размер базы данных для OLTP сравнительно невелик по сравнению с базой данных OLAP. При проектировании базы данных OLTP обычно придерживаются концепций реляционной модели, в т. ч. нормализации, тогда как базы данных OLAP меньше похожи на реляционные; схема часто имеет вид звезды или снежинки, а данные намеренно денормализованы.
В примере сайта торговли автомобилями можно было бы завести вторую базу для хранения исторических данных о продавцах и пользователях, чтобы анализировать предпочтения пользователей и активность продавцов. Это был бы пример OLAP-приложения.
В отличие от OLTP, основная операция OLAP - выборка и анализ данных. Данные для OLAP часто генерируются процессом извлечения, преобразования и очистки (ETL), который загружает данные в базу OLAP из разных источников в разных форматах. Для OLTP-приложений достаточно PostgreSQL в стандартной комплектации. А для поддержки OLAP имеется много расширений и инструментов, в т. ч. адаптеры внешних данных (foreign data wrappers - FDW), секционирование таблиц, а в последних версиях еще и параллельное выполнение запросов.
Истории успеха
PostgreSQL используется во многих отраслях, например телекоммуникации, медицина, географические приложения и электронная коммерция. Есть много компаний, оказывающих коммерческие консультационные услуги, например в переходе с коммерческой РСУБД на PostgreSQL с целью уменьшения лицензионных платежей. Такие компании часто оказывают влияние на развитие PostgreSQL, разрабатывая новые средства. Перечислим несколько компаний, применяющих PostgreSQL:
- в Skype PostgreSQL используется для хранения чатов и истории действий. Компания Skype разработала для PostgreSQL много инструментов под общим названием SkyTools;
- Instagram - социальная сеть для обмена фотографиями;
- Американское химическое общество (ACS) использует PostgreSQL для хранения архивов журнала объемом свыше терабайта.
- Помимо этих компаний, PostgreSQL используется в HP, VMware и Heroku, а также многими научными обществами и организациями, в частности NASA.
Ответвления
Ответвлением называется независимый программный проект, основанный на каком-то другом проекте. От PostgreSQL существует более 20 ответвлений; расширяемый API этому весьма способствует. На протяжении многих лет различные группы создавали ответвления и затем включали результаты своей работы в PostgreSQL.
- HadoopDB - гибрид PostgreSQL с технологиями MapReduce, ориентированный на аналитику. Ниже перечислены наиболее популярные ответвления от PostgreSQL:
- в Greenplum используется архитектура без разделения ресурсов с массово параллельной обработкой (MPP). Применяется для создания хранилищ данных и аналитики. Greenplum начиналась как коммерческий проект, но в 2015 году ее код был раскрыт;
- EnterpriseDB Advanced Server - коммерческая СУБД, дополняющая PostgreSQL средствами Oracle;
- Postgres-XC (eXtensible Cluster) - кластер на основе PostgreSQL с несколькими ведущими узлами, построенный на базе архитектуры без разделения ресурсов. Упор сделан на масштабируемость записи, приложениям предоставляется тот же API, что и в PostgreSQL;
- Vertica - столбцовая база данных, разработка которой была начата Майклом Стоунбрейкером в 2005 году. В 2011 году проект был приобретен компанией HP. Vertica заимствовала у PostgreSQL синтаксический анализатор SQL, семантический анализатор и стандартные методы переписывания SQL-запросов;
- Netezza - популярное хранилище данных, начавшее жизнь как ответвление от PostgreSQL;
- Amazon Redshift - популярное хранилище данных, основанное на Post- greSQL 8.0.2. Предназначено в основном для приложений OLAP.
Архитектура PostgreSQL
В PostgreSQL используется клиент-серверная архитектура, когда клиент и сервер могут находиться в различных узлах. Обмен данными между клиентом и сервером обычно ведется по протоколу TCP/IP или через Linux-сокеты. Сервер PostgreSQL может одновременно обрабатывать несколько подключений клиентов. Типичная программа, работающая с PostgreSQL, состоит из следующих процессов операционной системы:
- клиентский процесс: фронтальная часть приложения отправляет запросы базе данных. В этой роли может выступать веб-сервер, которому нужно построить веб-страницу, или командная утилита для решения задач обслуживания. В состав PostgreSQL входят фронтальные команды
psql
,createdb
,dropdb
,createuser
и другие; - серверный процесс: управляет файлами базы данных, принимает запросы на подключение от клиентов и выполняет действия по их требованию. Серверный процесс называется postgres. PostgreSQL создает новый процесс для каждого подключения, поэтому процессы клиента и сервера общаются между собой, не прерывая главный серверный процесс. Серверные процессы существуют в течение ограниченного времени - до завершения соединения с клиентом.
Описанная концептуальная архитектура PostgreSQL дает представление о возможностях СУБД, а также о взаимодействии с клиентами и операционной системой. В сервере можно приблизительно выделить четыре подсистемы:
- диспетчер процессов: управляет клиентскими подключениями, в частности создает и завершает процессы;
- процессор запросов: запрос, отправленный клиентом PostgreSQL, разбирается синтаксическим анализатором, после чего подсистема регулировщика определяет тип запроса. Служебные запросы передаются служебной подсистеме. Запросы выборки, обновления и удаления модифицируются перезаписывателем, после чего планировщик генерирует план выполнения. Наконец, запрос выполняется, и результат возвращается клиенту;
- служебная подсистема: предоставляет средства обслуживания базы данных, например: затребование места в системе хранения, обновление статистики, экспорт и импорт данных в определенном формате, протоколирование путем обращения к регистратору;
- диспетчер памяти: отвечает за управление кешем и дисковыми буферами, выделяет память.
Почти все компоненты PostgreSQL, включая регистратор, планировщик, анализатор статистики и диспетчер памяти, допускают конфигурирование. Конфигурация PostgreSQL выбирается в соответствии с характером приложения: OLAP или OLTP.
Сообщество PostgreSQL
PostgreSQL располагает весьма активным и организованным сообществом, всегда готовым прийти на помощь. За последние 8 лет сообщество выпустило восемь основных версий. Разработчикам рассылаются объявления в еженедельном бюллетене.
Существуют десятки списков рассылки, сгруппированных по категориям, например: пользователь, разработчик, ассоциация. В качестве примеров упомянем списки pgsql-general, psql-doc и psql-bugs. Для начинающих особенно важен список pgsql-general. В нем обсуждаются любые вопросы, касающиеся установки, настройки, основ администрирования, возможностей PostgreSQL, ведутся дискуссии на общие темы - в общем, всё, кроме ошибок.
Сообщество PostgreSQL поддерживает службу агрегирования блогов Planet PostgreSQL. Некоторые разработчики и компании с ее помощью делятся своими знаниями и опытом.