PostgreSQL

Кратко въведение

PostgreSQL, известна още като Postgres, е система за управление на релационни бази данни (СУРБД) с отворен код. Произходът на PostgreSQL датира от 1986 г. като част от проекта POSTGRES в Калифорнийския университет в Бъркли и има близо 40 години активна разработка на основната платформа.

Първоначално проектът е наречен POSTGRES, като препратка към по-старата база данни Ingres, но по-късно е преименуван на PostgreSQL, за да се подчертае поддръжката на езика за заявки SQL. Тя поддържа както релационни (SQL), така и нерелационни (JSON) заявки. Използва се главно като основно хранилище на данни или склад за данни (data warehouse) за много уеб, мобилни, геопространствени и аналитични приложения. Поддържа се от всички основни операционни системи – macOS, Linux, Windows.

Как работи?
Подобно на много системи за релационни бази данни, основната архитектура на PostgreSQL следва модела клиент-сървър. Основната програма на PostgreSQL работи като услуга, която е отговорна за дефинирането на структурите от данни, съхраняването на данните и отговарянето на заявки. Този демон (програма, която изпълнява фонови процеси) слуша за връзки от клиенти, които могат да се удостоверят и след това да изпращат инструкции към сървъра. Сървърът отговаря със съобщения, показващи успех, неуспех, резултати от заявката или друга подходяща информация. Тази архитектура позволява на системата PostgreSQL да обслужва много различни клиенти, които могат да се свързват локално или по мрежата. Главният процес на PostgreSQL разклонява (създава нов процес) за всяка получена клиентска връзка. Поради това всяко разклонение е посветено на една единствена клиентска връзка, така че броят на връзките, разклоненията и сесиите на базата данни съвпадат.

В най-простия си вид PostgreSQL, подобно на други релационни бази данни, организира данните в таблици, където всяка таблица се състои от редове (отделни записи) и колони (атрибути или полета). Тези таблици могат да бъдат свързвани чрез ключове, което позволява сложни връзки между данните и ефективни заявки. Въпреки че е предимно релационна база данни, PostgreSQL надхвърля традиционните релационни модели чрез включване на обектно-ориентирани функции. Обектно-ориентираните функции са тези, които позволяват на PostgreSQL да управлява данните по по-сложен и гъвкав начин. Някои от най-използваните и важни възможности са:

  • Поддръжка на JSON - Разширената поддръжка на типове данни JSON позволява ефективна работа с полуструктурирани данни, преодолявайки пропастта между релационните и документно-ориентираните бази данни.
  • Наследяване на таблици - Таблиците могат да наследяват свойства от други таблици, което улеснява повторното използване на структурите от данни в таблиците и опростява управлението на йерархични данни.
  • Потребителски типове данни - Потребителите могат да дефинират свои собствени типове данни, което позволява по-сложни, но прецизни структури от данни, съобразени със специфичните нужди на приложенията.
  • Функции и процедури - PostgreSQL поддържа създаването на функции и съхранени процедури, които могат да бъдат написани на различни езици за програмиране, подобрявайки способността на базата данни да се справя със сложни операции.
  • Пълнотекстово търсене - PostgreSQL предлага стабилни възможности за пълнотекстово търсене, което позволява ефективни операции за търсене в текстови данни.

В по-голямата си част PostgreSQL следва традиционните конвенции за именуване на релационни бази данни по отношение на обектите в базата данни. Въпреки това, един аспект, в който PostgreSQL се отклонява от общоприетите дефиниции, е начинът, по който дефинира схема (schema). Повечето бази данни използват думата "схема", за да обозначат общата структура на базата данни или дефинициите на таблиците в нея. Например, може да видите SQL код, който дефинира таблица за продукти с полета за идентификатор на продукта, описание и брой със съответните ограничения, който да се нарича схема на таблицата за продукти.
Схемата в PostgreSQL обаче е специфичен обект в базата данни, който може да бъде създаван и управляван в рамките на системата. Разбирането на йерархията на обектите в PostgreSQL може да ви помогне да избегнете объркване, докато опознавате системата и четете документацията. Основният "глобален" обект в PostgreSQL е клъстерът на базата данни (database cluster), което е просто името, дадено на съвкупността от бази данни, управлявани от сървъра на PostgreSQL.
Клъстерът на базата данни съдържа бази данни, роли и други "глобални" обекти. Схемите се дефинират в рамките на базите данни като контейнери за таблици, функции, типове данни и оператори. Имената на обектите трябва да са уникални в рамките на една схема, но могат да се използват повторно в различни схеми, което позволява на потребителите да споделят бази данни без конфликти в имената. Те също така помагат за групирането на обекти или управлението на приложения на трети страни чрез сегментиране и изолиране на обекти в базата данни.
Таблиците и другите обекти се създават в рамките на схемите. По подразбиране се използва схема, наречена „public“, при дефиниране на таблици и други обекти, ако не е посочена алтернативна схема. На практика това прави сегментацията с помощта на схеми незадължителна практика. Полезно е да се използват схемите на PostgreSQL в много случаи, но можете и да пренебрегнете това, ако не ви е необходимо.

Предимства

PostgreSQL е определяна като една от най-модерните СУРБД (RDBMS). Със своя богат набор от функции тя предлага широк спектър от предимства за специалистите по данни, започвайки със своя характер на софтуер с отворен код – това може да помогне за намаляване на разходите за предприятия от всякакъв тип и размер. Друго предимство на отворения код е наличието на активна общност, осигуряваща непрекъсната поддръжка и усъвършенстване на продукта.
PostgreSQL блести, когато става въпрос за обработка на големи набори от данни.
Способността ѝ ефективно да управлява терабайти данни я прави подходяща за приложения с големи данни (big data). С функции като разделяне на таблици (table partitioning), паралелно изпълнение на заявки и поддръжка на множество методи за индексиране, PostgreSQL осигурява висока производителност и бързина на реакция, дори когато обемът на данните нараства.

