PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL è il miglior database del mondo

Il titolo non è clickbait o hyperbole. Intendo dimostrare che in virtù sia della progettazione che dell'implementazione, PostgreSQL è oggettivamente e misurabilmente un database migliore di qualsiasi altra cosa attualmente disponibile, con o senza considerazioni economiche.

Come diavolo posso rivendicare e giustificare un'affermazione così alta? Continua a leggere, gentile secchione. Ti prometto che il tuo tempo non sarà sprecato.

Sicurezza trasparente

PostgreSQL ha una mailing list di sicurezza. Il progetto PostgreSQL apprende i vettori di intrusione nello stesso momento in cui lo fanno tutti gli altri. Niente è nascosto e tutto ciò che viene trovato viene lavorato a una velocità che fa girare la testa ai venditori commerciali. Non lasciarti ingannare da elenchi di difetti più brevi pubblicati dallo stesso fornitore che fornisce il software in esame.

Ciò significa che tutti i vettori di attacco conosciuti vengono gestiti non appena vengono resi pubblici. Questo tipo di reattività alla sicurezza non è nemmeno contemplabile nel mercato commerciale. Per i fornitori commerciali, la segretezza fino a quando il problema non può essere affrontato è vitale per la riparazione. PostgreSQL non ottiene tale sollievo, ed è fantastico per te.

Il controllo della concorrenza multi-versione fa al caso tuo

PostgreSQL sceglie un metodo di controllo della concorrenza che funziona meglio per carichi di lavoro INSERT e SELECT elevati.

È molto facile progettare per PostgreSQL, tenendo presenti le limitazioni per il sovraccarico di tracciamento per

AGGIORNA ed ELIMINA. Soprattutto, se rispetti i tuoi dati, dovresti imparare ad amare la sicurezza dei dati che PostgreSQL ti offre.

DDL partecipa alle transazioni utilizzando PostgreSQL. Le migrazioni funzionano fino in fondo o per niente (il peggior tipo di non funzionamento è quasi funzionante). I cablaggi di prova sono facilissimi da costruire. Hai bisogno di ripristinare il cablaggio di prova? Basta ROLLBACK.

PostgreSQL supporta forme di isolamento delle transazioni conformi agli standard, tra cui serializzazione, lettura con commit e lettura ripetibile. Questi metodi forniscono la completa conformità ACID.

PostgreSQL fa tutto

Quindi, vuoi NoSQL, Riak, REACT, Redis, Mongo, ecc.? PostgreSQL fa tutto questo. Certo, non con tutti i campanelli e i fischietti di tutti i prodotti originali. Ad esempio, PostgreSQL non crea nuovi shard per nessuno di questi. Questo è ancora un processo manuale. Ma poi di nuovo, c'è sempre pg_partman. . .

Vuoi un datastore di colonne? Che ne dici di hstore? Non vuoi riqualificare il tuo personale? Collega la lingua che preferisci e continua a viaggiare. Vuoi una replica parziale? Streaming La replica logica fa per te.

Avrei difficoltà a pensare a una funzionalità che vorrei che PostgreSQL non abbia o che non ci sia un'estensione ben nota da fornire.

Vuoi estrarre dati da altri sistemi? PostgreSQL ha la più vivace raccolta di oggetti federativi di qualsiasi database. Li chiamano involucri di dati stranieri e puoi collegare PostgreSQL a un alligatore con nastro adesivo e fascette. Tratta qualsiasi cosa come se fossero i tuoi dati.

Collegalo a una mappa

La comunità di PostGIS potrebbe essere probabilmente più grande della stessa comunità di PostgreSQL. Le capacità di mappatura di PostgreSQL lo mettono in una classe a sé, anche rispetto ad alternative molto costose.

Il progetto PostGIS ha scelto PostgreSQL come piattaforma per la facilità di estensibilità e le ampie capacità di arricchimento dei dati. Queste capacità sono direttamente esposte per essere sfruttate da qualsiasi altro progetto. Sono inoltre senza risposta da parte di qualsiasi altro fornitore, commerciale o open source.

Alla fine, puoi agganciarlo a qualsiasi cosa.

PostgreSQL sta crescendo e aprendo la strada all'open source

