Con un vasto assortimento di database tra cui scegliere sul mercato, può esservi capitato di riflettere sulle differenza tra PostgreSQL e SQL Server per individuare l’opzione migliore per il vostro caso d’uso. Le organizzazioni che usano PostgreSQL per le loro attività potrebbero voler passare a un database come Microsoft SQL Server, che si rivolge principalmente a diverse soluzioni di data warehousing, al commercio elettronico e ad altre linee di business.

Storicamente, Microsoft SQL Server è stato uno dei preferiti dalle organizzazioni che dipendono da altri prodotti Microsoft; ma PostgreSQL ha fatto passi da gigante e ha conquistato la vetta della nicchia non solo per i vantaggi dell’open-source, ma anche per la sua attiva comunità di utenti e le sue pratiche funzionalità.

Questo è ciò che ci porta a questa discussione. Il confronto tra PostgreSQL e SQL Server vi aiuterà a capire meglio i possibili vantaggi e i compromessi dei due sistemi e quale sia il più adatto ai vostri scopi.

Entriamo nel vivo della discussione!

Cos’è PostgreSQL?

Il logo di PostgreSQL, che mostra il testo sotto una testa di elefante blu stilizzata e delineata in bianco e nero.
Logo di PostgreSQL (Fonte: Uberconf)

PostgreSQL si è affermato come database open-source avanzato e di classe enterprise che supporta sia l’interrogazione JSON (non relazionale) che quella SQL (relazionale). Questo potente e stabile sistema di gestione di database è stato supportato da oltre trent’anni di sviluppo attivo della comunità che ha contribuito alla sua reputazione di integrità, affidabilità, resilienza, prestazioni e correttezza.

PostgreSQL è usato come data warehouse o data store principale per diverse applicazioni mobili, web, analitiche e geospaziali. PostgreSQL vanta anche una ricca storia di supporto di tipi di dati avanzati e l’ottimizzazione delle prestazioni comunemente riscontrata nei suoi database commerciali, come Microsoft SQL Server e Oracle.

Oltre a essere gratuito e open-source, PostgreSQL è anche altamente estensibile. Per esempio, potete generare funzioni personalizzate, definire i vostri tipi di dati e persino scrivere codice da vari linguaggi di programmazione senza dover ricompilare il vostro database!

La Storia

Ecco una breve panoramica di PostgreSQL nel corso degli anni:

  • Ingres è stato sviluppato per la prima volta nel 1977.
  • Michael Stonebraker e i suoi collaboratori svilupparono Postgres nel 1986.
  • Nel 1990, a PostgreSQL è stato aggiunto il supporto per PL/ pgSQL e la conformità ACID.
  • Il NYCPUG (New York City PostgreSQL User Group) si è unito alla PgUS (United States PostgreSQL Association) nel 2013.
  • Nel 2014, il PGconf ha inaugurato una nuova era per gli utenti di PostgreSQL.

Caratteristiche Principali

Passiamo ora a dare un’occhiata ad alcune caratteristiche di PostgreSQL che lo rendono uno strumento indispensabile sul mercato:

  • Conformità agli standard e affidabilità: Il write-ahead logging di PostgreSQL gli permette di distinguersi come database altamente tollerante ai guasti. PostgreSQL è inoltre conforme agli standard ACID e fornisce un supporto completo per viste, chiavi esterne, trigger, join e stored procedure, in vari linguaggi. Include la maggior parte dei tipi di dati di SQL: 2008, tra cui BOOLEAN, NUMERIC, INTEGER, DATE, VARCHAR, TIMESTAMP, INTERVAL e CHAR.
  • Estensioni robuste: PostgreSQL offre una serie di funzionalità robuste come il ripristino point-in-time, la multi-version concurrency (MVCC), i tablespace, i controlli di accesso granulari e i backup online/hot. PostgreSQL è anche locale-aware per la sensibilità alle maiuscole e minuscole, l’ordinamento e la formattazione. È altamente scalabile sia per la quantità di dati che può gestire sia per il numero di utenti simultanei che può ospitare.
  • Licenza open-source: Potete usufruire del codice sorgente di PostgreSQL con una licenza open-source, che vi dà la libertà di modificarlo, usarlo e implementarlo come meglio credete, senza alcun costo. Inoltre, PostgreSQL non comporta costi di licenza, il che elimina il rischio di un’eccessiva diffusione. La comunità di appassionati e collaboratori di PostgreSQL trova regolarmente correzioni e bug, contribuendo alla sicurezza generale del sistema di database.

Casi d’Uso

