Introduzione
Il modello di dati relazionali, che organizza i dati in tabelle di righe e colonne, predomina negli strumenti di gestione di database. Oggi esistono altri modelli di dati, tra cui NoSQL e NewSQL, ma i sistemi di gestione di database relazionali (RDBMSs) rimangono dominanti per l’archiviazione e la gestione dei dati in tutto il mondo.
Questo articolo confronta e contrappone tre dei RDBMS open source più implementati: SQLite, MySQL e PostgreSQL. In particolare, esplorerà i tipi di dati utilizzati da ciascun RDBMS, i loro vantaggi e svantaggi e le situazioni in cui sono meglio ottimizzati.
Un po ‘ sui sistemi di gestione dei database
I database sono cluster logicamente modellati di informazioni o dati. Un database management system (DBMS), d’altra parte, è un programma per computer che interagisce con un database. Un DBMS consente di controllare l’accesso a un database, scrivere dati, eseguire query ed eseguire qualsiasi altra attività relativa alla gestione del database. Sebbene i sistemi di gestione dei database siano spesso definiti “database”, i due termini non sono intercambiabili. Un database può essere qualsiasi raccolta di dati, non solo uno memorizzato su un computer, mentre un DBMS è il software che consente di interagire con un database.
Tutti i sistemi di gestione del database hanno un modello sottostante che struttura il modo in cui i dati vengono memorizzati e accessibili. Un sistema di gestione di database relazionale è un DBMS che utilizza il modello di dati relazionali. In questo modello, i dati sono organizzati in tabelle, che nel contesto di RDBMS sono più formalmente indicate come relazioni. Una relazione è un insieme di tuple o righe in una tabella, con ogni tupla che condivide un insieme di attributi o colonne:
La maggior parte dei database relazionali utilizza structured Query Language (SQL) per gestire e interrogare i dati. Tuttavia, molti RDBMS utilizzano il proprio particolare dialetto di SQL, che può avere alcune limitazioni o estensioni. Queste estensioni in genere includono funzionalità aggiuntive che consentono agli utenti di eseguire operazioni più complesse di quanto potrebbero altrimenti con SQL standard.
Nota: Il termine “SQL standard” viene visualizzato più volte in questa guida. Gli standard SQL sono gestiti congiuntamente dall’American National Standards Institute (ANSI), dall’Organizzazione internazionale per la standardizzazione (ISO) e dalla Commissione elettrotecnica internazionale (IEC). Ogni volta che questo articolo menziona “SQL standard” o “lo standard SQL”, si riferisce alla versione corrente dello standard SQL pubblicato da questi organismi.
Va notato che lo standard SQL completo è ampio e complesso: la conformità completa a SQL core:2011 richiede 179 funzionalità. Per questo motivo, la maggior parte degli RDBMS non supporta l’intero standard, anche se alcuni si avvicinano alla piena conformità rispetto ad altri.
A ogni colonna viene assegnato un tipo di dati che determina il tipo di voci consentite in quella colonna. Diversi RDBMS implementano diversi tipi di dati, che non sono sempre direttamente intercambiabili. Alcuni tipi di dati comuni includono date, stringhe, numeri interi e booleani.
I tipi di dati numerici possono essere firmati, il che significa che possono rappresentare sia numeri positivi che negativi, o non firmati, il che significa che possono rappresentare solo numeri positivi. Ad esempio, il tipo di dati tinyint
di MySQL può contenere 8 bit di dati, il che equivale a 256 valori possibili. L’intervallo firmato di questo tipo di dati è compreso tra -128 e 127, mentre l’intervallo non firmato è compreso tra 0 e 255.
A volte, un amministratore di database imporrà un vincolo su una tabella per limitare i valori che possono essere inseriti in essa. Un vincolo si applica in genere a una particolare colonna, ma alcuni vincoli possono applicarsi anche a un’intera tabella. Ecco alcuni vincoli che sono comunemente usati in SQL:
-
UNIQUE
: L’applicazione di questo vincolo a una colonna garantisce che non ci siano due voci in quella colonna identiche. -
NOT NULL
: Questo vincolo garantisce che una colonna non abbia vociNULL
. -
PRIMARY KEY
: Una combinazione diUNIQUE
eNOT NULL
PRIMARY KEY
vincolo assicura che nessuna voce nella colonnaNULL
e che ogni voce è diversa. -
FOREIGN KEY
: UnFOREIGN KEY
è una colonna in una tabella che fa riferimento alPRIMARY KEY
di un’altra tabella. Questo vincolo viene utilizzato per collegare due tabelle insieme: le voci alla colonnaFOREIGN KEY
devono già esistere nella colonna padrePRIMARY KEY
affinché il processo di scrittura abbia successo. -
CHECK
: Questo vincolo limita l’intervallo di valori che possono essere immessi in una colonna. Ad esempio, se l’applicazione è destinata solo ai residenti in Alaska, è possibile aggiungere un vincoloCHECK
su una colonna del codice POSTALE per consentire solo le voci tra 99501 e 99950.
Se vuoi saperne di più sui sistemi di gestione dei database, consulta il nostro articolo sulla comprensione dei database SQL e NoSQL e dei diversi modelli di database.
Ora che abbiamo coperto i sistemi di gestione di database relazionali in generale, passiamo al primo dei tre database relazionali open-source che questo articolo tratterà: SQLite.
SQLite
SQLite è un RDBMS autonomo, basato su file e completamente open-source noto per la sua portabilità, affidabilità e prestazioni elevate anche in ambienti a bassa memoria. Le sue transazioni sono ACID-compliant, anche nei casi in cui il sistema si blocca o subisce un’interruzione di corrente.
Il sito web del progetto SQLite lo descrive come un database “serverless”. La maggior parte dei motori di database relazionali sono implementati come un processo server in cui i programmi comunicano con il server host attraverso una comunicazione interprocesso che trasmette le richieste. Con SQLite, tuttavia, qualsiasi processo che accede al database legge e scrive direttamente sul file del disco del database. Ciò semplifica il processo di installazione di SQLite, poiché elimina la necessità di configurare un processo server. Allo stesso modo, non è necessaria alcuna configurazione per i programmi che utilizzeranno il database SQLite: tutto ciò di cui hanno bisogno è l’accesso al disco.
SQLite è un software libero e open-source, e non è necessaria alcuna licenza speciale per usarlo. Tuttavia, il progetto offre diverse estensioni-ciascuna per una tassa una tantum-che aiutano con la compressione e la crittografia. Inoltre, il progetto offre vari pacchetti di supporto commerciale, ciascuno per un canone annuale.
SQLite dell’Tipi di Dati Supportati
SQLite permette una varietà di tipi di dati, organizzati in archiviazione seguenti classi:
Tipo di Dati | Descrizione |
---|---|
null |
Include qualsiasi NULL valori. |
integer |
Interi firmati, memorizzati in 1, 2, 3, 4, 6, o 8 byte a seconda della grandezza del valore. |
real |
Numeri reali, o valori in virgola mobile, memorizzati come numeri in virgola mobile a 8 byte. |
text |
Stringhe di testo memorizzate utilizzando la codifica del database, che può essere UTF-8, UTF-16BE o UTF-16LE. |
blob |
Qualsiasi blob di dati, con ogni blob memorizzato esattamente come è stato immesso. |
Nel contesto di SQLite, i termini “classe di archiviazione” e “tipo di dati” sono considerati intercambiabili. Se vuoi saperne di più sui tipi di dati di SQLite e sull’affinità del tipo SQLite, consulta la documentazione ufficiale di SQLite sull’argomento.
Vantaggi di SQLite
- Ingombro ridotto: come suggerisce il nome, la libreria SQLite è molto leggera. Anche se lo spazio che utilizza varia a seconda del sistema in cui è installato, può occupare meno di 600KiB di spazio. Inoltre, è completamente autonomo, il che significa che non ci sono dipendenze esterne che devi installare sul tuo sistema affinché SQLite funzioni.
- User-friendly: SQLite è talvolta descritto come un database” zero-configuration ” che è pronto per l’uso fuori dalla scatola. SQLite non viene eseguito come processo server, il che significa che non deve mai essere arrestato, avviato o riavviato e non viene fornito con alcun file di configurazione che devono essere gestiti. Queste funzionalità aiutano a semplificare il percorso dall’installazione di SQLite all’integrazione con un’applicazione.
- Portatile: A differenza di altri sistemi di gestione di database, che in genere memorizzano i dati come un grande lotto di file separati, un intero database SQLite viene memorizzato in un singolo file. Questo file può essere posizionato ovunque in una gerarchia di directory e può essere condiviso tramite supporto rimovibile o protocollo di trasferimento file.
Svantaggi di SQLite
- Concorrenza limitata: sebbene più processi possano accedere e interrogare un database SQLite contemporaneamente, solo un processo può apportare modifiche al database in un dato momento. Ciò significa che SQLite supporta una maggiore concorrenza rispetto alla maggior parte degli altri sistemi di gestione di database incorporati, ma non tanto quanto RDBMS client/server come MySQL o PostgreSQL.
- Nessuna gestione degli utenti: i sistemi di database sono spesso dotati di supporto per gli utenti o di connessioni gestite con privilegi di accesso predefiniti al database e alle tabelle. Poiché SQLite legge e scrive direttamente su un normale file su disco, le uniche autorizzazioni di accesso applicabili sono le autorizzazioni di accesso tipiche del sistema operativo sottostante. Questo rende SQLite una scelta sbagliata per le applicazioni che richiedono più utenti con autorizzazioni di accesso speciali.
- Sicurezza: un motore di database che utilizza un server può, in alcuni casi, fornire una migliore protezione dai bug nell’applicazione client rispetto a un database serverless come SQLite. Ad esempio, i puntatori randagi in un client non possono danneggiare la memoria sul server. Inoltre, poiché un server è un singolo processo persistente, un database client-server può controllare l’accesso ai dati con maggiore precisione rispetto a un database serverless, consentendo un blocco più fine e una migliore concorrenza.
Quando utilizzare SQLite
- Applicazioni embedded: SQLite è una grande scelta di database per le applicazioni che necessitano di portabilità e non richiedono espansione futura. Gli esempi includono applicazioni locali a singolo utente e applicazioni mobili o giochi.
- Sostituzione accesso disco: Nei casi in cui un’applicazione ha bisogno di leggere e scrivere file su disco direttamente, può essere utile utilizzare SQLite per la funzionalità aggiuntiva e la semplicità che viene fornito con l’utilizzo di SQL.
- Test: Per molte applicazioni può essere eccessivo testare la loro funzionalità con un DBMS che utilizza un processo server aggiuntivo. SQLite ha una modalità in memoria che può essere utilizzata per eseguire rapidamente i test senza il sovraccarico delle operazioni di database effettive, rendendolo la scelta ideale per i test.
Quando non si usa SQLite
- Lavorare con molti dati: SQLite può supportare tecnicamente un database di dimensioni fino a 140 TB, purché l’unità disco e il filesystem supportino anche i requisiti di dimensione del database. Tuttavia, il sito Web SQLite raccomanda che qualsiasi database che si avvicina a 1 TB sia ospitato su un database client-server centralizzato, poiché un database SQLite di quelle dimensioni o più grande sarebbe difficile da gestire.
- Volumi di scrittura elevati: SQLite consente di eseguire una sola operazione di scrittura in un dato momento, il che limita significativamente il suo throughput. Se la tua applicazione richiede molte operazioni di scrittura o più scrittori simultanei, SQLite potrebbe non essere adeguato alle tue esigenze.
- È richiesto l’accesso alla rete: Poiché SQLite è un database serverless, non fornisce l’accesso diretto alla rete ai suoi dati. Questo accesso è integrato nell’applicazione, quindi se i dati in SQLite si trovano su una macchina separata dall’applicazione, richiederà un collegamento motore-disco ad alta larghezza di banda attraverso la rete. Questa è una soluzione costosa e inefficiente e in questi casi un DBMS client-server potrebbe essere una scelta migliore.
MySQL
Secondo la classifica DB-Engines, MySQL è stato il RDBMS open source più popolare da quando il sito ha iniziato a monitorare la popolarità del database nel 2012. È un prodotto ricco di funzionalità che alimenta molti dei più grandi siti Web e applicazioni del mondo, tra cui Twitter, Facebook, Netflix e Spotify. Iniziare con MySQL è relativamente semplice, grazie in gran parte alla sua documentazione esaustiva e alla grande comunità di sviluppatori, nonché all’abbondanza di risorse relative a MySQL online.
MySQL è stato progettato per velocità e affidabilità, a scapito della piena aderenza allo standard SQL. Gli sviluppatori MySQL lavorano continuamente per una maggiore aderenza allo standard SQL, ma è ancora in ritardo rispetto ad altre implementazioni SQL. Tuttavia, viene fornito con varie modalità SQL ed estensioni che lo avvicinano alla conformità. A differenza delle applicazioni che utilizzano SQLite, le applicazioni che utilizzano un database MySQL vi accedono tramite un processo daemon separato. Poiché il processo server si trova tra il database e altre applicazioni, consente un maggiore controllo su chi ha accesso al database.
MySQL ha ispirato una vasta gamma di applicazioni di terze parti, strumenti e librerie integrate che estendono le sue funzionalità e contribuiscono a rendere più facile lavorare con. Alcuni dei più ampiamente utilizzati di questi strumenti di terze parti sono phpMyAdmin, DBeaver e HeidiSQL.
Tipi di dati supportati da MySQL
I tipi di dati di MySQL possono essere organizzati in tre grandi categorie: tipi numerici, tipi di data e ora e tipi di stringa.
i tipi Numerici:
Tipo di Dati | Descrizione |
---|---|
tinyint |
Un piccolo numero intero. L’intervallo firmato per questo tipo di dati numerici è compreso tra -128 e 127, mentre l’intervallo non firmato è compreso tra 0 e 255. |
smallint |
Un piccolo numero intero. L’intervallo con segno per questo tipo numerico è compreso tra -32768 e 32767, mentre l’intervallo senza segno è compreso tra 0 e 65535. |
mediumint |
Un intero di medie dimensioni. L’intervallo firmato per questo tipo di dati numerici è compreso tra -8388608 e 8388607, mentre l’intervallo non firmato è compreso tra 0 e 16777215. |
int o integer |
Un intero di dimensioni normali. L’intervallo firmato per questo tipo di dati numerici è compreso tra -2147483648 e 2147483647, mentre l’intervallo non firmato è compreso tra 0 e 4294967295. |
bigint |
Un grande numero intero. L’intervallo firmato per questo tipo di dati numerici è compreso tra -9223372036854775808 e 9223372036854775807, mentre l’intervallo non firmato è compreso tra 0 e 18446744073709551615. |
float |
Un piccolo numero in virgola mobile (a precisione singola). |
double double precision , o real |
Un numero in virgola mobile di dimensioni normali (a doppia precisione). |
dec decimal fixed , o numeric |
Un numero fisso imballato. La lunghezza di visualizzazione delle voci per questo tipo di dati viene definita quando viene creata la colonna e ogni voce aderisce a tale lunghezza. |
bool o boolean |
Un booleano è un tipo di dati che ha solo due valori possibili, di solito true o false . |
bit |
Un tipo di valore di bit per il quale è possibile specificare il numero di bit per valore, da 1 a 64. |
Tipi di data e ora:
Data Type | Explanation |
---|---|
date |
A date, represented as YYYY-MM-DD . |
datetime |
A timestamp showing the date and time, displayed as YYYY-MM-DD HH:MM:SS . |
timestamp |
A timestamp indicating the amount of time since the Unix epoch (00:00:00 on January 1, 1970). |
time |
A time of day, displayed as HH:MM:SS . |
year |
A year expressed in either a 2 or 4 digit format, with 4 digits being the default. |
String types:
Data Type | Explanation |
---|---|
char |
A fixed-length string; le voci di questo tipo sono riempite a destra con spazi per soddisfare la lunghezza specificata quando memorizzate. |
varchar |
Una stringa di lunghezza variabile. |
binary |
Simile al tipochar , ma una stringa di byte binari di una lunghezza specificata piuttosto che una stringa di caratteri non binaria. |
varbinary |
Simile al tipovarchar , ma una stringa di byte binari di lunghezza variabile piuttosto che una stringa di caratteri non binaria. |
blob |
A binary string with a maximum length of 65535 (2^16 – 1) bytes of data. |
tinyblob |
A blob column with a maximum length of 255 (2^8 – 1) bytes of data. |
mediumblob |
A blob column with a maximum length of 16777215 (2^24 – 1) bytes of data. |
longblob |
A blob column with a maximum length of 4294967295 (2^32 – 1) bytes of data. |
text |
A string with a maximum length of 65535 (2^16 – 1) characters. |
tinytext |
A text column with a maximum length of 255 (2^8 – 1) characters. |
mediumtext |
A text column with a maximum length of 16777215 (2^24 – 1) characters. |
longtext |
A text column with a maximum length of 4294967295 (2^32 – 1) characters. |
enum |
Un’enumerazione, che è un oggetto string che prende un singolo valore da un elenco di valori dichiarati quando viene creata la tabella. |
set |
Simile a un’enumerazione, un oggetto string che può avere zero o più valori, ognuno dei quali deve essere scelto da un elenco di valori consentiti specificati quando viene creata la tabella. |
Vantaggi di MySQL
- Popolarità e facilità d’uso: Come uno dei sistemi di database più popolari al mondo, non c’è carenza di amministratori di database che hanno esperienza di lavoro con MySQL. Allo stesso modo, c’è un’abbondanza di documentazione in stampa e online su come installare e gestire un database MySQL, così come una serie di strumenti di terze parti-come phpMyAdmin — che mirano a semplificare il processo di avvio con il database.
- Sicurezza: MySQL viene installato con uno script che ti aiuta a migliorare la sicurezza del tuo database impostando il livello di sicurezza della password dell’installazione, definendo una password per l’utente root, rimuovendo gli account anonimi e rimuovendo i database di test che sono, per impostazione predefinita, accessibili a tutti gli utenti. Inoltre, a differenza di SQLite, MySQL supporta la gestione degli utenti e consente di concedere privilegi di accesso su base utente per utente.
- Velocità: scegliendo di non implementare alcune funzionalità di SQL, gli sviluppatori MySQL sono stati in grado di dare priorità alla velocità. Mentre i test di benchmark più recenti mostrano che altri RDBMS come PostgreSQL possono corrispondere o almeno avvicinarsi a MySQL in termini di velocità, MySQL detiene ancora una reputazione come una soluzione di database estremamente veloce.
- Replica: MySQL supporta diversi tipi di replica, ovvero la pratica di condividere le informazioni tra due o più host per migliorare l’affidabilità, la disponibilità e la tolleranza agli errori. Ciò è utile per impostare una soluzione di backup del database o ridimensionare orizzontalmente il proprio database.
Svantaggi di MySQL
- Limitazioni note: Poiché MySQL è stato progettato per la velocità e la facilità d’uso piuttosto che la piena conformità SQL, viene fornito con alcune limitazioni funzionali. Ad esempio, manca il supporto per le clausole
FULL JOIN
. - Licenze e caratteristiche proprietarie: MySQL è un software con doppia licenza, con una community edition gratuita e open source sotto licenza GPLv2 e diverse edizioni commerciali a pagamento rilasciate sotto licenze proprietarie. Per questo motivo, alcune funzionalità e plugin sono disponibili solo per le edizioni proprietarie.
- Sviluppo rallentato: Da quando il progetto MySQL è stato acquisito da Sun Microsystems nel 2008 e successivamente da Oracle Corporation nel 2009, ci sono state lamentele da parte degli utenti che il processo di sviluppo per il DBMS è rallentato in modo significativo, poiché la comunità non ha più l’agenzia per reagire rapidamente ai problemi e implementare le modifiche.
Quando usare MySQL
- Operazioni distribuite: il supporto di replica di MySQL lo rende un’ottima scelta per configurazioni di database distribuiti come architetture primarie-secondarie o primarie-primarie.
- Siti web e applicazioni web: MySQL alimenta molti siti web e applicazioni su Internet. Questo è, in gran parte, grazie a quanto sia facile installare e impostare un database MySQL, così come la sua velocità complessiva e scalabilità nel lungo periodo.
- Crescita futura prevista: il supporto di replica di MySQL può aiutare a facilitare il ridimensionamento orizzontale. Inoltre, è un processo relativamente semplice per l’aggiornamento a un prodotto MySQL commerciale, come MySQL Cluster, che supporta lo sharding automatico, un altro processo di ridimensionamento orizzontale.
Quando non si utilizza MySQL
- È necessaria la conformità SQL: Poiché MySQL non tenta di implementare lo standard SQL completo, questo strumento non è completamente conforme a SQL. Se la conformità SQL completa o quasi completa è un must per il tuo caso d’uso, potresti voler utilizzare un DBMS più conforme.
- Concorrenza e grandi volumi di dati: sebbene MySQL generalmente si comporti bene con operazioni di lettura pesante, le scritture di lettura simultanee possono essere problematiche. Se la tua applicazione avrà molti utenti che scrivono dati contemporaneamente, un altro RDBMS come PostgreSQL potrebbe essere una scelta migliore di database.
PostgreSQL
PostgreSQL, noto anche come Postgres, si autodefinisce “il database relazionale open source più avanzato al mondo.”È stato creato con l’obiettivo di essere altamente estensibile e conforme agli standard. PostgreSQL è un database relazionale ad oggetti, il che significa che sebbene sia principalmente un database relazionale include anche funzionalità, come l’ereditarietà delle tabelle e l’overloading delle funzioni, che sono più spesso associate ai database degli oggetti.
Postgres è in grado di gestire in modo efficiente più attività allo stesso tempo, una caratteristica nota come concorrenza. Raggiunge questo senza blocchi di lettura grazie alla sua implementazione del controllo della concorrenza Multiversion (MVCC), che garantisce l’atomicità, la coerenza, l’isolamento e la durata delle sue transazioni, noto anche come conformità ACID.
PostgreSQL non è così ampiamente utilizzato come MySQL, ma ci sono ancora un certo numero di strumenti e librerie di terze parti progettati per semplificare il lavoro con PostgreSQL, inclusi pgAdmin e Postbird.
Tipi di dati supportati da PostgreSQL
PostgreSQL supporta tipi di dati numerici, stringa e data e ora come MySQL. Inoltre, supporta i tipi di dati per forme geometriche, indirizzi di rete, stringhe di bit, ricerche di testo e voci JSON, nonché diversi tipi di dati idiosincratici.
i tipi Numerici:
Tipo di Dati | Descrizione |
---|---|
bigint |
firmato Un intero a 8 byte. |
bigserial |
An autoincrementing 8 byte integer. |
double precision |
An 8 byte double precision floating-point number. |
integer |
A signed 4 byte integer. |
numeric or decimal |
An number of selectable precision, recommended for use in cases where exactness is crucial, such as monetary amounts. |
real |
A 4 byte single precision floating-point number. |
smallint |
A signed 2 byte integer. |
smallserial |
An autoincrementing 2 byte integer. |
serial |
An autoincrementing 4 byte integer. |
Character types:
Data Type | Explanation |
---|---|
character |
A character string with a specified fixed length. |
character varying or varchar |
A character string with a variable but limited length. |
text |
A character string of a variable, unlimited length. |
Date and time types:
Data Type | Explanation |
---|---|
date |
A calendar date consisting of the day, month, and year. |
interval |
A time span. |
time or time without time zone |
A time of day, not including the time zone. |
time with time zone |
A time of day, including the time zone. |
timestamp or timestamp without time zone |
A date and time, not including the time zone. |
timestamp with time zone |
A date and time, including the time zone. |
Geometric types:
Data Type | Explanation |
---|---|
box |
A rectangular box on a plane. |
circle |
A circle on a plane. |
line |
An infinite line on a plane. |
lseg |
A line segment on a plane. |
path |
A geometric path on a plane. |
point |
A geometric point on a plane. |
polygon |
A closed geometric path on a plane. |
Network address types:
Data Type | Explanation |
---|---|
cidr |
An IPv4 or IPv6 network address. |
inet |
An IPv4 or IPv6 host address. |
macaddr |
A Media Access Control (MAC) address. |
Bit string types:
Data Type | Explanation |
---|---|
bit |
A fixed-length bit string. |
bit varying |
A variable-length bit string. |
Text search types:
Data Type | Explanation |
---|---|
tsquery |
A text search query. |
tsvector |
A text search document. |
JSON types:
Data Type | Explanation |
---|---|
json |
Textual JSON data. |
jsonb |
Decomposed binary JSON data. |
Other data types:
Data Type | Explanation |
---|---|
boolean |
A logical Boolean, representing either true or false . |
bytea |
Short for “byte array”, this type is used for binary data. |
money |
An amount of currency. |
pg_lsn |
A PostgreSQL Log Sequence Number. |
txid_snapshot |
A user-level transaction ID snapshot. |
uuid |
A universally unique identifier. |
xml |
XML data. |
Advantages of PostgreSQL
- SQL compliance: More so than SQLite or MySQL, PostgreSQL aims to closely adhere to SQL standards. According to the official PostgreSQL documentation, PostgreSQL supports 160 out of the 179 features required for full core SQL:conformità 2011, oltre a una lunga lista di funzioni opzionali.
- Open-source e community-driven: un progetto completamente open-source, il codice sorgente di PostgreSQL è sviluppato da una grande e devota comunità. Allo stesso modo, la comunità Postgres mantiene e contribuisce a numerose risorse online che descrivono come lavorare con il DBMS, inclusa la documentazione ufficiale, il wiki PostgreSQL e vari forum online.
- Extensible: Gli utenti possono estendere PostgreSQL a livello di codice e al volo attraverso il suo funzionamento catalog-driven e il suo uso di caricamento dinamico. Si può designare un file di codice oggetto, ad esempio una libreria condivisa, e PostgreSQL lo caricherà se necessario.
Svantaggi di PostgreSQL
- Prestazioni della memoria: per ogni nuova connessione client, PostgreSQL esegue il fork di un nuovo processo. Ogni nuovo processo è allocato circa 10 MB di memoria, che può aggiungere rapidamente per i database con un sacco di connessioni. Di conseguenza, per operazioni semplici e leggere, PostgreSQL è in genere meno performante di altri RDBMS, come MySQL.
- Popolarità: Sebbene sia più ampiamente utilizzato negli ultimi anni, PostgreSQL è storicamente rimasto indietro rispetto a MySQL in termini di popolarità. Una conseguenza di ciò è che ci sono ancora meno strumenti di terze parti che possono aiutare a gestire un database PostgreSQL. Allo stesso modo, non ci sono tanti amministratori di database con esperienza nella gestione di un database Postgres rispetto a quelli con esperienza MySQL.
Quando usare PostgreSQL
- L’integrità dei dati è importante: PostgreSQL è stato completamente ACID-compliant dal 2001 e implementa il controllo valuta multiversion per garantire che i dati rimangano coerenti, rendendolo una scelta forte di RDBMS quando l’integrità dei dati è critica.
- Integrazione con altri strumenti: PostgreSQL è compatibile con una vasta gamma di linguaggi di programmazione e piattaforme. Ciò significa che se hai bisogno di migrare il tuo database su un altro sistema operativo o integrarlo con uno strumento specifico, sarà probabilmente più facile con un database PostgreSQL che con un altro DBMS.
- Operazioni complesse: Postgres supporta piani di query che possono sfruttare più CPU per rispondere alle query con maggiore velocità. Questo, insieme al suo forte supporto per più scrittori simultanei, lo rende un’ottima scelta per operazioni complesse come il data warehousing e l’elaborazione delle transazioni online.
Quando non si usa PostgreSQL
- La velocità è imperativa: a scapito della velocità, PostgreSQL è stato progettato pensando all’estensibilità e alla compatibilità. Se il tuo progetto richiede le operazioni di lettura più veloci possibili, PostgreSQL potrebbe non essere la scelta migliore di DBMS.
- Impostazioni semplici: A causa del suo ampio set di funzionalità e della forte aderenza allo standard SQL, Postgres può essere eccessivo per semplici configurazioni di database. Per operazioni leggere-pesanti in cui è richiesta la velocità, MySQL è in genere una scelta più pratica.
- Replica complessa: Sebbene PostgreSQL fornisca un forte supporto per la replica, è ancora una funzionalità relativamente nuova e alcune configurazioni, come un’architettura primaria — primaria, sono possibili solo con le estensioni. La replica è una funzionalità più matura su MySQL e molti utenti vedono che la replica di MySQL è più facile da implementare, in particolare per coloro che non hanno l’esperienza necessaria per l’amministrazione del database e del sistema.
Conclusione
Oggi, SQLite, MySQL e PostgreSQL sono i tre sistemi di gestione di database relazionali open source più diffusi al mondo. Ognuno ha le sue caratteristiche uniche e limitazioni, ed eccelle in particolari scenari. Ci sono un bel paio di variabili in gioco quando si decide su un RDBMS, e la scelta è raramente semplice come scegliere quello più veloce o quello con il maggior numero di caratteristiche. La prossima volta che hai bisogno di una soluzione di database relazionale, assicurati di ricercare questi e altri strumenti in profondità per trovare quello che meglio si adatta alle tue esigenze.
Se desideri saperne di più su SQL e su come usarlo per gestire un database relazionale, ti invitiamo a fare riferimento al nostro cheat sheet su Come gestire un database SQL. D’altra parte, se vuoi conoscere i database non relazionali (o NoSQL), controlla il nostro Confronto tra i sistemi di gestione dei database NoSQL.