Il progetto PostgreSQL è una delle organizzazioni più visibili nel software open source. Con una comunità enorme e in crescita a un ritmo astronomico, le eventuali carenze che ha ora saranno probabilmente sconfitte in un lasso di tempo che gli altri fornitori possono solo sognare.

Ulteriori funzionalità di qualità aziendale vengono annunciate letteralmente ogni giorno e il personale per mantenere tali funzionalità viene selezionato da un pool di geni che ogni azienda spera di assumere, e semplicemente non ce ne sono abbastanza per andare in giro.

PostgreSQL crea soluzioni stabili per sempre

PostgreSQL ha la replica logica integrata nel core. Ciò consente migrazioni tra versioni. Leggilo di nuovo. Non sei bloccato su una versione hardware o software specifica. La soluzione può essere aggiornata a tempo indeterminato.

Inoltre, PostgreSQL è supportato su molte piattaforme, comprese le versioni super stabili di Linux. Hai bisogno di una soluzione che sopravviva al tipico ROI di 3~5 anni? PostgreSQL ti durerà per sempre, anche se non aggiornerai mai l'hardware. E le commissioni per questo sono facili da calcolare. $ 0.

Dichiarativo è meglio dell'imperativo

Le lingue del database sono generalmente dichiarative. Cioè, scrivi una query nella lingua incorporata di tua scelta, descrivendo i risultati che vorresti vedere. Il database tenta di decodificare le tue intenzioni e di fornire i risultati appropriati. Questa è la base di tutti i modelli di programmazione dichiarativa. In PostgreSQL, questo si riduce a una mappatura delle funzioni alle parole chiave nel linguaggio SQL, a volte con diverse scelte algoritmiche su come implementare esattamente ogni dichiarazione.

Nella vecchia discussione sui modelli di programmazione imperitivo vs. dichiarativo5, mi viene in mente che la programmazione dichiarativa è solo una programmazione imperativa sotto mentite spoglie. Ciascun token dichiarativo in un linguaggio di query del database viene infine associato a uno o più algoritmi che applicano la dichiarazione in termini imperitivi. Pertanto, il disadattamento di impedenza definito da Henrietta è in definitiva nella mente dello sviluppatore. Cioè, se lo sviluppatore pensasse esattamente come pensa il programmatore di funzioni del database, non ci sarebbero discrepanze.

Quindi, come potrebbe un modello dichiarativo in definitiva essere migliore di un modello imperitivo, dato che uno è solo una caratteristica distintiva dell'altro? Sono contento che tu l'abbia chiesto, perché questo mi porta al punto.

Gli sviluppatori PostgreSQL sono più intelligenti di te. Non intendo essere faceto o timido. Letteralmente migliaia di contributori hanno dato milioni di contributi al progetto PostgreSQL, molti dei quali come miglioramenti ai contributi di altri. Le possibilità che qualunque cosa tu abbia pensato in cima alla tua testa sia migliore di ciò che è già stato implementato è molto bassa. E, anche se i tuoi pensieri fossero migliori, dovresti contribuire al progetto PostgreSQL a beneficio di tutti, alzando così il livello per tutti gli altri.

Quindi, cosa rende PostgreSQL così meraviglioso allora? Condivisione della mente in tutto il mondo senza considerazioni aziendali. Migliaia di sviluppatori stanno lavorando centinaia di migliaia di ore per fare scelte algoritmiche migliori. Quindi il tuo software migliora ad ogni versione, nella maggior parte dei casi senza dover fare nulla in particolare da parte tua.

Non è questa la natura del software in generale, dici? Beh si. Ma non nella misura in cui lo è quando il mondo intero è coinvolto nel tuo progetto. PostgreSQL gode di un posto molto importante nella comunità open source. I fornitori commerciali non saranno mai in grado di tenere il passo con il tasso di cambiamento che un progetto open source può fornire a questo livello. Le migrazioni all'open source (e in particolare a PostgreSQL) sono qui per dimostrarlo.

Le funzionalità continuano ad arrivare. Sono rimaste pochissime cose che i fornitori commerciali possono indicare come un netto vantaggio. Tra queste cose ci sono il supporto SMP, la replica bidirezionale e gli strumenti esterni. Indovina a cosa sta lavorando la community ora e molto probabilmente verrà rilasciato nei prossimi anni?