La versatilità di PostgreSQL gli permette di essere usato in una vasta gamma di casi d’uso, come per esempio:

  • Hub di Database Federato: Il supporto JSON e i wrapper per i dati estranei di PostgreSQL gli permettono di collegarsi ad altri archivi di dati, compresi i tipi di dati NoSQL, e di fungere da hub federato per sistemi di database poliglotti.
  • Database OLTP di uso generale: Sia le grandi aziende che le startup usano PostgreSQL come data store principale per supportare le loro applicazioni, prodotti e soluzioni su scala internet.
  • Database geospaziale: PostgreSQL supporta gli oggetti geografici se usato con l’estensione PostGIS. Si può anche usare come archivio di dati geospaziali per i sistemi informativi geografici (GIS) e i servizi basati sulla localizzazione.
  • Stack open-source LAPP: PostgreSQL può anche eseguire applicazioni e siti web dinamici come parte di una solida alternativa allo stack LAMP. LAPP sta per Linux, Apache, PostgreSQL, Perl, PHP e Python.

Cos’È SQL Server?

Il logo di SQL Server, che mostra il testo accanto a un simbolo stilizzato di Microsoft in una griglia dinamica grigia e rosso intenso.
Logo di SQL Server (Fonte: Software Engineering Stack Exchange)

SQL Server è stato sviluppato da Microsoft come sistema di gestione di database relazionali che vanta una lunga storia, 32 anni per la precisione. Microsoft SQL Server è considerato un prodotto software con la funzione principale di recuperare e raccogliere i dati richiesti da altre applicazioni software.

Queste applicazioni possono essere eseguite su un altro computer in rete o sullo stesso computer. Microsoft SQL Server ha subito molti aggiornamenti nel corso degli anni, fino a diventare uno degli RDBMS meglio supportati e più rinomati del mercato attuale.

SQL Server deve gran parte della sua popolarità al suo creatore, Microsoft. Quando MS SQL Server era in fase nascente, Microsoft si era già affermata come un gigante della tecnologia.

SQL Server è riuscito a imporsi come sistema di gestione di database grazie alla sua vasta gamma di applicazioni e strumenti che semplificano il lavoro con i dati. La sua completa interfaccia grafica (GUI) permette di lavorare in modo intuitivo e semplice con il database e di generare statistiche per i vostri report.

La Storia

Ecco una breve panoramica di Microsoft SQL Server nel corso degli anni:

  • L’evoluzione di SQL Server iniziò nel 1988 quando Microsoft collaborò con Sybase e Ashton-Tate per sviluppare un software per la manutenzione e la creazione di database che avrebbe dato impulso al mercato dei database aziendali di Microsoft.
  • SQL Server 1.0 fu lanciato nel 1989. All’epoca, sfruttava la funzione di amministratore di sistema (SAF) per generare database. Non aveva alcuna documentazione, ma permetteva comunque agli utenti di eseguire query SQL e di impostare parametri. Il primo frammento di codice per Microsoft SQL Server fu scritto da Sybase.
  • Gradualmente sono state rilasciate nuove versioni con ulteriori miglioramenti e funzionalità. SQL Server 2019, o Aries, è l’ultima aggiunta a un pantheon di versioni complete e si concentra sul rendere le funzionalità del database ancora più intuitive da usare. Tra queste, le opzioni per i cluster di big data, che offrono agli utenti la possibilità di lavorare con set di dati giganteschi.

Caratteristiche Principali

Basta parlare di storia. Diamo un’occhiata a un paio di caratteristiche fondamentali che fanno di SQL Server un’ottima scelta:

  • Robusta piattaforma di sicurezza: SQL Server vi permette di proteggere i vostri dati in movimento e a riposo grazie alle funzioni integrate di protezione, classificazione, avvisi e monitoraggio dei dati. Con SQL Server potete crittografare facilmente i dati sensibili ed eseguire calcoli complessi sui dati crittografati, oltre a consentire l’accesso personalizzato ai dati basato sui ruoli e completo di filtri complessi per le righe.
  • Prestazioni da leader del settore: SQL Server vanta prestazioni da record su Linux e Windows ed è costantemente in testa ai benchmark TPC-H per il carico di lavoro di data warehousing, TPC-E per il carico di lavoro OLTP e per le prestazioni delle applicazioni reali. Potete anche usare le funzionalità del database in-memory di SQL Server, come il tempdb ottimizzato per la memoria e il supporto alla memoria persistente, per migliorare le prestazioni dei vostri carichi di lavoro mission-critical.
  • Intelligenza su tutti i vostri dati con i cluster di big data: SQL Server vi permette di ottenere informazioni preziose da tutti i vostri dati eseguendo query su tutto il vostri patrimonio di dati – Azure SQL Database, SQL Server, Teradata, MongoDB, Azure Cosmos DB e molti altri – senza dover replicare o spostare i dati. Potete anche creare un data lake condiviso combinando dati strutturati e non strutturati in SQL Server e accedendo ai dati tramite Spark o T-SQL.

Casi d’Uso

