Заглавието не е кликбейт или хипербола. Възнамерявам да докажа, че по силата както на дизайна, така и на внедряването, PostgreSQL е обективно и измеримо по-добра база данни от всичко налично в момента, със или без съображения за пари.
Как, за бога, мога да твърдя и оправдавам такова високо твърдение? Чети, нежни маниак. Обещавам, че времето ви няма да бъде загубено.
Прозрачна сигурност
PostgreSQL има пощенски списък за сигурност. Проектът PostgreSQL научава за векторите на проникване едновременно с всички останали. Нищо не е скрито и всичко, което е намерено, се работи с темп, който кара главите на търговските доставчици да се въртят. Не се заблуждавайте от по-кратки списъци с дефекти, публикувани от същия доставчик, който предоставя софтуера под наблюдение.
Това означава, че всички известни вектори на атака се обработват веднага след като бъдат оповестени публично. Този вид отзивчивост на сигурността дори не е замислена на търговския пазар. За търговските доставчици секретността, докато проблемът може да бъде решен, е жизненоважна за отстраняването. PostgreSQL не получава такова облекчение и това е фантастично за вас.
Многоверсионният контрол на едновременността е добър за вас
PostgreSQL избира метод за контрол на паралелността, който работи най-добре за големи натоварвания INSERT и SELECT.
Много е лесно да се проектира за PostgreSQL, като се имат предвид ограниченията за допълнителните разходи за проследяване за
АКТУАЛИЗИРАНЕ и ИЗТРИВАНЕ. Най-вече, ако уважавате данните си, трябва да се научите да обичате сигурността на данните, която PostgreSQL ви предоставя.
DDL участва в транзакции с помощта на PostgreSQL. Миграциите работят докрай или изобщо (най-лошият вид да не работи е почти работещ). Тестовите колани са мъртви лесни за изграждане. Трябва да нулирате сбруя за тестване? Просто ВРЪЩАНЕ.
PostgreSQL поддържа съвместими със стандартите форми на изолиране на транзакции, включително сериализация, четене, ангажирано и повтарящо се четене. Тези методи осигуряват пълно съответствие с ACID.
PostgreSQL прави всичко
И така, искате NoSQL, Riak, REACT, Redis, Mongo и т.н.? PostgreSQL прави всичко това. Разбира се, не с всички звънци и свирки на всички оригинални продукти. Например, PostgreSQL не създава нови фрагменти за вас за нито един от тях. Това все още е ръчен процес. Но отново, винаги има pg_partman. . .
Искате ли колона за съхранение на данни? Какво ще кажете за hstore? Не искате да преквалифицирате персонала си? Включете езика по ваш избор и продължете да превозвате. Искате частична репликация? Поточното логическо репликация е за вас.
Трудно бих се сетил за функция, която искам, която PostgreSQL няма, или че няма добре познато разширение, което да предоставя.
Искате ли да извлечете данни от други системи? PostgreSQL има най-ярката колекция от обекти на федерация от всяка база данни. Наричат ги чужди опаковки за данни и можете да закачите PostgreSQL към алигатор с тиксо и връзки с цип. Третирайте всичко така, сякаш това са ваши данни.
Закачете го към карта
Общността на PostGIS може да е по-голяма от самата PostgreSQL общност. Възможностите за картографиране на PostgreSQL го поставят в отделен клас, дори в сравнение с много скъпи алтернативи.
Проектът PostGIS избра PostgreSQL като платформа поради лекотата на разширяемост и обширните възможности за обогатяване на данни. Тези възможности са директно изложени за всеки друг проект, от който да се възползва. Те също не са отговорени от друг доставчик, търговски или с отворен код.
В крайна сметка можете да го свържете с всичко.
PostgreSQL се разраства и е водеща в отворения код
Проектът PostgreSQL е една от най-видимите организации в софтуера с отворен код. С огромна общност и растяща с астрономически темпове, всички недостатъци, които има сега, вероятно ще бъдат преодолени във времеви рамки, за които другите доставчици могат само да мечтаят.
Допълнителни функции за корпоративно качество се обявяват буквално всеки ден, а персоналът, който да поддържа тези функции, се избира самостоятелно от група гении, които всяка компания се надява да наеме, и просто няма достатъчно, за да обикаляте.
PostgreSQL изгражда решения, които са стабилни завинаги
PostgreSQL има логическа репликация, вградена в ядрото. Това позволява миграции на кръстосани версии. Прочетете това отново. Не сте заключени в конкретна версия на хардуера или софтуера. Решението може да се надгражда за неопределено време.
Също така, PostgreSQL се поддържа на много платформи, включително супер-стабилните версии на Linux. Имате ли нужда от решение, което надживява типичната възвръщаемост на инвестициите за 3-5 години? PostgreSQL ще ви издържи завинаги, дори ако изобщо не надграждате хардуера. И таксите за това са лесни за изчисляване. $0.
Декларативното е по-добре от императивното
Езиците на базите данни обикновено са декларативни. Тоест, вие пишете заявка на вградения език по ваш избор, описвайки резултатите, които искате да видите. Базата данни се опитва да декодира вашите намерения и да предостави подходящите резултати. Това е основата на всички модели на декларативно програмиране. В PostgreSQL това се свежда до съпоставяне на функции с ключови думи в SQL езика, понякога с няколко алгоритмични избора за това как точно да се реализира всяка декларация.
В вековния спор за императивните срещу декларативните5 модели на програмиране ми хрумва, че декларативното програмиране е просто императивно програмиране под тънка маскировка. Всеки декларативен маркер в език за заявки към база данни в крайна сметка се съпоставя с един или няколко алгоритма, които прилагат декларацията в императивни термини. По този начин несъответствието на импеданса, определено от Хенриета, в крайна сметка е в съзнанието на разработчика. Тоест, ако разработчикът мисли точно както мисли програмистът на функциите на базата данни, тогава няма да има несъответствие.
И така, как един декларативен модел в крайна сметка може да бъде по-добър от империтивния модел, като се има предвид, че единият е просто привиквателна характеристика на другия? Радвам се, че попитахте, защото това ме довежда до моята точка.
Разработчиците на PostgreSQL са по-умни от вас. Нямам предвид това да бъда шеговит или смел. Буквално хиляди сътрудници са направили милиони приноси към проекта PostgreSQL, много от тях като подобрения в приноса на други. Шансовете това, което сте измислили на върха на главата си, е по-добро от това, което вече е приложено, е много малък. И дори ако мислите ви бяха по-добри, трябва да ги допринесете за проекта PostgreSQL в полза на всички, като по този начин вдигнете летвата за всички останали.
И така, какво прави PostgreSQL толкова прекрасен тогава? Споделяне на ума в световен мащаб без корпоративни съображения. Хиляди разработчици работят стотици хиляди часове, за да направят по-добър алгоритмичен избор. Така вашият софтуер става по-добър с всяка версия, най-често без да се налага да правите нещо конкретно от ваша страна.
Не е ли това естеството на софтуера като цяло, казвате? Е да. Но не до такава степен, в която целият свят участва във вашия проект. PostgreSQL се радва на много видно място в общността с отворен код. Търговските доставчици никога няма да могат да се справят със скоростта на промяна, която проектът с отворен код може да осигури на това ниво. Миграциите към отворен код (и особено PostgreSQL) са тук, за да го докажат.
Функциите продължават да се въвеждат. Остават много малко неща, които търговските доставчици могат да посочат като ясно предимство. Сред тези неща са поддръжка на SMP, двупосочна репликация и външни инструменти. Познайте върху какво общността работи сега и много вероятно ще бъде пусната през следващите няколко години?
Разширете PostgreSQL както желаете
PostgreSQL има оживена общност от автори, които пишат спомагателен софтуер. Това включва включването на всеки език, който харесвате, и използването му за разширяване на PostgreSQL по всякакъв начин, който изглежда полезен. Случайно харесвате ли обработката на низове в perl? Добре, тогава използвайте това. Какво ще кажете за поддръжката на карти на Python? Разбира се, просто включете python и отидете в града. Искате да пишете уеб услуги с помощта на PostgreSQL backend? Това е страхотно и PostgreSQL ще помогне. JSON? Добре. XML? Вие залагате. PostgreSQL има директна поддръжка за всичко това и безкрайно повече. Ако се сетите за език, който го прави добре, включете го в PostgreSQL и можете да го имате от страната на сървъра.
Можете да създавате свои собствени функции, типове данни, оператори, агрегати, функции на прозорци или почти всичко друго. Не виждате функция, която харесвате? Плагиатизирайте и го персонализирайте от изходния код. Свободни сте да направите това поради лиценза.
PostgreSQL също така предоставя някои хук функции, които ви позволяват да разширите базата данни, без да се налага да отивате до крайности в програмирането.
Тази способност за усвояване на всяка функция на всеки друг език е уникална за PostgreSQL. Можете да предоставите всяка функция, като използвате всяка съществуваща стандартизирана библиотека. Можете да следвате стандартите, да сте в крак с промените, да актуализирате PostgreSQL, докато е жив, и можете да правите всичко безплатно.
Бъдете големи и разширете
PostgreSQL има няколко функции, за да се възползвате максимално от хардуерната платформа, която му е предоставена. Разделяне на дялове, паралелно изпълнение, частични индекси, пространства за таблици, кеширане и паралелни неблокиращи процедури за поддръжка (напоследък почти всичко в PostgreSQL ражда ключовата дума CONCURRENTLY).
Когато това не е достатъчно за вас, тогава физическото поточно репликация ще ви направи куп четене в режим на готовност на евтино. Sharding, memcache, опашка, балансиране на натоварването и обединяване на връзки всички работят с PostgreSQL. Все още не е достатъчно? Какво ще кажете за логическото поточно репликация? Искате да геошардирате базата данни по целия свят, казвате? Добре дошли в двупосочната репликация.
А цената все още е $0.
Индексирайте всичко това
PostgreSQL поддържа толкова огромен списък от индекси, че учудва ума да разбере как да ги използва всички. GiST, SP-Gist, KNN Gist, GIN, BRIN и Btree са налични. И има още какво да имате чрез системата за разширение, като филтри Bloom и други.
PostgreSQL може да ги използва с индекси, управлявани от функции, частични индекси, покриващи индекси и пълно текстово търсене. И тези разширени функции не се изключват взаимно. Можете да ги използвате всички едновременно.
Развийте го, разточете го
Няколко от вече споменатите технологии правят PostgreSQL фантастична платформа за интеграция и разпространение на данни. Множество форми на репликация, съчетани с множество форми на федерация, осигуряват едновременно push и pull технологии за почти всякакъв вид система за данни.
Те могат да се комбинират в безкрайни конфигурации за свързване на решения за съхранение на бази данни. Всичко това, без да се изисква пакет за обработка на ETL/ELT. PostgreSQL просто го прави. Най-бързият единичен източник на база данни за истина на планетата го прави, като изобщо не премества данните извън системата на източника. Това означава, че данните са винаги актуални и времето за отговор може да се управлява.
Ако не можете да понесете ненадеждността на изходната система или искате малко по-добра производителност от страна на заявката, можете също така периодично да кеширате данните с материализирани изгледи, които могат да бъдат актуализирани, докато все още се отправят заявки.
Лицензът е широко отворен
PostgreSQL има собствен лиценз, който до голяма степен се основава на BSD лиценза. Това позволява още по-голяма свобода на използване и разпространение.
Лицензът се прилага за целия код на основния проект, основни разширения за принос, клиентски библиотеки, мениджъри на връзки и повечето от свързаните инструменти.
Той е силно разрешителен, написан на обикновен английски и не е достъпен за закупуване.
Фантастична документация
Проектът PostgreSQL изисква всеки разработчик, който изпраща код, да предостави документация за предложението. Това предложение се използва за създаване на документация за функцията, която е достъпна в няколко формата. Тази документация се използва и при оценката на самата функция и като препратка за разработване на бъдещи функции.
Всичко заедно това означава, че PostgreSQL живее върху документацията. Има много разработчици за PostgreSQL, които са се научили да кодират на C, как работят базите данни и как се управляват проектите чрез работа с проекта PostgreSQL. Тази документация е ненадмината.
Тестова разработка
PostgreSQL е широко тестван. Не, това не го казва достатъчно силно. PostgreSQL е изчерпателно тестван. Всяка грешка се среща с тест, за да се потвърди съществуването му, и се пише код, за да удовлетвори теста. Новите функции се записват първо чрез създаване на тестове (и документация), след което се кодират, докато функцията се появи.
Тези тестове са интегрирани във фермата за изграждане за регресия, така че грешките не се появяват (повторно) в бъдещите версии на PostgreSQL. Това означава, че всеки тест (който все още е актуален) се изпълнява за всяка версия на PostgreSQL за всеки цикъл на изграждане. Това е много тестване и гарантира, че PostgreSQL остава най-стабилната база данни, която е налична.
PostgreSQL се освобождава само когато ВСИЧКИ регресионни тестове преминат. Това осигурява "0 известни грешки" издания.
Интернационализация и локализация
Разработчиците на PostgreSQL идват от цял свят. Те работят на много родни езици от началото на PostgreSQL като проект за завършили колеж. Интернационализацията и локализацията са включени в PostgreSQL като стандартна практика, а не като болт, тъй като PostgreSQL започна да привлича търговски глобален пазар.
Докато PostgreSQL делегира част от интернационализацията на операционната система от съображения за съвместимост, голяма част от превода е вграден в системата, осигурявайки безпроблемно изживяване при преход на език.
Облачна работа
PostgreSQL работи в облачни архитектури, използвайки ansible, kubernetes и собствени инструменти от множество доставчици на облак. Има няколко собствени облачни реализации, от които да избирате, за да съответстват на вашата архитектура.
Ако искате да третирате сървърите като едър рогат добитък, а не като домашни любимци, PostgreSQL ще ви покрие и в облака.
Съответствие на стандартите
PostgreSQL е стандарт, фокусиран за целия живот на проекта. Тъй като PostgreSQL произхожда от университетска дипломна програма, той е бил използван като референтна реализация за много SQL стандарти.
PostgreSQL внедрява SQL/Med и ANSI SQL.
Според фантастичната документация „PostgreSQL поддържа повечето от основните характеристики на SQL:2016. От 179 задължителни функции, необходими за пълно съответствие на Core, PostgreSQL отговаря на поне 160.” Това е повече от почти всяка друга машина за бази данни.
Езикови функции
PostgreSQL внедрява общи изрази за таблици (CTE), структури за контрол на езика (if, for, case и др.), структурирана обработка на грешки и всички екстри, които бихте очаквали от зрял процедурен език.
Убедихте ли се вече?
Все още мога да говоря за фантастичната общност от потребителски групи, IRC канали, уеб сайтове с решения, статии в блогове и ментори. Бих могъл да бъда философски за начина, по който базата данни е междуплатформена, кръстосана архитектура и междукултура. Има часове и часове на презентации, видеоклипове и лекции.
Или можете просто да отидете да го изтеглите и да видите дали е по-голям от вашето въображение. Мисля, че ще бъдете много приятно изненадани.