sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL is 's werelds beste database

De titel is geen clickbait of hyperbool. Ik ben van plan te bewijzen dat PostgreSQL door zowel ontwerp als implementatie objectief en meetbaar een betere database is dan alles wat momenteel beschikbaar is, met of zonder financiële overwegingen.

Hoe ter wereld kan ik zo'n verheven uitspraak claimen en rechtvaardigen? Lees verder, vriendelijke nerd. Ik beloof dat je tijd niet verspild zal worden.

Transparante beveiliging

PostgreSQL heeft een beveiligingsmailinglijst. Het PostgreSQL-project leert over de inbraakvectoren op hetzelfde moment als alle anderen. Niets is verborgen en aan alles wat wordt gevonden, wordt gewerkt met een snelheid die de hoofden van de commerciële verkopers doet tollen. Laat u niet misleiden door kortere defectlijsten die zijn gepubliceerd door dezelfde leverancier die de onderzochte software levert.

Dit betekent dat alle bekende aanvalsvectoren worden afgehandeld zodra ze openbaar worden gemaakt. Dit soort reactievermogen op beveiliging is zelfs niet denkbaar in de commerciële markt. Voor commerciële leveranciers is geheimhouding totdat het probleem kan worden opgelost, van vitaal belang voor de oplossing. PostgreSQL krijgt niet zo'n opluchting, en dat is fantastisch voor jou.

Gelijktijdigheidscontrole met meerdere versies is goed voor u

PostgreSQL kiest een methode voor gelijktijdigheidscontrole die het beste werkt voor hoge INSERT- en SELECT-workloads.

Het is heel eenvoudig te ontwerpen voor PostgreSQL, rekening houdend met de beperkingen voor de tracking-overhead voor

BIJWERKEN en VERWIJDEREN. Als u uw gegevens respecteert, moet u vooral leren houden van de gegevensbeveiliging die PostgreSQL u biedt.

DDL neemt deel aan transacties met PostgreSQL. Migraties werken helemaal of helemaal niet (de ergste vorm van niet werken is bijna werken). Testharnassen zijn doodeenvoudig te bouwen. Wilt u het testharnas resetten? Gewoon ROLLBACK.

PostgreSQL ondersteunt standaardconforme vormen van transactie-isolatie, inclusief serialisatie, read-commited en herhaalbare read. Deze methoden bieden volledige ACID-conformiteit.

PostgreSQL doet alles

Dus je wilt NoSQL, Riak, REACT, Redis, Mongo, enz.? PostgreSQL doet dat allemaal. Toegegeven, niet met alle toeters en bellen van alle originele producten. PostgreSQL maakt bijvoorbeeld voor geen van deze nieuwe shards voor u. Dat is nog steeds een handmatig proces. Maar nogmaals, er is altijd pg_partman. . .

U wilt een kolomgegevensarchief? Hoe zit het met hstore? Wilt u uw personeel niet omscholen? Sluit de taal van uw keuze aan en blijf rijden. U wilt een gedeeltelijke replicatie? Streaming Logische replicatie is iets voor jou.

Ik zou het moeilijk vinden om een ​​functie te bedenken die ik wil en die PostgreSQL niet heeft, of die geen bekende extensie kan bieden.

Wil je data uit andere systemen halen? PostgreSQL heeft de meest levendige verzameling federatieve objecten van alle databases. Ze noemen ze buitenlandse datawrappers, en je kunt PostgreSQL aan een alligator haken met ducttape en kabelbinders. Behandel alles alsof het uw gegevens zijn.

Hang het aan een kaart

De PostGIS-gemeenschap is mogelijk groter dan de PostgreSQL-gemeenschap zelf. Dankzij de kaartmogelijkheden van PostgreSQL is het een klasse apart, zelfs in vergelijking met zeer dure alternatieven.

Het PostGIS-project koos PostgreSQL als platform vanwege het gemak van uitbreidbaarheid en de uitgebreide mogelijkheden voor gegevensverrijking. Deze mogelijkheden worden direct zichtbaar voor elk ander project om van te profiteren. Ze worden ook niet beantwoord door andere leveranciers, commerciële of open source.

Uiteindelijk kun je het overal op aansluiten.

PostgreSQL groeit en loopt voorop in open source

Het PostgreSQL-project is een van de meest zichtbare organisaties in open source software. Met een enorme gemeenschap en groeiend in een astronomisch tempo, zullen alle tekortkomingen die het nu heeft aantoonbaar worden verholpen in een tijdsbestek waar andere leveranciers alleen maar van kunnen dromen.