Както вече беше споменато, PostgreSQL е богата на функции, включително пространства за таблици (tablespaces), асинхронна репликация, вложени транзакции (nested transactions), онлайн/горещи резервни копия (online/hot backups) и усъвършенстван планировчик/оптимизатор на заявки.
Тя предоставя богат набор от инструменти за манипулиране и анализ на данни.
Поддръжката ѝ на оконни функции (window functions), общи таблични изрази (CTEs) и разширени агрегации дава възможност на специалистите по данни и разработчиците да извършват сложни анализи. PostgreSQL също така поддържа:

  • Международни набори от символи, многобайтови кодирания на символи и Unicode.
  • Повечето типове данни от SQL:2008, включително INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL и TIMESTAMP.
  • Съхранение на големи двоични обекти, включително снимки, звуци, видео и карти.
    Външни ключове, съединения (joins), изгледи (views), тригери и съхранени процедури.
  • Водещи езици за програмиране и протоколи, включително Python, Java, Perl, .Net, Go, Ruby, C/C++, Tcl и ODBC.

Освен това, PostgreSQL предлага устойчивост на откази и надеждност, тъй като е съвместима с ACID. ACID се отнася до Атомарност (Atomicity), Съгласуваност (Consistency), Изолация (Isolation) и Устойчивост (Durability). По-конкретно, ACID показва, че данните в базата данни са точни, тъй като непълните промени никога не се запазват. Функциите на PostgreSQL като записване в журнал преди промяна (write-ahead logging), контрол на паралелния достъп с множество версии (MVCC) и възстановяване до определен момент във времето (point-in-time recovery) правят възможно съответствието с ACID.


Разработчиците и администраторите използват сървъра на PostgreSQL за изграждане на устойчиви на откази приложения, които защитават целостта и надеждността на данните в по-голяма степен от други SQL бази данни като MariaDB и MySQL.
Когато се използва с разширението PostGIS, PostgreSQL поддържа географски обекти и може да се използва като хранилище на геопространствени данни за услуги, базирани на местоположението, и географски информационни системи (ГИС).


Обвивките за външни данни (Foreign Data Wrappers) и поддръжката на JSON в PostgreSQL ѝ позволяват да се свързва с други хранилища на данни, включително от типа NoSQL. В резултат на това тя може да действа като обединен център (federated hub) за полиглотски системи от бази данни, които използват различни технологии за бази данни за различни случаи на употреба.

Недостатъци

Както всеки продукт, PostgreSQL също има своите недостатъци.
Широкият набор от функции на PostgreSQL може да представлява по-стръмна крива на обучение в сравнение с други по-прости бази данни. Може да се наложи новите потребители да инвестират време в разбирането на сложните ѝ концепции, за да се възползват напълно от възможностите ѝ.

Някои може да се оплачат, че освен поддръжката на JSON, тя не предоставя пълната функционалност на NoSQL база данни, включително автоматично шардиране (sharding) и дизайн без схема (schemaless design), които подобни бази данни предлагат.

Друг проблем може да бъде, че системата се нуждае от допълнителни конфигурации и инструменти като Citus или pgpool, за да позволи ефективно хоризонтално мащабиране. Внедряването на тази система увеличава сложността на разгръщането и управлението. Без допълнителни инструменти тя може да извършва хоризонтално мащабиране само до ограничена степен, което създава трудности при мащабиране на бази данни за обширни приложения и среди с висок трафик.

Въпреки споменатите недостатъци обаче, PostgreSQL продължава да бъде сред най-популярните и усъвършенствани релационни бази данни. Нейният солиден набор от функции, мащабируемост и силна защита на цялостта на данните я правят отличен избор за широк спектър от проекти. Макар да изисква известна индивидуална инвестиция на време за усвояване на управлението ѝ, ползите, които предлага по отношение на управлението на данни, усъвършенстваните анализи и цялостната гъвкавост на проектите, са значителни.

Основни изводи

  • PostgreSQL е зряла релационна база данни с отворен код с близо 40 години разработка, поддържаща както SQL, така и JSON, и е широко използвана в уеб, мобилни, аналитични и геопространствени приложения.
  • Тя работи върху архитектура клиент-сървър, при която всяка клиентска връзка получава свой собствен специализиран процес, осигурявайки стабилност и ясно разделяне на сесиите.
  • Извън традиционните релационни модели, PostgreSQL предлага усъвършенствани обектно-ориентирани функции като потребителски типове данни, наследяване на таблици, съхранени процедури, работа с JSON и пълнотекстово търсене.
  • Нейната система от схеми организира обектите в базата данни в контейнери във всяка база данни, позволявайки чиста структура, съвместна работа и намаляване на конфликтите в имената.
  • Въпреки че PostgreSQL е изключително мощна, мащабируема и съвместима с ACID, тя има по-стръмна крива на обучение и изисква допълнителни инструменти за ефективно хоризонтално мащабиране, но въпреки това остава една от най-надеждните и богати на функции бази данни.

Адрес

Улица Слънце 3, Велико Търново, България

Контакти

Въведете име
Въведете фамилия
Въведете имейл
Невалиден имейл
Въведете съобщение