Estendi PostgreSQL come preferisci

PostgreSQL ha una vivace comunità di autori che scrivono software ausiliari. Ciò include il collegamento di qualsiasi linguaggio che ti piace e il suo utilizzo per estendere PostgreSQL in qualsiasi modo sembri utile. Ti piace la gestione delle stringhe perl? Ok, allora usa quello. Che ne dici del supporto per le mappe Python? Certo, basta collegare Python e andare in città. Vuoi scrivere servizi web utilizzando un back-end PostgreSQL? È fantastico e PostgreSQL ti aiuterà. JSON? Ok. XML? Scommetti. PostgreSQL ha un supporto diretto per tutto questo e infinitamente di più. Se riesci a pensare a un linguaggio che funzioni bene, collegalo a PostgreSQL e potrai averlo sul lato server.

Puoi creare le tue funzioni, tipi di dati, operatori, aggregati, funzioni della finestra o praticamente qualsiasi altra cosa. Non vedi una funzione che ti piace? Plagialo e personalizzalo dal codice sorgente. Sei libero di farlo grazie alla licenza.

PostgreSQL fornisce anche alcune funzioni di hook che consentono di estendere il database senza dover andare a programmare estremi.

Questa capacità di assimilare qualsiasi caratteristica di qualsiasi altro linguaggio è esclusiva di PostgreSQL. È possibile fornire qualsiasi funzionalità utilizzando qualsiasi libreria standardizzata esistente. Puoi seguire gli standard, tenere il passo con le modifiche, aggiornare comunque PostgreSQL mentre è attivo e puoi fare tutto gratuitamente.

Vai in grande e vai in largo

PostgreSQL ha diverse funzionalità per sfruttare al meglio la piattaforma hardware che gli è stata fornita. Partizionamento, esecuzione parallela, indici parziali, tablespace, memorizzazione nella cache e routine di manutenzione parallele non bloccanti (quasi tutto in PostgreSQL ultimamente sta spuntando la parola chiave CONCURRENTLY).

Quando ciò non è abbastanza per te, la replica fisica dello streaming ti farà un sacco di standby di lettura per te a buon mercato. Sharding, memcache, accodamento, bilanciamento del carico e pool di connessioni funzionano tutti con PostgreSQL. Ancora non abbastanza? Che ne dici della replica dello streaming logico? Vuoi geoshardare il database in tutto il mondo, dici? Bene, benvenuto nella replica bidirezionale.

E il prezzo è ancora a $ 0.

Indicizza tutto ciò

PostgreSQL supporta un elenco così vasto di indici che sbalordisce la mente di capire come usarli tutti. GiST, SP-Gist, KNN Gist, GIN, BRIN e Btree sono tutti disponibili. E ce ne sono di più attraverso il sistema di estensione, come i filtri Bloom e altri.

PostgreSQL può usarli con indici guidati da funzioni, indici parziali, indici di copertura e ricerca full-text. E queste funzionalità estese non si escludono a vicenda. Puoi usarli tutti contemporaneamente.

Arrotolalo, stendilo

Molte delle tecnologie già menzionate rendono PostgreSQL una fantastica piattaforma di integrazione e distribuzione dei dati. Molteplici forme di replica, combinate con molteplici forme di federazione, forniscono tecnologie push e pull per quasi tutti i tipi di sistemi di dati.

Questi possono essere combinati in infinite configurazioni per collegare soluzioni di archiviazione di database. Tutto ciò senza richiedere alcun pacchetto di elaborazione ETL/ELT. PostgreSQL lo fa e basta. Il database di una singola fonte di verità più veloce del pianeta lo fa non spostando affatto i dati fuori dal sistema di origine. Ciò significa che i dati sono sempre aggiornati e i tempi di risposta possono essere gestiti.

Se non sopporti l'inaffidabilità del sistema di origine o desideri prestazioni leggermente migliori sul lato query, puoi anche memorizzare periodicamente i dati nella cache con viste materializzate, che possono essere aggiornate mentre sono ancora sottoposte a query.

La licenza è aperta

PostgreSQL ha la propria licenza che si basa in gran parte sulla licenza BSD. Ciò consente una libertà ancora maggiore di utilizzo e distribuzione.