Extra bedrijfskwaliteitsfuncties worden letterlijk elke dag aangekondigd, en het personeel dat deze functies onderhoudt, wordt zelf geselecteerd uit een pool van genieën die elk bedrijf hoopt aan te nemen, en er zijn gewoon niet genoeg om rond te komen.

PostgreSQL bouwt oplossingen die voor altijd stabiel zijn

PostgreSQL heeft logische replicatie ingebouwd in de kern. Dit maakt migraties tussen verschillende versies mogelijk. Lees dat nog eens. U zit niet vast aan een specifieke hardware- of softwareversie. De oplossing kan onbeperkt worden geüpgraded.

PostgreSQL wordt ook op veel platforms ondersteund, waaronder de superstabiele versies van Linux. Heeft u een oplossing nodig die de typische ROI van 3 tot 5 jaar overleeft? PostgreSQL gaat voor altijd mee, zelfs als u de hardware helemaal niet opwaardeert. En de kosten daarvoor zijn eenvoudig te berekenen. $0.

Declaratief is beter dan imperatief

Databasetalen zijn over het algemeen declaratief. Dat wil zeggen, u schrijft een query in de ingebouwde taal van uw keuze en beschrijft de resultaten die u graag zou willen zien. De database probeert uw bedoelingen te ontcijferen en de juiste resultaten te geven. Dit is de basis van alle declaratieve programmeermodellen. In PostgreSQL komt dit neer op het toewijzen van functies aan trefwoorden in de SQL-taal, soms met verschillende algoritmische keuzes voor het precies implementeren van elke declaratie.

In het eeuwenoude argument over de imperitieve versus de declaratieve5 programmeermodellen, komt het mij voor dat declaratief programmeren gewoon imperatief programmeren in een dunne vermomming is. Elk declaratief token in een databasequery-taal wordt uiteindelijk toegewezen aan een of meer algoritmen die de declaratie in dwingende termen toepassen. De door Henrietta gedefinieerde impedantiemismatch is dus uiteindelijk in de geest van de ontwikkelaar. Dat wil zeggen, als de ontwikkelaar precies zou denken zoals de programmeur van de databasefunctie denkt, dan zou er geen mismatch zijn.

Dus hoe zou een declaratief model uiteindelijk beter kunnen zijn dan een imperatief model, aangezien het ene slechts een roeping is van het andere? Fijn dat je het vraagt, want dat brengt me bij mijn punt.

De PostgreSQL-ontwikkelaars zijn slimmer dan jij. Ik bedoel dat niet grappig of terughoudend. Letterlijk duizenden bijdragers hebben miljoenen bijdragen geleverd aan het PostgreSQL-project, waarvan vele als verbeteringen aan de bijdragen van anderen. De kans dat wat je boven op je hoofd hebt bedacht beter is dan wat al is geïmplementeerd, is erg klein. En zelfs als je gedachten beter waren, zou je ze moeten bijdragen aan het PostgreSQL-project in het belang van iedereen, en zo de lat hoger leggen voor alle anderen.

Dus, wat maakt PostgreSQL dan zo geweldig? Wereldwijde mindshare zonder zakelijke overwegingen. Duizenden ontwikkelaars werken honderdduizenden uren om betere algoritmische keuzes te maken. Uw software wordt dus elke release beter, meestal zonder dat u iets speciaals van uw kant hoeft te doen.

Is dat niet de aard van software in het algemeen, zegt u? Wel, ja. Maar lang niet in die mate dat de hele wereld bij uw project betrokken is. PostgreSQL heeft een zeer prominente plaats in de open source gemeenschap. Commerciële leveranciers zullen nooit in staat zijn om het tempo van verandering bij te houden dat een open source-project op dit niveau kan bieden. De migraties naar open source (en met name PostgreSQL) zijn hier om het te bewijzen.

De functies blijven binnenstromen. Er zijn nog maar weinig dingen die commerciële leveranciers als een duidelijk voordeel kunnen noemen. Onder die dingen zijn SMP-ondersteuning, bidirectionele replicatie en externe tools. Raad eens waar de community nu aan werkt en zeer waarschijnlijk in de komende jaren zal verschijnen?

Verleng PostgreSQL zoals je wilt