L’estensibilità e le prestazioni di SQL Server gli consentono di essere utilizzato in una vasta gamma di casi d’uso come:

  • Servizi di replica: I servizi di replica di SQL Server sono utilizzati da SQL Server per armonizzare e replicare gli oggetti del database, sia come sottoinsieme degli oggetti presenti che nella loro interezza. I servizi di replica aderiscono a un modello subscriber/publisher, ovvero le modifiche vengono inviate da un server di database (publisher) e raccolte da altri (subscriber).
  • Servizi di notifica: I servizi di notifica sono stati originariamente rilasciati come add-on post-release per SQL Server 2000. Si tratta di un meccanismo per creare modifiche guidate dai dati, che vengono poi inviate agli abbonati ai servizi di notifica.
  • Servizi di apprendimento automatico: I servizi di apprendimento automatico di SQL Server operano all’interno dell’istanza di SQL Server, consentendo alle persone di eseguire analisi dei dati e apprendimento automatico senza dover spostare i dati attraverso la rete o essere ostacolati dalla memoria dei loro computer.
  • Servizi di analisi: I servizi di analisi di SQL Server (SSAS) aggiungono funzionalità di data mining e OLAP per i database di SQL Server. Il motore OLAP supporta le modalità di archiviazione dei dati ROLAP (relational online analytical processing), MOLAP (multidimensional online analytical processing) e HOLAP (hybrid online analytical processing). I servizi di analisi di SQL Server supportano anche lo standard XML per l’analisi come protocollo di comunicazione fondamentale.

PostgreSQL vs SQL Server: Confronto Testa a Testa

Ora che abbiamo un’idea degli aspetti salienti di SQL Server e PostgreSQL, analizziamo le differenze tra i due. Per individuare il sistema di gestione dei database più adatto alle vostre esigenze, potete usare i fattori indicati di seguito.

Disponibilità

PostgreSQL offre un ampio assortimento di soluzioni per garantire un’elevata disponibilità agli utenti, tra cui la spedizione dei log write-ahead, il failover su disco condiviso, il partizionamento dei dati e vari metodi di replica. Strumenti come EDB Postgres Failover Manager forniscono un failover automatico per garantire un’elevata disponibilità monitorando e identificando gli errori del database.

D’altra parte, SQL Server include diversi strumenti di alta disponibilità come il log shipping, i cluster di failover e la replica. I gruppi di disponibilità di SQL Server, che lavorano 24 ore su 24, forniscono il failover automatico quando vengono soddisfatte determinate condizioni. Tuttavia, questa offerta è accessibile solo nell’edizione enterprise di SQL Server.

Struttura dei Dati e delle Tabelle

PostgreSQL mette a disposizione dei suoi utenti il linguaggio di programmazione procedurale PL/pgSQL per la sua semplicità. Tra le funzionalità aggiuntive all’SQL standard di PostgreSQL ci sono i tipi definiti dall’utente, i moduli personalizzati, le estensioni, il supporto JSON e le opzioni extra per i trigger e altre funzionalità.

SQL Server usa T-SQL, che assomiglia all’SQL standard. T-SQL include un supporto aggiuntivo per l’elaborazione di dati e stringhe, la programmazione procedurale e le variabili locali.

Se volete capire meglio come i sistemi memorizzano ed elaborano le richieste, PostgreSQL isola i processi trattandoli come processi OS separati. Ogni database ha una memoria separata ed esegue il proprio processo. Questo rende molto semplice il monitoraggio e la gestione, ma allo stesso tempo rende più difficile la scalabilità di più database.

SQL Server utilizza un pool di buffer che può essere limitato o aumentato in base alle esigenze di elaborazione. Tutto il lavoro viene svolto in un unico pool, senza pagine multiple, a differenza di PostgreSQL.

Sia PostgreSQL che SQL Server supportano le tabelle temporanee perché consentono di memorizzare i risultati intermedi di procedure complesse e logiche ramificate. Le tabelle temporanee possono contribuire a migliorare l’organizzazione e le prestazioni del database isolando le informazioni intermedie da quelle essenziali.

Deframmentazione

Quando gli sviluppatori modificano diverse parti di un database SQL, le modifiche avvengono in diversi punti del sistema e possono essere difficili da tracciare, leggere e gestire. Per questo motivo, la manutenzione dovrebbe prevedere anche la deframmentazione, ovvero il processo di raggruppamento del database aggiornato attraverso l’assegnazione di indici, la generazione di nuove pagine e la rivisitazione della struttura. I database possono così liberare lo spazio su disco che non viene utilizzato correttamente, in modo che il database possa funzionare a un ritmo più veloce.

PostgreSQL scansiona le tabelle di un livello di dati alla ricerca di righe vuote e si libera degli elementi non necessari. Così facendo, il sistema libera spazio su disco. Tuttavia, questo metodo richiede molta CPU e può avere un impatto sulle prestazioni dell’applicazione.

