Sia che si stia migrando un database o un progetto da MySQL a PostgreSQL, sia che si scelga PostgreSQL per un nuovo progetto con la sola conoscenza di MySQL, ci sono alcune cose da sapere su PostgreSQL e le differenze tra i due sistemi di database.
PostgreSQL è un sistema di database completamente open source rilasciato con una propria licenza, la PostgreSQL License, che è descritta come "una licenza Open Source liberale, simile alle licenze BSD o MIT". Ciò ha consentito al PostgreSQL Global Development Group (comunemente denominato PGDG), che sviluppa e mantiene il progetto open source, di migliorare il progetto con l'aiuto di persone di tutto il mondo, trasformandolo in una delle soluzioni di database più stabili e ricche di funzionalità disponibile. Oggi PostgreSQL compete con i migliori sistemi di database proprietari e open source per funzionalità, prestazioni e popolarità.
PostgreSQL è un sistema di database relazionale altamente conforme, scalabile, personalizzabile e dotato di una fiorente comunità di persone che lo migliorano ogni giorno.
Di cosa ha bisogno PostgreSQL
In un blog precedente, abbiamo discusso della configurazione e dell'ottimizzazione di PostgreSQL per un nuovo progetto. È una buona introduzione alla configurazione e al comportamento di PostgreSQL e può essere trovata qui:https://severalnines.com/blog/setting-optimal-environment-postgresql.
Se si esegue la migrazione di un'applicazione da MySQL a PostgreSQL, il miglior punto di partenza sarebbe ospitarla su hardware o piattaforma di hosting simili al database MySQL di origine.
In sede
Se si ospita il database in sede, gli host bare metal (piuttosto che le macchine virtuali) sono generalmente l'opzione migliore per ospitare PostgreSQL. Le macchine virtuali a volte aggiungono alcune utili funzionalità, ma a costo di perdere potenza e prestazioni dall'host in generale, mentre il bare metal consente al software PostgreSQL di avere pieno accesso alle prestazioni con meno livelli tra esso e l'hardware. Gli host locali avrebbero bisogno di un amministratore per la manutenzione dei database, che si tratti di un dipendente o di un appaltatore a tempo pieno, a seconda di ciò che ha più senso per le esigenze dell'applicazione.
Nella nuvola
Il cloud hosting ha fatto molta strada negli ultimi anni e innumerevoli aziende in tutto il mondo ospitano i propri database in server basati su cloud. Poiché gli host cloud sono altamente configurabili, è possibile selezionare la giusta dimensione e potenza dell'host per le esigenze specifiche del database, con un costo corrispondente.
A seconda dell'opzione di hosting utilizzata, è possibile eseguire rapidamente il provisioning di nuovi host, modificare rapidamente memoria/cpu/disco e possono essere disponibili anche metodi di backup aggiuntivi. Quando si sceglie un host cloud, verificare se un host è dedicato o condiviso, essendo dedicato migliore per database a carico estremamente elevato. Un'altra chiave è assicurarsi che gli IOPS disponibili per l'host cloud siano sufficientemente buoni per le esigenze dell'attività del database. Anche con un grande pool di memoria per PostgreSQL, ci saranno sempre operazioni su disco per scrivere dati su disco o recuperare dati quando non sono in memoria.
Servizi Cloud
Poiché PostgreSQL sta diventando sempre più popolare, è disponibile su molti servizi di hosting di database cloud come Heroku, Amazon AWS e altri e sta rapidamente raggiungendo la popolarità di MySQL. Questi servizi consentono a terzi di ospitare e gestire facilmente un database PostgreSQL, consentendo di concentrarsi sull'applicazione.
Concetti / confronti di termini
Ci sono alcuni confronti da fare durante la migrazione da MySQL a PostgreSQL, parametri di configurazione comuni, termini o concetti che funzionano in modo simile ma hanno le loro differenze.
Termini del database
Vari termini di database possono avere significati diversi all'interno di diverse implementazioni della tecnologia. Tra MySQL e PostgreSQL, ci sono alcuni termini di base che vengono intesi in modo leggermente diverso, quindi a volte è necessaria una traduzione.
"Gruppo"
In MySQL, un "cluster" di solito si riferisce a più host di database MySQL collegati tra loro per apparire come un singolo database o un insieme di database ai client.
In PostgreSQL, quando si fa riferimento a un "cluster", si tratta di una singola istanza in esecuzione del software del database e di tutti i suoi sottoprocessi, che quindi contiene uno o più database.
"Banca dati"
In MySQL, le query possono accedere a tabelle di database diversi contemporaneamente (a condizione che l'utente disponga dell'autorizzazione per accedere a ciascun database).
SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Tuttavia in PostgreSQL ciò non può accadere a meno che non si utilizzino i wrapper di dati esterni (un argomento per un'altra volta). Invece, un database PostgreSQL ha l'opzione per più "schemi" che funzionano in modo simile ai database in MySQL. Gli schemi contengono le tabelle, gli indici, ecc. e sono accessibili contemporaneamente dalla stessa connessione al database che li ospita.
SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Interfaccia con PostgreSQL
Nel client della riga di comando MySQL (mysql), l'interfaccia con il database utilizza funzioni chiave come "DESCRIBE table" o "SHOW TABLES". Il client della riga di comando di PostgreSQL (psql) utilizza la propria forma di "comandi backslash". Ad esempio, invece di "MOSTRA TABELLE", il comando di PostgreSQL è "\dt" e invece di "MOSTRA DATABASE;", il comando è "\l".
Un elenco completo di comandi per 'psql' può essere trovato dal comando barra rovesciata '\?' all'interno di psql.
Supporto linguistico
Come MySQL, PostgreSQL ha librerie e plugin per tutti i principali linguaggi, oltre a driver ODBC sulla falsariga di MySQL e Oracle. Trovare una libreria eccezionale e stabile per qualsiasi lingua necessaria è un compito facile.
Procedure archiviate
A differenza di MySQL, PostgreSQL ha un'ampia gamma di linguaggi procedurali supportati tra cui scegliere. Nell'installazione di base di PostgreSQL, i linguaggi supportati sono PL/pgSQL (linguaggio procedurale SQL), PL/Tcl (linguaggio procedurale Tcl), PL/Perl (linguaggio procedurale Perl) e PL/Python (linguaggio procedurale Python). Gli sviluppatori di terze parti potrebbero avere più linguaggi non ufficialmente supportati dal gruppo PostgreSQL principale.
Configurazione
-
Memoria
MySQL lo ottimizza con key_buffer_size quando si utilizza MyISAM e con innodb_buffer_pool_size quando si utilizza InnoDB.
PostgreSQL utilizza shared_buffers per il blocco di memoria principale fornito al database per la memorizzazione nella cache dei dati e generalmente rimane circa 1/4 della memoria di sistema, a meno che alcuni scenari non richiedano la modifica. Le query che utilizzano la memoria per l'ordinamento utilizzano il valore work_mem, che dovrebbe essere aumentato con cautela.
Strumenti per la migrazione
La migrazione a PostgreSQL può richiedere del lavoro, ma ci sono strumenti che la comunità ha sviluppato per aiutare con il processo. Generalmente convertono/migreranno i dati da MySQL a PostgreSQL e ricreeranno tabelle/indici. Le stored procedure o funzioni sono una storia diversa e di solito richiedono una riscrittura manuale in parte o da zero.
Alcuni strumenti di esempio disponibili sono pgloader e FromMySqlToPostgreSql. Pgloader è uno strumento scritto in Common Lisp che importa i dati da MySQL in PostgreSQL utilizzando il comando COPY e carica dati, indici, chiavi esterne e commenti con la conversione dei dati per rappresentare correttamente i dati in PostgreSQL come previsto. FromMySqlToPostgreSql è uno strumento simile scritto in PHP e può convertire i tipi di dati MySQL in PostgreSQL, nonché chiavi esterne e indici. Entrambi gli strumenti sono gratuiti, tuttavia esistono molti altri strumenti (gratuiti ea pagamento) e vengono sviluppati di recente man mano che vengono rilasciate nuove versioni di ciascun software di database.
La conversione dovrebbe sempre includere una valutazione approfondita dopo la migrazione per assicurarsi che i dati siano stati convertiti correttamente e che la funzionalità funzioni come previsto. È sempre incoraggiato il test in anticipo per i tempi e la convalida dei dati.
Opzioni di replica
Se proviene da MySQL in cui è stata utilizzata la replica o la replica è necessaria per qualsiasi motivo, PostgreSQL ha diverse opzioni disponibili, ognuna con i propri pro e contro, a seconda di ciò che è necessario attraverso la replica.
-
Integrato:
Per impostazione predefinita, PostgreSQL ha la propria modalità di replica integrata per il Point In Time Recovery (PITR). Questo può essere impostato utilizzando il log shipping basato su file, in cui i file di registro Write Ahead vengono inviati a un server di standby dove vengono letti e riprodotti, o la replica in streaming, in cui un server di sola lettura standby recupera i log delle transazioni su una connessione al database per riprodurli loro.
Una di queste opzioni integrate può essere impostata come "warm standby" o "hot standby". Un "warm standby" non consente connessioni ma è pronto per diventare un master in qualsiasi momento per sostituire un master che ha problemi . Un "hot standby" consente alle connessioni di sola lettura di connettersi ed emettere query, oltre a essere pronte a diventare anche un master di lettura/scrittura in qualsiasi momento, se necessario.
-
Slony:
Uno degli strumenti di replica più vecchi per PostgreSQL è Slony, che è un metodo di replica basato su trigger che consente un alto livello di personalizzazione. Slony consente la configurazione di un nodo Master e un numero qualsiasi di nodi Replica e la possibilità di passare dal Master a qualsiasi nodo desiderato e consente all'amministratore di scegliere quali tabelle (se non si desidera che tutte le tabelle) replicare. È stato utilizzato non solo per replicare i dati in caso di errore/bilanciamento del carico, ma anche per spedire dati specifici ad altri servizi o anche per aggiornamenti minimi dei tempi di inattività, poiché la replica può essere eseguita su diverse versioni di PostgreSQL.
Slony ha il requisito principale che ogni tabella da replicare abbia una CHIAVE PRIMARIA o un indice UNICO senza colonne nullable.
-
Bucardo:
Quando si tratta di opzioni multi-master, Bucardo è uno dei pochi per PostgreSQL. Come Slony, è un pacchetto software di terze parti che si trova sopra PostgreSQL. Bucardo si definisce "un sistema di replica PostgreSQL asincrono, che consente operazioni sia multi-master che multi-slave". Il vantaggio principale è la replica multi-master, che funziona abbastanza bene, ma manca di risoluzione dei conflitti, quindi le applicazioni dovrebbero essere consapevoli di possibili problemi e risolverli di conseguenza.
Esistono anche molti altri strumenti di replica e trovare quello che funziona meglio per un'applicazione dipende dalle esigenze specifiche.
Comunità
PostgreSQL ha una fiorente comunità disposta ad aiutare con qualsiasi problema/informazione che potrebbe essere necessaria.
-
IRC
Una chat room IRC attiva denominata #postgresql è disponibile su freenode, in quanto amministratori e sviluppatori in tutto il mondo chattano su PostgreSQL e relativi progetti/problemi. Ci sono stanze ancora più piccole per dettagli come Slony, Bucardo e altro.
-
Mailing list
Ci sono una manciata di mailing list di PostgreSQL per "generale", "amministratore", "prestazioni" e persino "novizio" (un ottimo punto di partenza se non si conosce PostgreSQL in generale). Le mailing list sono sottoscritte da molti in tutto il mondo e forniscono una ricchezza molto utile di risorse per rispondere a qualsiasi domanda a cui potrebbe essere necessario rispondere.
Un elenco completo delle mailing list di PostgreSQL è disponibile su https://www.postgresql.org/list/
-
Gruppi di utenti
I gruppi di utenti sono un ottimo posto per essere coinvolti e attivi nella comunità e molte grandi città in tutto il mondo hanno a disposizione un PostgreSQL User Group (PUG) a cui partecipare e, in caso contrario, considerare di avviarne uno. Questi gruppi sono l'ideale per fare networking, apprendere nuove tecnologie e anche solo porre domande di persona a persone di qualsiasi livello di esperienza.
-
Documentazione
Ancora più importante, PostgreSQL è documentato molto bene. Qualsiasi informazione per parametri di configurazione, funzioni SQL, utilizzo, tutto può essere facilmente appreso attraverso la documentazione ufficiale fornita sul sito Web di PostgreSQL. Se qualcosa non è chiaro, la community aiuterà nelle opzioni descritte in precedenza.