В последнее время встречаю много интересных статей на английском языке. Решил переводить их для тех, у кого с английским плохо. Т.к. время у разработчика обычно ограниченно, решил обратиться к знакомой за переводом. Встречайте первую совместную работу с Александрой (http://perevoding.ru/): «Why Postgres«. Периодически будем переводить статьи. Комментарии по переводу приветствуются.
————————————————————
30 апреля 2012 года
Данный пост является перечнем множества причин в пользу использования Postgres, большая часть приведенной информации и описание того, как пользоваться данными свойствами, позже будет протестировано на сайте PostgresGuide.com. Если вам необходимо начать работу, попробуйте наше приложение Postgres.app для Mac или получите бесплатно «облачную систему» на Heroku Postgres.
В последнее время я довольно часто замечаю за собой, что я объясняю, чем так замечателен Postgres. В целях экономии времени я не буду повторять это вновь, я думаю, что лучше суммировать, чем он хорош, и опровергнуть некоторые исторические аргументы против него.
Репликация (Replication)
На протяжении некоторого времени самым существенным аргументом в пользу MySQL против Postgres был недостаток качественной репликации для Postgres. С выходом Postgres 8.4 ситуация с репликацией стала гораздо лучше.
Тогда как репликация действительно крайне важна, на самом ли деле пользователи каждый раз настраивают репликацию в MySQL или это лишь для того, чтобы иметь возможность сделать это позже?
Оконные функции (Window functions)
Данная функция, представленная в Oracle, абсолютно отсутствует в Postgres. Фактически в некоторой форме она присутствует даже в SQL сервере, хотя более усложненной эта функция стала в T-SQL. Эта именно такая функция, без которой вы уже не сможете обходиться, однажды попробовав; другие существовавшие ранее функции были медленнее и гораздо более сложными. С выходом версии 8.4 оконные функции были добавлены в нее для того, чтобы уровнять в этом плане Postgres с Oracle. Для более подробной информации об использовании этих функций просмотрите документы о Postgres выше или на PostgresGuide.com.
Гибкие типы данных (Flexible Datatypes)
В Postgres создание настраиваемого столбца гораздо проще, чем в любой другой базе данных из тех, что я использовал. За исключением специализированных типов данных, даже инновационные типы данных в Postgres значительно выделяют его из других баз данных. В частности это возможность создавать столбец как Массив некоторого типа данных. Хотите сохранить игру в крестики-нолики в базе данных или массив из номеров телефонов одного пользователя? Все это становится одной колонкой, которая может содержать любое количество номеров телефонов какого-либо пользователя.
Функции (Functions)
Необходимо создать логический узел за пределами стандартной SQL? В Postgres есть функция, которая поможет вам сделать это. А что на счет времени, необходимого на то, чтобы получить все записи, возвращаемые запросом, и объединить их в функцию? Задайте array_agg a look. В случае необходимости разделения строки и перемещения ее части или выполнения какого-либо другого действия со строкой можно воспользоваться существующей для этого функцией.
Пользовательские языки (Custom Languages)
Вы хотите использовать в своей базе данных другой язык? Вероятно, Postgres поддерживает следующие:
Расширения (Extensions)
Необходимо выйти за стандарты Postgres? Существует отличная вероятность того, что кто-то другой уже сделал это, и уже есть расширение для этого. Расширения позволяют выйти за пределы Postgres в отношении таких вещей как геопространственная поддержка, типы данных JSON, проекты распределенных хранилищ и подключение к внешним источникам данных (Oracle, MySQL, Redis). Я с легкостью смог бы написать целый пост о возможных расширениях, но к счастью кто-то другой уже создал один такой PostgreSQL Most Useful Extensions.
NoSQL придает гибкость (NoSQL gives flexibility)
Я не хочу углубляться в спор «NoSQL против SQL»… вне зависимости от того, чью сторону вы принимаете, вы можете использовать оба из них в Postgres. С hstore и PLV8 вы получите гибкость ваших данных, которые будут работать с Mongo и всеми вышеописанными характеристиками. Недавно Уилл Лейнвебер на нескольких конференциях осветил в своей речи Schemaless SQL.
Пользовательские функции (Custom Functions)
Вы не нашли нужную вам функцию выше? Попробуйте создать ее самостоятельно.
CREATE FUNCTION awesomeness(varchar) RETURNS boolean
AS 'CASE WHEN $1 == \'postgres\' THEN TRUE ELSE FALSE END;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
Пользовательские значения таблиц (Common Table Expressions)
Зачастую исследуя данные или создавая новое представление, вы хотите загрузить данные во временную таблицу. Когда вы исследуете данные, вам необходимо сделать это только на некоторый промежуток времени. Но зачем же, собственно говоря, пытаться поместить их во временную таблицу, особенно если это необходимо сделать лишь для одного запроса. Пользовательские значения таблиц с легкостью позволяют вам сделать это.
Темы разработки (Development Pace)
На протяжении некоторого времени MySQL и Postgres развивались одинаково быстро. Хотя в последние годы Postgres заметно ускорил процесс выпуска отдельных релизов. Взгляните на основные релизы.
Заключение
Надеюсь, что вы убедились в том, почему Postgres является отличным инструментом. В случае если вам необходимо понять, с чего начать или как использовать описанные выше функции, посетите Руководство по Postgres.
Добавить комментарий