D’altra parte, SQL Server offre un efficiente garbage collector che non genera più del 15-20% di overhead. Tecnicamente, gli sviluppatori possono anche eseguire il garbage collector in modo continuo, perché è molto efficace. In sintesi, SQL Server offre più metodi di deframmentazione rispetto a PostgreSQL.

Gli Indici

Il modo in cui un database affronta gli indici è una prova della sua usabilità: gli indici si usano per individuare i dati senza cercare una riga in particolare. Potete anche usare gli indici per fare riferimento a più colonne o righe. Potete assegnare lo stesso indice ai file, presentarli in posti diversi del database e raccogliere tutti questi pezzi con un’unica ricerca.

PostgreSQL supporta l’organizzazione delle tabelle basata su indici, ma le prime versioni non prevedevano l’aggiornamento automatico degli indici. Inoltre, vi permette di consultare molti indici con un’unica ricerca, il che significa che potete scoprire molte informazioni.

SQL Server offre una ricca funzionalità automatizzata per la gestione degli indici. Gli indici possono essere organizzati in cluster e mantenere il corretto ordine delle righe senza alcun intervento manuale. SQL Server supporta anche gli indici parziali e le ricerche su più indici.

Caratteristiche

PostgreSQL non offre un job scheduler integrato, a differenza di altri database SQL. Le attività ripetitive richiedono strumenti esterni come cron, pgAgent o pg_cron su Linux e SQLBackupAndFTP o Task Scheduler su Windows.

Le attività in SQL Server, invece, possono essere facilmente programmate tramite SQL Server Management Studio.

PostgreSQL ha un controllo della concorrenza multi-versione (MVCC) ben sviluppato per gestire più procedure contemporaneamente. MVCC offre istantanee delle informazioni del database per evitare di visualizzare le incongruenze causate da transazioni simultanee o dal blocco dei dati che avviene in altri sistemi di database. PostgreSQL sfrutta l’isolamento istantaneo serializzabile (SSI) per garantire l’isolamento delle transazioni.

SQL Server ha un sistema di controllo della concorrenza multi-versione meno sviluppato e dipende dal blocco dei dati per evitare errori dovuti a transazioni simultanee, per impostazione predefinita. SQL Server offre anche una funzione di concurrency ottimistica, che presuppone che tali problemi si verifichino raramente. Per questo motivo, invece di bloccare una riga, la si verifica rispetto a una versione memorizzata nella cache per scoprire se è avvenuta una modifica.

Partizionamento e Sharding

Quando l’aumento delle prestazioni è essenziale per i database più grandi e avete esaurito le stored procedure e l’hardware è stato aggiornato, dovete distribuire il lavoro su diversi server. In questo caso entrano in gioco il partizionamento e lo sharding.

Sebbene sia lo sharding che il partizionamento consistano essenzialmente nel suddividere un grande insieme di dati in sottoinsiemi più piccoli, lo sharding implica che i dati siano distribuiti su più computer, mentre il partizionamento no.

Dalla versione 10.0, PostgreSQL supporta il partizionamento dichiarativo, ovvero il partizionamento per intervallo, elenco o hash.

MS SQL Server supporta il partizionamento orizzontale, ovvero la suddivisione di una tabella con molte righe in più tabelle con un numero minore di righe.

MS SQL Server supporta anche lo sharding attraverso la federazione. Le “viste partizionate federate” sono viste in cui le tabelle sono distribuite su diversi server per bilanciare il carico di elaborazione.

Per recuperare i record dai server, sono necessari alcuni comandi. Questi comandi sono chiamati viste partizionate distribuite. Utilizzano le tipiche istruzioni SQL, insieme alla parola chiave UNION, per prelevare i dati da tutti i server distribuiti.

Allo stesso modo, le istruzioni DML (INSERT, UPDATE e DELETE) si possono usare quando vengono rispettate regole specifiche sulle tabelle sottostanti. Inoltre, tenete presente che le viste partizionate federate sono supportate solo nelle edizioni enterprise.

Sebbene le viste partizionate federate possano essere implementate su qualsiasi altra edizione, poiché non esiste una sintassi distintiva, non saranno riconosciute come viste partizionate federate. Le regole per riconoscere la vista come partizionata tra i server sono disponibili solo nelle edizioni enterprise.

Con questa tecnica di partizionamento, nella maggior parte delle applicazioni si ottiene un aumento delle prestazioni compreso tra il 20% e il 30%. Si tratta quindi di uno strumento molto utile se la vostra azienda gestisce molti dati.

La replica

Mentre il partizionamento consiste nel dividere il database in sottoinsiemi più piccoli e nel distribuire le tabelle partizionate in diversi nodi, la replica consiste nel copiare il database su più database per fornire una visualizzazione rapida e tempi di risposta ridotti.

PostgreSQL offre la replica primaria-secondaria. Può essere asincrona o sincrona. I log di scrittura (WAL) permettono di condividere le modifiche con i nodi di replica, consentendo così la replica asincrona.