La licenza si applica a tutto il codice del progetto principale, alle estensioni dei contributi principali, alle librerie client, ai gestori di connessione e alla maggior parte degli strumenti associati.

È altamente permissivo, scritto in un inglese semplice e non disponibile per l'acquisto.

Documentazione fantastica

Il progetto PostgreSQL richiede che qualsiasi sviluppatore che invii il codice fornisca la documentazione per la proposta. Questa proposta viene utilizzata per creare la documentazione per la funzionalità resa disponibile in diversi formati. Questa documentazione viene utilizzata anche nella valutazione della funzionalità stessa e come riferimento per lo sviluppo di funzionalità future.

Tutto sommato, questo significa che PostgreSQL vive sulla documentazione. Ci sono molti sviluppatori per PostgreSQL che hanno imparato a programmare in C, come funzionano i database e come vengono gestiti i progetti lavorando con il progetto PostgreSQL. Questa documentazione non è seconda a nessuno.

Sviluppo basato su test

PostgreSQL è ampiamente testato. No, questo non lo sta dicendo abbastanza forte. PostgreSQL è testato in modo esaustivo. Ogni bug viene soddisfatto con un test per verificarne l'esistenza e il codice viene scritto per soddisfare il test. Le nuove funzionalità vengono scritte prima mediante la creazione di test (e documentazione), quindi codificate finché non viene visualizzata la funzionalità.

Questi test sono integrati nella build farm per la regressione, quindi i bug non (ri)appaiono nelle versioni future di PostgreSQL. Ciò significa che ogni test (che è ancora in corso) viene eseguito per ogni versione di PostgreSQL per ogni ciclo di compilazione. Sono molti i test e garantisce che PostgreSQL rimanga il database più stabile disponibile.

PostgreSQL viene rilasciato solo al superamento di TUTTI i test di regressione. Ciò prevede rilasci di "0 bug noti".

Internazionalizzazione e localizzazione

Gli sviluppatori di PostgreSQL provengono da tutto il mondo. Hanno lavorato in molte lingue native sin dall'inizio di PostgreSQL come progetto di laurea. L'internazionalizzazione e la localizzazione sono state integrate in PostgreSQL come una pratica standard, non un bullone poiché PostgreSQL ha iniziato ad attrarre un mercato commerciale globale.

Sebbene PostgreSQL deleghi parte dell'internazionalizzazione al sistema operativo per motivi di compatibilità, gran parte della traduzione è incorporata nel sistema, fornendo un'esperienza di transizione linguistica senza interruzioni.

Operazione cloud

PostgreSQL funziona in architetture cloud utilizzando ansible, kubernetes e strumenti proprietari di più fornitori di cloud. Esistono diverse implementazioni cloud native tra cui scegliere per adattarsi alla tua architettura.

Se vuoi trattare i server come bestiame, non animali domestici, PostgreSQL ti copre anche nel cloud.

Conformità agli standard

PostgreSQL è stato focalizzato sugli standard per tutta la durata del progetto. Poiché PostgreSQL è nato in un corso di laurea universitario, è stato utilizzato come implementazione di riferimento per molti standard SQL.

PostgreSQL implementa SQL/Med e ANSI SQL.

Secondo la fantastica documentazione, "PostgreSQL supporta la maggior parte delle principali funzionalità di SQL:2016. Su 179 funzionalità obbligatorie richieste per la piena conformità Core, PostgreSQL è conforme ad almeno 160". Questo è più di qualsiasi altro motore di database.

Caratteristiche linguistiche

PostgreSQL implementa le espressioni di tabelle comuni (CTE), le strutture di controllo del linguaggio (se, per, case, ecc.), la gestione strutturata degli errori e tutti i vantaggi che ti aspetteresti da un linguaggio procedurale maturo.

Sei già convinto?

Potrei ancora parlare della fantastica comunità di gruppi di utenti, canali IRC, siti web con soluzioni, articoli di blog e mentori. Potrei essere filosofico sul modo in cui il database è multipiattaforma, multiarchitettura e multicultura. Ci sono ore e ore di presentazioni, video e lezioni.

Oppure potresti semplicemente scaricarlo e vedere se è più grande della tua immaginazione. Penso che rimarrai piacevolmente sorpreso.