PostgreSQL heeft een levendige gemeenschap van auteurs die ondersteunende software schrijven. Dit omvat het inpluggen van elke taal die je leuk vindt en het gebruiken om PostgreSQL uit te breiden op een manier die nuttig lijkt. Hou je toevallig van perl string handling? Oké, gebruik dat dan. Hoe zit het met ondersteuning voor Python-kaarten? Natuurlijk, sluit gewoon python aan en ga naar de stad. Wil je webservices schrijven met een PostgreSQL-backend? Dat is geweldig, en PostgreSQL zal helpen. JSON? OK. xml? Zeker weten. PostgreSQL biedt directe ondersteuning voor dat alles en nog veel meer. Als je een taal kunt bedenken die het goed doet, sluit die dan aan op PostgreSQL en je kunt hem aan de serverkant hebben.

U kunt uw eigen functies, gegevenstypen, operators, aggregaten, vensterfuncties of vrijwel alles maken. Zie je een functie die je leuk vindt niet? Plagiaat en pas het aan vanuit de broncode. Je bent vrij om dat te doen vanwege de licentie.

PostgreSQL biedt ook enkele hook-functies waarmee u de database kunt uitbreiden zonder tot het uiterste te hoeven gaan met programmeren.

Dit vermogen om elke functie van een andere taal te assimileren is uniek voor PostgreSQL. U kunt elke functie bieden met behulp van elke bestaande gestandaardiseerde bibliotheek. Je kunt de standaarden volgen, veranderingen bijhouden, PostgreSQL nog steeds updaten zolang het nog bestaat, en je kunt het allemaal gratis doen.

Ga groot en ga breed

PostgreSQL heeft verschillende functies om het beste te halen uit het hardwareplatform dat het heeft gekregen. Partitionering, parallelle uitvoering, gedeeltelijke indexen, tablespaces, cachen en parallelle niet-blokkerende onderhoudsroutines (bijna alles in PostgreSQL ontspruit de laatste tijd het trefwoord CONCURRENTLY).

Als dat niet genoeg voor je is, zal fysieke streaming-replicatie goedkoop een hoop lees-standby voor je maken. Sharding, geheugencache, wachtrijen, taakverdeling en pooling van verbindingen werken allemaal met PostgreSQL. Nog steeds niet genoeg? Hoe zit het met logische streaming-replicatie? U wilt de database over de hele wereld geosharden, zegt u? Welkom bij bidirectionele replicatie.

En het prijskaartje is nog steeds $ 0.

Indexeer dat allemaal

PostgreSQL ondersteunt zo'n enorme lijst met indexen dat het verbijsterend is om erachter te komen hoe je ze allemaal kunt gebruiken. GiST, SP-Gist, KNN Gist, GIN, BRIN en Btree zijn allemaal beschikbaar. En er zijn er nog meer via het uitbreidingssysteem, zoals Bloom-filters en andere.

PostgreSQL kan deze gebruiken met functiegestuurde indexen, gedeeltelijke indexen, dekkende indexen en zoeken in volledige tekst. En deze uitgebreide functies sluiten elkaar niet uit. Je kunt ze allemaal tegelijk gebruiken.

Rol het in, Rol het uit

Verschillende van de reeds genoemde technologieën maken PostgreSQL tot een fantastisch data-integratie- en distributieplatform. Meerdere vormen van replicatie, gecombineerd met meerdere vormen van federatie, bieden zowel push- als pull-technologieën voor bijna elk soort datasysteem.

Deze kunnen in oneindige configuraties worden gecombineerd om oplossingen voor databaseopslag te overbruggen. Dat alles zonder dat er een ETL/ELT-verwerkingspakket nodig is. PostgreSQL doet het gewoon. De snelste single source of truth-database ter wereld doet dit door de gegevens helemaal niet uit het bronsysteem te verwijderen. Dit betekent dat de gegevens altijd actueel zijn en de responstijden kunnen worden beheerd.

Als u de onbetrouwbaarheid van het bronsysteem niet kunt verdragen of een wat betere prestatie aan de querykant wilt, kunt u de gegevens ook nog steeds periodiek cachen met gematerialiseerde weergaven, die kunnen worden bijgewerkt terwijl ze nog worden opgevraagd.

De licentie staat wijd open

PostgreSQL heeft zijn eigen licentie die grotendeels gebaseerd is op de BSD-licentie. Dit zorgt voor nog meer vrijheid van gebruik en distributie.

De licentie is van toepassing op alle code van het hoofdproject, belangrijke bijdrage-uitbreidingen, clientbibliotheken, verbindingsmanagers en de meeste bijbehorende tools.

Het is zeer tolerant, geschreven in gewoon Engels en niet beschikbaar voor aankoop.