Gli altri tipi di replica comprendono la replica logica, la replica in streaming e la replica fisica.

  • La replica logica segue un modello publish and subscribe. Le modifiche si basano sull’identità del dato replicato, come la sua chiave primaria, piuttosto che sulla sua posizione fisica.
  • La replica in streaming trasmette essenzialmente i WAL non appena il file viene creato, consentendo così ai server in standby di essere aggiornati rapidamente, invece di aspettare che il file venga riempito.
  • Infine, la replica fisica viene solitamente implementata con file e directory, senza tenere conto del contenuto della posizione fisica. PostgreSQL non offre la replica multiprimaria in modo nativo, ma può essere eseguita con l’aiuto di altri strumenti di terze parti.

La replica di SQL Server duplica i dati da un server publisher a uno subscriber. Può essere sincrona o asincrona a seconda dell’edizione di SQL Server. Offre tre tipi di repliche: la replica transazionale, la replica snapshot e la replica di tipo merge.

  • La replica transazionale è di solito implementata in ambienti server-to-server, dove le modifiche vengono inviate dall’editore al sottoscrittore nel momento in cui avvengono.
  • La replica di tipo merge è di solito implementata in situazioni in cui potrebbero verificarsi conflitti, per ambienti server-to-client o dove i dati possono essere modificati e tracciati sia sul subscriber che sul publisher e successivamente sincronizzati.
  • La replica snapshot viene implementata quando i dati vengono aggiornati di rado, non devono essere modificati in modo incrementale o quando i dati vengono duplicati esattamente come appaiono in un momento specifico. Inoltre, l’edizione enterprise offre la replica peer-to-peer come soluzione alternativa alla replica di più nodi primari.

Linguaggio e Sintassi

PostgreSQL è scritto in linguaggio C, mentre MS SQL è scritto in C e C++. In termini di binding linguistico, PostgreSQL è molto facile da usare e da collegare grazie alla sua API esterna libpq, che è molto ben progettata e documentata.

Tuttavia, i binding linguistici esterni di SQL Server possono dipendere da diversi altri fattori. Potreste dover installare dei driver aggiuntivi o creare delle classi per memorizzare i dati che vengono interrogati; quindi dovete conoscere l’aspetto dei dati al momento della compilazione. Probabilmente dovrete fare riferimento alla documentazione e potrebbe essere piuttosto dispendioso in termini di tempo.

Per quanto riguarda le funzionalità dei linguaggi procedurali, sia PostgreSQL che SQL Server offrono un solido supporto. PostgreSQL supporta il tipo di dati JSON e gli utenti possono facilmente usare Python, Java, PHP, Perl e R con SQL in quanto supportati dalla funzione di linguaggio procedurale.

Sebbene SQL Server fornisca il supporto, questa funzione deve ancora essere migliorata, perché si verificano alcuni bug e l’implementazione può richiedere un po’ di tempo per via della lentezza. L’utente deve prima compilare il codice in un file .dll.

In PostgreSQL, non è necessario creare prima un file .dll. PostgreSQL offre anche un gran numero di espressioni regolari (regex) come base per il lavoro analitico.

MS SQL Server ha meno regex e supporta alcuni comandi come substring e pattern index, che potrebbero non essere all’altezza di PostgreSQL.

Prestazioni

Quando si parla di prestazioni, PostgreSQL batte SQL Server sotto diversi aspetti. Abbiamo parlato di partizionamento e, sebbene sia PostgreSQL che SQL Server offrano il partizionamento, PostgreSQL lo offre gratuitamente e con maggiore efficienza.

PostgreSQL offre anche una migliore concorrenza, una caratteristica importante quando più processi possono accedere ai dati condivisi e modificarli contemporaneamente. La caratteristica MVCC di PostgreSQL garantisce una minore possibilità di deadlock, bloccando solo se due query cercano di modificare la stessa riga allo stesso tempo e serializzando gli aggiornamenti apportati a quella riga.

Il blocco MVCC acquisito per interrogare i dati non entra in conflitto con i blocchi acquisiti per scrivere i dati. In questo modo si riduce al minimo la contesa sui lock e si ottengono migliori prestazioni in ambienti multiutente.

D’altra parte, SQL Server ha una concorrenza poco sviluppata e alcuni processi potrebbero addirittura bloccarsi. A differenza della funzione MVCC, ogni volta che una riga viene aggiornata, viene creata una nuova versione della riga invece di sovrascrivere la stessa riga ed entrambe vengono mantenute. Gradualmente, le versioni più vecchie vengono spostate in un database di sistema chiamato tempdb. Tuttavia, la sua concurrency ha ancora molta strada da fare.

PostgreSQL offre anche il supporto all’indicizzazione per diverse estensioni, il che aumenta le prestazioni del database.

