Of u nu een database of project migreert van MySQL naar PostgreSQL, of PostgreSQL kiest voor een nieuw project met alleen MySQL-kennis, er zijn een paar dingen die u moet weten over PostgreSQL en de verschillen tussen de twee databasesystemen.
PostgreSQL is een volledig open source databasesysteem dat is uitgebracht onder zijn eigen licentie, de PostgreSQL-licentie, die wordt beschreven als "een liberale Open Source-licentie, vergelijkbaar met de BSD- of MIT-licenties." Dit heeft de PostgreSQL Global Development Group (algemeen aangeduid als PGDG), die het open source-project ontwikkelt en onderhoudt, in staat gesteld om het project te verbeteren met hulp van mensen over de hele wereld, waardoor het een van de meest stabiele en veelzijdige database-oplossingen is geworden. Momenteel concurreert PostgreSQL met de beste propriëtaire en open source databasesystemen voor functies, prestaties en populariteit.
PostgreSQL is een zeer compliant relationeel databasesysteem dat schaalbaar en aanpasbaar is en een bloeiende gemeenschap heeft van mensen die het elke dag verbeteren.
Wat PostgreSQL nodig heeft
In een eerdere blog bespraken we het opzetten en optimaliseren van PostgreSQL voor een nieuw project. Het is een goede introductie tot de configuratie en het gedrag van PostgreSQL en is hier te vinden:https://severalnines.com/blog/setting-optimal-environment-postgresql.
Als u een toepassing migreert van MySQL naar PostgreSQL, kunt u het beste beginnen door deze te hosten op een vergelijkbare hardware of een vergelijkbaar hostingplatform als de MySQL-brondatabase.
Op locatie
Als de database on-premise wordt gehost, zijn bare-metal hosts (in plaats van virtuele machines) over het algemeen de beste optie voor het hosten van PostgreSQL. Virtuele machines voegen soms enkele handige functies toe, maar ze gaan ten koste van het verlies van vermogen en prestaties van de host in het algemeen, terwijl bare metal de PostgreSQL-software volledige toegang geeft tot prestaties met minder lagen tussen de host en de hardware. Hosts op locatie hebben een beheerder nodig om de databases te onderhouden, of het nu een fulltime werknemer of een contractant is, wat het meest logisch is voor de toepassingsbehoeften.
In de cloud
Cloudhosting heeft de afgelopen jaren een lange weg afgelegd en talloze bedrijven over de hele wereld hosten hun databases op cloudgebaseerde servers. Omdat cloudhosts in hoge mate configureerbaar zijn, kan de juiste grootte en kracht van de host worden geselecteerd voor de specifieke behoeften van de database, tegen een prijs die overeenkomt.
Afhankelijk van de gebruikte hostingoptie, kunnen nieuwe hosts snel worden ingericht, kan geheugen / cpu / schijf snel worden aangepast en kunnen zelfs aanvullende back-upmethoden beschikbaar zijn. Let er bij het kiezen van een cloudhost op of een host dedicated of gedeeld is, waarbij dedicated beter is voor databases met extreem hoge belasting. Een andere sleutel is om ervoor te zorgen dat de IOPS die beschikbaar is voor de cloudhost goed genoeg is voor de behoeften van de database-activiteit. Zelfs met een grote geheugenpool voor PostgreSQL, zullen er altijd schijfbewerkingen zijn om gegevens naar schijf te schrijven of gegevens op te halen als ze niet in het geheugen staan.
Clouddiensten
Omdat PostgreSQL steeds populairder wordt, is het beschikbaar op veel clouddatabase-hostingservices zoals Heroku, Amazon AWS en anderen, en haalt het snel de populariteit van MySQL in. Met deze services kan een derde partij eenvoudig een PostgreSQL-database hosten en beheren, zodat de focus op de applicatie kan blijven.
Concepten/term vergelijkingen
Er zijn een paar vergelijkingen die moeten worden gemaakt bij het migreren van MySQL naar PostgreSQL, algemene configuratieparameters, termen of concepten die op dezelfde manier werken, maar hun verschillen hebben.
Databasevoorwaarden
Verschillende databasetermen kunnen verschillende betekenissen hebben binnen verschillende implementaties van de technologie. Tussen MySQL en PostgreSQL zijn er een paar basistermen die iets anders worden begrepen, dus soms is een vertaling nodig.
'Cluster'
In MySQL verwijst een 'cluster' meestal naar meerdere MySQL-databasehosts die met elkaar zijn verbonden om als een enkele database of reeks databases voor clients te verschijnen.
Wanneer in PostgreSQL naar een 'cluster' wordt verwezen, is het een enkele actieve instantie van de databasesoftware en al zijn subprocessen, die dan een of meer databases bevat.
“Database”
In MySQL kunnen query's tegelijkertijd toegang krijgen tot tabellen uit verschillende databases (op voorwaarde dat de gebruiker toegang heeft tot elke database).
SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
In PostgreSQL kan dit echter niet gebeuren tenzij u Foreign Data Wrappers gebruikt (een onderwerp voor een andere keer). In plaats daarvan heeft een PostgreSQL-database de mogelijkheid voor meerdere 'schema's' die op dezelfde manier werken als databases in MySQL. Schema's bevatten de tabellen, indexen, enz. en zijn gelijktijdig toegankelijk via dezelfde verbinding met de database waarin ze zijn ondergebracht.
SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Interface met PostgreSQL
In de MySQL-opdrachtregelclient (mysql) gebruikt de interface met de database sleutelwerken zoals 'DESCRIBE table' of 'SHOW TABLES'. De PostgreSQL-opdrachtregelclient (psql) gebruikt zijn eigen vorm van 'backslash-opdrachten'. In plaats van 'SHOW TABLES' is de opdracht van PostgreSQL bijvoorbeeld '\dt' en in plaats van 'SHOW DATABASES;' is de opdracht '\l'.
Een volledige lijst met commando's voor 'psql' is te vinden door het backslash-commando '\?' in psql.
Taalondersteuning
Net als MySQL heeft PostgreSQL bibliotheken en plug-ins voor alle belangrijke talen, evenals ODBC-stuurprogramma's in de trant van MySQL en Oracle. Het vinden van een geweldige en stabiele bibliotheek voor elke gewenste taal is een gemakkelijke taak.
Opgeslagen procedures
In tegenstelling tot MySQL heeft PostgreSQL een breed scala aan ondersteunde proceduretalen om uit te kiezen. In de basisinstallatie van PostgreSQL zijn de ondersteunde talen PL/pgSQL (SQL-proceduretaal), PL/Tcl (Tcl-proceduretaal), PL/Perl (Perl-proceduretaal) en PL/Python (Python-proceduretaal). Externe ontwikkelaars hebben mogelijk meer talen die niet officieel worden ondersteund door de hoofdgroep PostgreSQL.
Configuratie
-
Geheugen
MySQL stemt dit af met key_buffer_size bij gebruik van MyISAM, en met innodb_buffer_pool_size bij gebruik van InnoDB.
PostgreSQL gebruikt shared_buffers voor het hoofdgeheugenblok dat aan de database wordt gegeven voor het cachen van gegevens, en houdt over het algemeen ongeveer 1/4e van het systeemgeheugen vast, tenzij bepaalde scenario's vereisen dat dit wordt gewijzigd. Query's die geheugen gebruiken om te sorteren, gebruiken de work_mem-waarde, die voorzichtig moet worden verhoogd.
Hulpprogramma's voor migratie
Migreren naar PostgreSQL kan wat werk vergen, maar er zijn tools die de community heeft ontwikkeld om te helpen bij het proces. Over het algemeen zullen ze de gegevens van MySQL naar PostgreSQL converteren / migreren en tabellen / indexen opnieuw maken. Opgeslagen procedures of functies zijn een ander verhaal en vereisen meestal handmatig herschrijven, gedeeltelijk of helemaal opnieuw.
Enkele voorbeelden van beschikbare tools zijn pgloader en FromMySqlToPostgreSql. Pglader is een tool geschreven in Common Lisp die gegevens importeert van MySQL in PostgreSQL met behulp van de COPY-opdracht, en gegevens, indexen, externe sleutels en opmerkingen laadt met gegevensconversie om de gegevens correct weer te geven in PostgreSQL zoals bedoeld. FromMySqlToPostgreSql is een vergelijkbare tool geschreven in PHP en kan MySQL-gegevenstypen converteren naar PostgreSQL, evenals externe sleutels en indexen. Beide tools zijn gratis, maar er zijn veel andere tools (gratis en betaald) die nieuw zijn ontwikkeld naarmate er nieuwe versies van elke databasesoftware worden uitgebracht.
Het converteren moet altijd een diepgaande evaluatie omvatten na de migratie om er zeker van te zijn dat de gegevens correct zijn geconverteerd en dat de functionaliteit werkt zoals verwacht. Vooraf testen wordt altijd aangemoedigd voor timings en gegevensvalidatie.
Replicatie-opties
Als het afkomstig is van MySQL waar replicatie is gebruikt, of replicatie om welke reden dan ook nodig is, heeft PostgreSQL verschillende opties beschikbaar, elk met zijn eigen voor- en nadelen, afhankelijk van wat nodig is door middel van replicatie.
-
Ingebouwd:
Standaard heeft PostgreSQL zijn eigen ingebouwde replicatiemodus voor Point In Time Recovery (PITR). Dit kan worden ingesteld met behulp van op bestanden gebaseerde verzending van logbestanden, waarbij Write Ahead-logbestanden worden verzonden naar een standby-server waar ze worden gelezen en afgespeeld, of Streaming Replication, waarbij een alleen-lezen standby-server transactielogboeken ophaalt via een databaseverbinding om ze opnieuw af te spelen hen.
Elk van deze ingebouwde opties kan worden ingesteld als 'warm standby' of 'hot standby'. Een 'warme standby' staat geen verbindingen toe, maar kan op elk moment een master worden om een master met problemen te vervangen . Een 'hot standby' maakt het mogelijk alleen-lezen verbindingen te verbinden en query's uit te voeren, naast het feit dat je op elk moment klaar bent om een lees-/schrijfmaster te worden, indien nodig.
-
Slony:
Een van de oudste replicatietools voor PostgreSQL is Slony, een op triggers gebaseerde replicatiemethode die een hoge mate van maatwerk mogelijk maakt. Met Slony kan een Master-node en een willekeurig aantal Replica-nodes worden ingesteld, en kan de Master naar elke gewenste node worden geschakeld, en kan de beheerder kiezen welke tabellen (als hij niet alle tabellen wil) repliceren. Het is niet alleen gebruikt voor het repliceren van gegevens in geval van storing/taakverdeling, maar ook voor het verzenden van specifieke gegevens naar andere services, of zelfs minimale downtime-upgrades, aangezien replicatie over verschillende versies van PostgreSQL kan gaan.
Slony heeft als belangrijkste vereiste dat elke tabel die moet worden gerepliceerd, ofwel een PRIMAIRE SLEUTEL heeft, ofwel een UNIEKE index zonder nullable-kolommen.
-
Bucardo:
Als het gaat om multi-masteropties, is Bucardo een van de weinige voor PostgreSQL. Net als Slony is het een softwarepakket van derden dat bovenop PostgreSQL zit. Bucardo noemt zichzelf "een asynchroon PostgreSQL-replicatiesysteem, dat zowel multi-master als multi-slave-bewerkingen mogelijk maakt." Het belangrijkste voordeel is replicatie met meerdere masters, die redelijk goed werkt, maar het ontbreekt aan conflictoplossing, dus toepassingen moeten op de hoogte zijn van mogelijke problemen en dienovereenkomstig oplossen.
Er zijn ook veel andere replicatietools, en het vinden van degene die het beste werkt voor een applicatie hangt af van de specifieke behoeften.
Gemeenschap
PostgreSQL heeft een bloeiende gemeenschap die bereid is om te helpen met eventuele problemen / informatie die nodig kan zijn.
-
IRC
Een actieve IRC-chatroom met de naam #postgresql is beschikbaar op freenode, aangezien beheerders en ontwikkelaars wereldwijd chatten over PostgreSQL en gerelateerde projecten/problemen. Er zijn zelfs kleinere kamers voor details zoals Slony, Bucardo en meer.
-
Mailinglijsten
Er zijn een handvol PostgreSQL-mailinglijsten voor 'algemeen', 'admin', 'performance' en zelfs 'novice' (een geweldige plek om te beginnen als PostgreSQL in het algemeen nieuw is). De mailinglijsten zijn door velen over de hele wereld geabonneerd en bieden een zeer nuttige schat aan bronnen om elke vraag te beantwoorden die mogelijk moet worden beantwoord.
Een volledige lijst van PostgreSQL-mailinglijsten is te vinden op https://www.postgresql.org/list/
-
Gebruikersgroepen
Gebruikersgroepen zijn een geweldige plek om betrokken te raken en actief te zijn in de gemeenschap, en veel grote steden over de hele wereld hebben een PostgreSQL-gebruikersgroep (PUG) beschikbaar om lid te worden en bij te wonen, en zo niet, overweeg dan om er een te starten. Deze groepen zijn geweldig om te netwerken, nieuwe technologieën te leren en zelfs om persoonlijk vragen te stellen aan mensen van elk ervaringsniveau.
-
Documentatie
Het belangrijkste is dat PostgreSQL zeer goed gedocumenteerd is. Alle informatie over configuratieparameters, SQL-functies, gebruik, alles kan gemakkelijk worden geleerd via de officiële documentatie op de website van PostgreSQL. Als er ook maar iets onduidelijk is, zal de community helpen met de eerder geschetste opties.