Fantastische documentatie

Het PostgreSQL-project vereist dat elke ontwikkelaar die code indient, documentatie voor het voorstel aanlevert. Dit voorstel wordt gebruikt om de documentatie voor de functie te maken die in verschillende formaten beschikbaar wordt gesteld. Deze documentatie wordt ook gebruikt bij de evaluatie van de functie zelf en als referentie om toekomstige functies te ontwikkelen.

Alles bij elkaar betekent dit dat PostgreSQL leeft van documentatie. Er zijn veel ontwikkelaars voor PostgreSQL die hebben geleerd te coderen in C, hoe databases werken en hoe projecten worden beheerd door met het PostgreSQL-project te werken. Deze documentatie is ongeëvenaard.

Testgedreven ontwikkeling

PostgreSQL is uitgebreid getest. Nee, dat zegt het niet sterk genoeg. PostgreSQL is uitvoerig getest. Elke bug krijgt een test om het bestaan ​​ervan te verifiëren en er wordt code geschreven om aan de test te voldoen. Nieuwe functies worden geschreven door eerst tests (en documentatie) te maken en vervolgens te coderen totdat de functie verschijnt.

Deze tests zijn geïntegreerd in de buildfarm voor regressie, zodat bugs niet (opnieuw) verschijnen in toekomstige versies van PostgreSQL. Dat betekent dat elke test (die nog steeds actueel is) wordt uitgevoerd voor elke versie van PostgreSQL voor elke build-cyclus. Dat is veel testen en het zorgt ervoor dat PostgreSQL de meest stabiele database blijft die beschikbaar is.

PostgreSQL wordt alleen vrijgegeven als ALLE regressietests zijn geslaagd. Dit zorgt voor "0 bekende bugs" releases.

Internationalisering en lokalisatie

De ontwikkelaars van PostgreSQL komen van over de hele wereld. Ze hebben in veel moedertalen gewerkt sinds het begin van PostgreSQL als een afstudeerproject. Internationalisering en lokalisatie zijn als standaardpraktijk in PostgreSQL ingebakken, niet als een bout op het moment dat PostgreSQL een commerciële wereldwijde markt begon aan te trekken.

Hoewel PostgreSQL een deel van de internationalisering om compatibiliteitsredenen aan het besturingssysteem delegeert, is een groot deel van de vertaling ingebed in het systeem, wat zorgt voor een naadloze taalovergangservaring.

Cloudwerking

PostgreSQL werkt in cloudarchitecturen met behulp van ansible, kubernetes en eigen tools van meerdere cloudleveranciers. Er zijn verschillende native cloudimplementaties waaruit u kunt kiezen die bij uw architectuur passen.

Als u servers wilt behandelen als vee, niet als huisdieren, heeft PostgreSQL u ook in de cloud gedekt.

Naleving van normen

PostgreSQL is gericht op standaarden voor de levensduur van het project. Sinds PostgreSQL is ontstaan ​​in een universitair afstudeerprogramma, wordt het gebruikt als referentie-implementatie voor veel SQL-standaarden.

PostgreSQL implementeert SQL/Med en ANSI SQL.

Volgens de fantastische documentatie "ondersteunt PostgreSQL de meeste van de belangrijkste functies van SQL:2016. Van de 179 verplichte functies die vereist zijn voor volledige Core-conformiteit, voldoet PostgreSQL aan ten minste 160.” Dit is meer dan bijna elke andere database-engine.

Taalfuncties

PostgreSQL implementeert common table expressions (CTE), taalcontrolestructuren (if, for, case, etc.), gestructureerde foutafhandeling en alle extra's die je mag verwachten van een volwassen proceduretaal.

Ben je al overtuigd?

Ik zou nog kunnen praten over de fantastische community van gebruikersgroepen, IRC-kanalen, websites met oplossingen, blogartikelen en mentoren. Ik zou filosofisch kunnen worden over de manier waarop de database platformonafhankelijk, architectuuroverschrijdend en cultuuroverschrijdend is. Er zijn uren en uren aan presentaties, video's en lezingen.

Of je kunt het gewoon gaan downloaden en kijken of het groter is dan je verbeelding. Ik denk dat je zeer aangenaam verrast zult zijn.


  1. Hoe de grootte van alle tabellen in een database in MySQL te controleren

  2. Psycopg2 verbruikt geheugen bij grote selectiequery's

  3. Soorten SQL JOIN

  4. De beste manier om records te tellen met willekeurige tijdsintervallen in Rails+Postgres