D’altro canto, i server SQL non hanno ancora migliorato la loro implementazione dell’indicizzazione e non hanno ancora incluso gli array, uno dei tipi di variabili più utilizzati.

Prezzi

PostgreSQL è stato rilasciato sotto la PostgreSQL License, una licenza open-source libera. Il PostgreSQL Global Development Group si impegna a rendere PostgreSQL disponibile come software libero e open-source per sempre. Non ci sono piani per modificare o rilasciare PostgreSQL con una licenza diversa.

MS SQL Server è stato rilasciato con una licenza commerciale come parte dei prodotti Microsoft. All’inizio del 2016, il database è stato reso disponibile come strumento gratuito per gli sviluppatori, ma supporta solo un processore e 1GB di memoria massima. Pur essendo gratuito, manca di diverse funzionalità che potrebbero essere necessarie per un’azienda. Se avete bisogno di più server, dovete pagare 899 dollari per server. Ultimamente, l’edizione enterprise di SQL Server costa 13.748 dollari.

Scalabilità

La capacità del sistema di database di continuare a funzionare bene anche quando i dati aumentano per soddisfare le esigenze degli utenti senza compromettere le prestazioni si chiama scalabilità.

PostgreSQL offre molte caratteristiche in termini di scalabilità e può impiegare diversi core della CPU per implementare rapidamente le query in parallelo.

Anche SQL Server può utilizzare i core, ma la versione standard è limitata a ventiquattro core di CPU. La versione enterprise permette di usare un numero illimitato di core della CPU. SQL Server possiede anche una funzione di iper-scala, in cui è possibile determinare i limiti inferiori e superiori che consentono di scalare verso il basso e verso l’alto in base alle esigenze.

Sicurezza

Con l’aumento dei furti di dati, degli hacking e della pirateria, la sicurezza diventa il requisito più importante per i sistemi di database. Tuttavia, sia SQL Server che PostgreSQL offrono un’eccellente crittografia e autenticazione dei dati.

Metodi di Autenticazione

Lato server, PostgreSQL offre metodi di autenticazione avanzati, tra cui lightweight directory access protocol (LDAP) e pluggable authentication module (PAM), che potenzialmente riducono la superficie di attacco dei server di database PostgreSQL. Altri miglioramenti della sicurezza a livello di server di PostgreSQL includono l’indirizzo di ascolto del server PostgreSQL, l’autenticazione basata sull’host e l’autenticazione tramite certificato.

In MS SQL Server esistono due funzioni di miglioramento della sicurezza a livello di server: modalità di autenticazione Windows e modalità mista, che prevede un processo di autenticazione sia da parte di Windows Server che di MS SQL Server. Il modello di sicurezza di MS SQL Server è una stretta integrazione tra la modalità di autenticazione Windows di Windows Server e il database.

Crittografia dei Dati

PostgreSQL offre la crittografia dei dati e vi permette di usare i certificati SSL (Secure Sockets Layer) quando i vostri dati viaggiano sul web o su reti pubbliche. Inoltre, vi permette di implementare strumenti di autenticazione dei certificati client come opzione. Inoltre, potete usare le funzioni crittografiche per memorizzare i dati criptati in PostgreSQL che supportano sia la crittografia a chiave simmetrica che quella a chiave pubblica.

In MS SQL Server, le funzioni di crittografia dei dati disponibili includono la crittografia trasparente dei dati (TDE), la crittografia continua e la crittografia a livello di colonna. La funzione TDE usa l’algoritmo Advanced Encryption Standard (AES) per criptare i file fisici, che comprendono sia i file di dati che quelli di log. La funzione sempre crittografata vi permette di crittografare alcune colonne in entrambi gli stati, a riposo o in movimento (cioè i dati rimangono crittografati anche in memoria).

Privilegi a Livello di Utente

Inoltre, potete gestire diversi utenti e le loro autorizzazioni (lettura, scrittura) sia in PostgreSQL che in SQL Server.

PostgreSQL include privilegi a livello utente come assegnazione di ruoli, privilegi a livello di tabella tramite ruoli ed ereditarietà dei ruoli. L’opzione di auditing vi permette di controllare le attività di accesso ai dati degli utenti e dei gruppi nel vostro database, fornendo un ulteriore livello di sicurezza.

SQL Server ottiene questo risultato attraverso i gruppi di utenti e i ruoli. I permessi delle risorse vengono concessi direttamente all’account utente, mentre i permessi vengono ereditati da una risorsa genitore.

Potete anche identificare i problemi di concomitanza, le query più lunghe e le metriche di carico di lavoro regolari monitorando e controllando le attività di SQL Server.

Storage

Lo storage è uno dei fattori chiave delle prestazioni di qualsiasi sistema di database. Con l’aumento della potenza di elaborazione dei server e del supporto di memoria su larga scala, diventa quasi essenziale per i database consentire maggiori capacità di archiviazione nel sistema.

