Titeln är inte clickbait eller hyperbole. Jag avser att bevisa att PostgreSQL genom både design och implementering är objektivt och mätbart en bättre databas än någonting som finns tillgängligt för närvarande, med eller utan hänsyn till pengar.
Hur i hela friden kan jag hävda och motivera ett så högt påstående? Läs vidare, milda nörd. Jag lovar att din tid inte kommer att gå till spillo.
Transparent säkerhet
PostgreSQL har en säkerhetsmaillista. PostgreSQL-projektet lär sig om intrångsvektorerna samtidigt som alla andra gör. Ingenting är dolt, och allt som hittas bearbetas i en takt som får de kommersiella försäljarna att snurra. Låt dig inte luras av kortare defektlistor som publiceras av samma leverantör som tillhandahåller programvaran under granskning.
Detta innebär att alla kända attackvektorer hanteras så snart de är offentliga. Denna typ av säkerhetskänslighet är inte ens tänkbar på den kommersiella marknaden. För kommersiella leverantörer är sekretess tills problemet kan åtgärdas avgörande för åtgärden. PostgreSQL får ingen sådan lättnad, och det är fantastiskt för dig.
Multi-version Concurrency Control är bra för dig
PostgreSQL väljer en metod för samtidighetskontroll som fungerar bäst för höga INSERT- och SELECT-arbetsbelastningar.
Det är mycket lätt att designa för PostgreSQL, med begränsningarna i åtanke för spårningsoverhead för
UPPDATERA och DELETE. För det mesta, om du respekterar dina data, bör du lära dig att älska datasäkerheten som PostgreSQL ger dig .
DDL deltar i transaktioner med PostgreSQL. Migrationer fungerar hela vägen eller ingen väg (den värsta typen av att inte fungera fungerar nästan). Testselar är väldigt lätta att bygga. Behöver du återställa testselen? BACK bara.
PostgreSQL stöder standardkompatibla former av transaktionsisolering, inklusive serialisering, läskommitterad och repeterbar läsning. Dessa metoder ger fullständig ACID-efterlevnad.
PostgreSQL gör allt
Så, du vill ha NoSQL, Riak, REACT, Redis, Mongo, etc.? PostgreSQL gör allt det. Visserligen inte med alla klockor och visselpipor av alla originalprodukter. Till exempel skapar PostgreSQL inte nya skärvor för dig för någon av dessa. Det är fortfarande en manuell process. Men återigen, det finns alltid pg_partman. . .
Vill du ha ett kolumndatalager? Vad sägs om hstore? Vill du inte omskola din personal? Koppla in det språk du väljer och fortsätt åka lastbil. Vill du ha partiell replikering? Streaming Logisk replikering är för dig.
Jag skulle ha svårt att tänka på en funktion som jag vill ha som PostgreSQL inte har, eller som det inte finns ett välkänt tillägg att tillhandahålla.
Vill du extrahera data från andra system? PostgreSQL har den mest levande samlingen av federationsobjekt i alla databaser. De kallar dem främmande dataomslag, och du kan koppla PostgreSQL till en alligator med tejp och dragkedjor. Behandla allt som om det är din data.
Koppla den till en karta
PostGIS-gemenskapen kan utan tvekan vara större än PostgreSQL-gemenskapen själv. Mappningsmöjligheterna hos PostgreSQL sätter den i en klass för sig, även jämfört med mycket dyra alternativ.
PostGIS-projektet valde PostgreSQL som en plattform på grund av den enkla utökningsbarheten och de omfattande databerikningsmöjligheterna. Dessa förmågor är direkt exponerade för alla andra projekt att dra nytta av. De är också obesvarade av någon annan leverantör, kommersiell eller öppen källkod.
I slutändan kan du koppla den till vad som helst.
PostgreSQL växer och leder vägen inom öppen källkod
PostgreSQL-projektet är en av de mest synliga organisationerna inom programvara med öppen källkod. Med en enorm gemenskap och växande i en astronomisk takt, kommer alla brister som den har nu utan tvekan att besegras inom en tidsram som andra leverantörer bara kan drömma om.
Ytterligare kvalitetsfunktioner för företag tillkännages bokstavligen varje dag, och personalen för att underhålla dessa funktioner är självvalda från en pool av genier som alla företag hoppas kunna anställa, och det finns helt enkelt inte tillräckligt att gå runt.
PostgreSQL bygger lösningar som är stabila för alltid
PostgreSQL har logisk replikering inbyggd i kärnan. Detta möjliggör migrering över flera versioner. Läs det igen. Du är inte låst till en specifik hård- eller mjukvaruversion. Lösningen kan uppgraderas på obestämd tid.
PostgreSQL stöds också på många plattformar, inklusive de superstabila versionerna av Linux. Behöver du en lösning som överlever den typiska 3~5-åriga ROI? PostgreSQL kommer att hålla dig för evigt, även om du aldrig uppgraderar hårdvaran alls. Och avgifterna för det är lätta att beräkna. $0.
Deklarativ är bättre än imperativ
Databasspråk är i allmänhet deklarativa. Det vill säga, du skriver en fråga på det inbyggda språk du väljer, och beskriver resultaten som du vill se. Databasen försöker avkoda dina avsikter och ge lämpliga resultat. Detta är grunden för alla deklarativa programmeringsmodeller. I PostgreSQL handlar det om en mappning av funktioner till nyckelord i SQL-språket, ibland med flera algoritmiska val för exakt hur man implementerar varje deklaration.
I det urgamla argumentet om imperativ kontra deklarativ5 programmeringsmodeller, slår det mig att deklarativ programmering bara är imperativ programmering i en tunn förklädnad. Varje deklarativ token i ett databasfrågespråk mappas slutligen till en eller flera algoritmer som tillämpar deklarationen i imperativa termer. Således är impedansmissanpassningen som definieras av Henrietta i slutändan i utvecklarens sinne. Det vill säga, om utvecklaren skulle tänka exakt som databasfunktionsprogrammeraren tänker, så skulle det inte finnas någon missmatchning.
Så hur skulle en deklarativ modell i slutändan kunna vara bättre än en imperativ modell, med tanke på att den ena bara är en kall egenskap hos den andra? Kul att du frågade, för det leder mig till min poäng.
PostgreSQL-utvecklarna är smartare än du. Jag menar det inte för att vara snäll eller modig. Bokstavligen tusentals bidragsgivare har gjort miljontals bidrag till PostgreSQL-projektet, många av dem som förbättringar av andras bidrag. Chansen att det du än tänkt på är bättre än det som redan har implementerats är mycket låg. Och även om dina tankar var bättre, borde du bidra med dem till PostgreSQL-projektet till gagn för alla och på så sätt höja ribban för alla andra.
Så vad gör PostgreSQL så underbart då? Worldwide mindshare utan företagsöverväganden. Tusentals utvecklare arbetar hundratusentals timmar för att göra bättre algoritmiska val. Så din programvara blir bättre för varje version, oftast utan att du behöver göra något särskilt från din sida.
Är det inte mjukvarans natur i allmänhet, säger du? Men ja. Men inte i närheten av den omfattning som det är när hela världen är involverad i ditt projekt. PostgreSQL har en mycket framträdande plats i open source-gemenskapen. Kommersiella leverantörer kommer aldrig att kunna hänga med i den förändringstakt som ett projekt med öppen källkod kan ge på denna nivå. Migreringarna till öppen källkod (och särskilt PostgreSQL) är här för att bevisa det.
Funktionerna fortsätter att rulla in. Det finns väldigt få saker kvar som kommersiella leverantörer kan peka på som en distinkt fördel. Bland dessa saker är SMP-stöd, dubbelriktad replikering och externa verktyg. Gissa vad communityn arbetar med nu och kommer med stor sannolikhet att släppas inom de närmaste åren?
Utöka PostgreSQL som du vill
PostgreSQL har en levande gemenskap av författare som skriver tilläggsprogramvara. Detta inkluderar att plugga in vilket språk du vill och använda det för att utöka PostgreSQL på något sätt som verkar användbart. Råkar du gilla perl string hantering? Okej, använd det då. Vad sägs om Python-kartastöd? Visst, koppla bara in python och gå till stan. Vill du skriva webbtjänster med en PostgreSQL-backend? Det är fantastiskt, och PostgreSQL kommer att hjälpa. JSON? Ok. XML? Det kan du ge dig på. PostgreSQL har direkt stöd för allt detta och oändligt mycket mer. Om du kan tänka dig ett språk som gör det bra, koppla in det till PostgreSQL så kan du ha det på serversidan.
Du kan skapa dina egna funktioner, datatyper, operatorer, aggregat, fönsterfunktioner eller i stort sett vad som helst annat. Ser du inte en funktion du gillar? Plagiera och anpassa den från källkoden. Du är fri att göra det på grund av licensen.
PostgreSQL tillhandahåller också några hook-funktioner som gör att du kan utöka databasen utan att behöva gå till programmeringsextremer.
Denna förmåga att tillgodogöra sig vilken funktion som helst av något annat språk är unik för PostgreSQL. Du kan tillhandahålla vilken funktion som helst med vilket standardiserat bibliotek som helst. Du kan följa standarderna, hänga med i förändringar, fortfarande uppdatera PostgreSQL medan den är vid liv, och du kan göra allt gratis.
Bli stor och bred
PostgreSQL har flera funktioner för att få ut det mesta av hårdvaruplattformen som den har fått. Partitionering, parallell exekvering, partiella index, tabellutrymmen, cachelagring och parallella icke-blockerande underhållsrutiner (nästan allt i PostgreSQL har fått nyckelordet CONCURRENTLY på sistone).
När det inte räcker för dig, kommer fysisk streaming-replikering att göra ett gäng läs-standby för dig till ett billigt pris. Sharding, memcache, köbildning, lastbalansering och anslutningspooling fungerar allt med PostgreSQL. Fortfarande inte tillräckligt? Vad sägs om logisk strömmande replikering? Du vill geosharda databasen över hela världen, säger du? Tja, välkommen till dubbelriktad replikering.
Och prislappen är fortfarande $0.
Indexera allt det
PostgreSQL stöder en så enorm lista med index att det förvirrar sinnet att ta reda på hur man använder dem alla. GiST, SP-Gist, KNN Gist, GIN, BRIN och Btree är alla tillgängliga. Och det finns mer att hämta genom tilläggssystemet, som Bloom-filter och andra.
PostgreSQL kan använda dessa med funktionsdrivna index, partiella index, täckande index och fulltextsökning. Och dessa utökade funktioner utesluter inte varandra. Du kan använda dem alla samtidigt.
Rulla in, rulla ut
Flera av de tekniker som redan nämnts gör PostgreSQL till en fantastisk dataintegrations- och distributionsplattform. Flera former av replikering i kombination med flera former av federation ger både push- och pull-tekniker för nästan alla typer av datasystem.
Dessa kan kombineras i oändliga konfigurationer för att överbrygga databaslagringslösningar. Allt detta utan att kräva något ETL/ELT-bearbetningspaket. PostgreSQL gör det bara. Den snabbaste enstaka sanningskällasdatabasen på planeten gör det genom att inte flytta ut data från källsystemet alls. Detta innebär att data alltid är aktuell och svarstiderna kan hanteras.
Om du inte kan stå ut med opålitligheten i källsystemet eller om du vill ha lite bättre prestanda på frågesidan, kan du fortfarande cachelagra data med jämna mellanrum med materialiserade vyer, som kan uppdateras medan de fortfarande efterfrågas.
Licensen är vidöppen
PostgreSQL har sin egen licens som till stor del är baserad på BSD-licensen. Detta möjliggör ännu större användnings- och distributionsfrihet.
Licensen gäller all kod för huvudprojektet, större bidragstillägg, klientbibliotek, anslutningshanterare och de flesta associerade verktyg.
Den är mycket tillåtande, skriven på vanlig engelska och kan inte köpas.
Fantastisk dokumentation
PostgreSQL-projektet kräver att alla utvecklare som skickar in kod tillhandahåller dokumentation för förslaget. Detta förslag används för att skapa dokumentationen för funktionen som görs tillgänglig i flera format. Denna dokumentation används också i utvärderingen av själva funktionen och som referens för att utveckla framtida funktioner.
Sammantaget betyder detta att PostgreSQL lever på dokumentation. Det finns många utvecklare för PostgreSQL som har lärt sig att koda i C, hur databaser fungerar och hur projekt hanteras genom att arbeta med PostgreSQL-projektet. Denna dokumentation är oöverträffad.
Testdriven utveckling
PostgreSQL testas omfattande. Nej, det säger det inte tillräckligt starkt. PostgreSQL är uttömmande testad. Varje bugg möts av ett test för att verifiera att det finns, och kod skrivs för att uppfylla testet. Nya funktioner skrivs genom att tester (och dokumentation) skapas först och sedan kodas tills funktionen dyker upp.
Dessa tester är integrerade i byggfarmen för regression, så buggar (åter) dyker inte upp i framtida versioner av PostgreSQL. Det betyder att varje test (som fortfarande är aktuellt) körs för varje version av PostgreSQL för varje byggcykel. Det är mycket testning, och det säkerställer att PostgreSQL förblir den mest stabila databasen som finns tillgänglig.
PostgreSQL släpps bara när ALLA regressionstesten är godkända. Detta tillhandahåller "0 känd bugg"-utgåvor.
Internationalisering och lokalisering
Utvecklarna av PostgreSQL kommer från hela världen. De har arbetat på många inhemska språk sedan starten av PostgreSQL som ett högskoleprojekt. Internationalisering och lokalisering har byggts in i PostgreSQL som en standardpraxis, inte en bult på när PostgreSQL började attrahera en kommersiell global marknad.
Medan PostgreSQL delegerar en del av internationaliseringen till operativsystemet av kompatibilitetsskäl, är mycket av översättningen inbäddad i systemet, vilket ger en sömlös språkövergångsupplevelse.
Mondrift
PostgreSQL arbetar i molnarkitekturer med hjälp av ansible, kubernetes och proprietära verktyg från flera molnleverantörer. Det finns flera inbyggda molnimplementationer att välja mellan för att matcha din arkitektur.
Om du vill behandla servrar som boskap, inte husdjur, har PostgreSQL dig också täckt av molnet.
Standardöverensstämmelse
PostgreSQL har varit standardfokuserad under projektets livstid. Sedan PostgreSQL har sitt ursprung i ett universitetsexamensprogram har det använts som referensimplementering för många SQL-standarder.
PostgreSQL implementerar SQL/Med och ANSI SQL.
Enligt den fantastiska dokumentationen, "PostgreSQL stöder de flesta av de viktigaste funktionerna i SQL:2016. Av 179 obligatoriska funktioner som krävs för full Core-överensstämmelse, överensstämmer PostgreSQL med minst 160." Detta är mer än nästan någon annan databasmotor.
Språkfunktioner
PostgreSQL implementerar vanliga tabelluttryck (CTE), språkkontrollstrukturer (if, for, case, etc.), strukturerad felhantering och alla de godbitar du kan förvänta dig av ett moget procedurspråk.
Är du övertygad ännu?
Jag skulle fortfarande kunna prata om den fantastiska gemenskapen av användargrupper, IRC-kanaler, webbsidor med lösningar, bloggartiklar och mentorer. Jag skulle kunna bli filosofisk över hur databasen är plattformsoberoende, gränsöverskridande arkitektur och gränsöverskridande kultur. Det finns timmar efter timmar med presentationer, videor och föreläsningar.
Eller så kan du bara ladda ner den och se om den är större än din fantasi. Jag tror att du kommer att bli mycket positivt överraskad.