PostgreSQL è un database relazionale a oggetti, mentre Microsoft SQL Server è un sistema di database relazionale. Ciò significa che PostgreSQL offre tipi di dati più complessi e consente l’ereditarietà degli oggetti, ma rende anche più complesso lavorare con PostgreSQL. Ha un unico motore di archiviazione conforme ad ACID e inizializza un nuovo processo di sistema con la sua allocazione di memoria per ogni connessione client. Di conseguenza, con l’aumento delle connessioni client sui sistemi, è necessario allocare più memoria.

SQL Server 2016 e successivi possono usare un massimo di cento computer o macchine virtuali con un massimo di cinque istanze in esecuzione per computer. Tuttavia, anche questo dipende dall’edizione. L’edizione enterprise consente di usare la massima larghezza di banda e quindi di avere maggiori capacità di archiviazione. Mentre l’ultima edizione standard consente di utilizzare fino a 128GB di memoria, nella versione enterprise è possibile usare una memoria illimitata.

Supporto e Comunità

PostgreSQL rilascia regolarmente versioni aggiornate e gratuite. Recentemente, il PostgreSQL Global Development Group ha rilasciato un aggiornamento per tutte le versioni supportate del sistema di database, risolvendo oltre 55 bug segnalati negli ultimi tre mesi. PostgreSQL vanta una vasta comunità di sviluppatori, aziende di terze parti e appassionati che forniscono supporto e cercano di sviluppare il sistema correggendo i bug segnalati.

SQL Server rilascia una nuova versione ogni pochi anni. I costi di assistenza dipendono dai termini e dalle condizioni della licenza. Microsoft SQL Server dispone anche di una comunità di supporto, dove analisti di database, sviluppatori, amministratori di sistema o chiunque abbia interesse nella piattaforma può fare domande o saperne di più su SQL Server attraverso podcast e webcast come SQL Server Radio con Guy Glantser e Eitan Blumin, dove gli utenti possono conoscere molte cose su SQL Server e sulla sua compatibilità con altri strumenti Microsoft.

Sia PostgreSQL che SQL Server possono essere dotati di plugin. Il prezzo e la compatibilità dipendono dal plugin. I plugin possono essere utili per gestire, pulire, fare il backup del database o altro ancora.

Per esempio, Adminer è uno strumento di gestione dei dati e può essere usato per gestire i dati sia in PostgreSQL che in MS SQL Server. Per migliorare l’efficienza del vostro database possono essere usati anche diversi altri plugin per database, come per esempio: WP-Optimize, Better Search Replace, WP Database Backup, solo per citarne alcuni. Quando si aggiorna un sistema di database, potrebbero esserci dei costi di migrazione dei dati, ma questo è normale per qualsiasi altro DBMS standard.

Vedi un comportamento inaspettato? La comunità di PostgreSQL è orgogliosa di rilasciare un software in grado di memorizzare i dati in modo affidabile. Se pensi di aver scoperto un bug, fai clic sul pulsante qui sotto e segui le istruzioni su come segnalare un bug.
Messaggio di segnalazione bug di PostgreSQL (Fonte immagine: PostgreSQL)

Trigger ed eventi

PostgreSQL dispone di diversi trigger avanzati che potete scegliere in base al vostro caso d’uso. Gli eventi di attivazione supportati sono AFTER, BEFORE e INSTEAD OF e si possono usare per eventi INSERT, UPDATE e DELETE per manipolare i dati. Come già detto, PostgreSQL può eseguire questi trigger dinamicamente e non ha bisogno di compilarli in un file .dll prima dell’esecuzione. Le funzioni di cui sopra si possono essere usare per eseguire una query complessa quando il trigger viene invocato.

SQL Server offre vari trigger per diversi tipi di eventi del database: trigger DML, trigger DDL e trigger di accesso:

  • I trigger DML o trigger del linguaggio di manipolazione dei dati sono trigger usati per manipolare i dati, inserendo, aggiornando o cancellando record.
  • I trigger DDL servono per gli eventi del linguaggio di definizione dei dati (DDL), come la creazione, l’eliminazione o la modifica di un database.
  • I trigger Logon si usano per gli eventi di accesso, per esempio quando viene stabilita una sessione utente. Questi trigger si attivano dopo l’autenticazione e prima della creazione della sessione utente. Sono utili per verificare e controllare l’attività di login.

Viste

Le viste sono essenzialmente tabelle virtuali che non memorizzano fisicamente i dati. In genere vengono usate per motivi di sicurezza per limitare l’accesso degli utenti ai dati. Sia PostgreSQL che SQL Server supportano le viste aggiornabili.

Tuttavia, in PostgreSQL, gli aggiornamenti non avvengono automaticamente a meno che non siano soddisfatti i seguenti prerequisiti:

  • Nella query della vista deve essere presente una sezione nella clausola FROM. La sezione può provenire da una tabella o da un’altra vista aggiornabile.
  • Nell’elenco di selezione non devono essere presenti funzioni finestra, funzioni aggregate o funzioni che restituiscono un set.
  • La query non deve includere i comandi HAVING, LIMIT, DISTINCT, WITH, INTERSECT, EXCEPT, OFFSET o LIMIT al livello superiore.

In breve, le viste create con query semplici possono essere aggiornate mentre è quasi impossibile aggiornare quelle create con query complesse. D’altra parte, le viste complesse possono essere aggiornate utilizzando delle regole. Sebbene PostgreSQL non fornisca la possibilità di eseguire le viste materializzate, dispone di un modulo chiamato matviews, che può aiutare a ricostruire qualsiasi vista materializzata.

In SQL Server, le viste possono essere aggiornate automaticamente e sono supportate sia le viste definite dall’utente che quelle definite dal sistema. Inoltre, due viste di tabella vengono aggiornate contemporaneamente se hanno chiavi diverse e se l’istruzione di aggiornamento non coinvolge più di una tabella.

Inoltre, l’utente può usare i trigger per aggiornare viste complesse. SQL Server offre anche la possibilità di eseguire viste materializzate, note anche come viste indicizzate. A differenza delle viste materializzate di altri database relazionali, le viste indicizzate sono sincronizzate con i dati sottostanti e vengono quindi aggiornate automaticamente.

I Difetti di SQL Server e PostgreSQL

Anche se abbiamo discusso tutti i dettagli su PostgreSQL e SQL Server, entrambi hanno i loro svantaggi.

PostgreSQL è gratuito, ma non è di proprietà di un’unica organizzazione. Per questo motivo ha faticato a farsi strada tra le masse, nonostante sia molto ricco di funzioni. PostgreSQL si concentra anche sulla compatibilità più che sulla velocità. Pertanto, le modifiche create per migliorare la velocità richiedono più lavoro.

D’altra parte, SQL Server è stato spesso criticato per la sua scarsa interfaccia utente. Ha complesse funzioni di regolazione delle prestazioni e non supporta in modo nativo il controllo dei sorgenti. Se lo usate per la vostra azienda, la versione enterprise potrebbe costarvi cara. La sola edizione enterprise di SQL Server 2019 costa 13.748 dollari, come tredici stanze di mobili Ikea! Inoltre, le licenze possono essere difficili da comprendere e cambiano continuamente.

Se PostgreSQL e SQL Server non sono di vostro gradimento, potete provare MongoDB o MariaDB per il vostro caso d’uso specifico.

MongoDB è un programma di database multipiattaforma, gratuito e orientato ai documenti che può facilmente sfruttare documenti di tipo JSON.

MariaDB, invece, è un fork di MySQL, supportato commercialmente, i cui motori di archiviazione, collegabili e costruiti ad hoc, supportano carichi di lavoro che generalmente richiedono una grande varietà di database diversi.

PostgreSQL vs SQL Server: Quale Database Scegliere?

Sia PostgreSQL che SQL Server sono database relazionali molto diffusi, ma chi vince? Dai confronti di cui sopra, PostgreSQL batte SQL Server in diversi scenari. Non solo è open-source e gratuito, ma ha anche diverse funzionalità facilmente disponibili e che possono essere implementate automaticamente, a differenza di Microsoft SQL Server.

Inoltre, PostgreSQL ha un sistema di gestione della concorrenza più adatto. È in grado di gestire brillantemente i casi in cui più processi possono accedere e modificare contemporaneamente i dati condivisi.

Se gestite una piccola azienda, PostgreSQL potrebbe essere la scelta giusta per voi perché è gratuito e offre diverse funzionalità utili per la gestione dei dati. È facile da installare e può essere implementato in quasi tutti i sistemi operativi. Tuttavia, per le aziende che hanno investito molto nello stack Microsoft SQL Server, SQL Server ha i suoi vantaggi rispetto a PostgreSQL.

Riepilogo

Nel complesso, sia PostgreSQL che SQL Server sono database funzionali e poliedrici. Mentre PostgreSQL può essere utilizzato per quasi tutti i sistemi operativi ed è adatto alle piccole aziende che richiedono la massima funzionalità, SQL Server è il migliore per le grandi aziende, soprattutto quelle che richiedono l’uso di prodotti Microsoft.

In questo articolo abbiamo illustrato le principali differenze tra PostgreSQL e SQL Server e le loro funzioni. La scelta “giusta” dipende da come intendete gestire la vostra azienda.

Tra PostgreSQL e SQL Server, quale database volete utilizzare per il vostro prossimo progetto e perché? Ci piacerebbe sentire le vostre opinioni! Condividetele nella sezione commenti qui sotto.

Amit Phaujdar

Freelance content writer by day, binge-watcher by night, with 200+ published articles online to date.