Ať už jde o migraci databáze nebo projektu z MySQL na PostgreSQL, nebo výběr PostgreSQL pro nový projekt pouze se znalostí MySQL, existuje několik věcí, které byste měli vědět o PostgreSQL a rozdílech mezi těmito dvěma databázovými systémy.
PostgreSQL je plně open source databázový systém vydaný pod vlastní licencí, PostgreSQL License, která je popisována jako „liberální licence Open Source, podobná licencím BSD nebo MIT“. To umožnilo The PostgreSQL Global Development Group (běžně označované jako PGDG), která vyvíjí a udržuje projekt s otevřeným zdrojovým kódem, vylepšit projekt s pomocí lidí z celého světa a proměnit jej v jedno z nejstabilnějších a na funkce bohatých databázových řešení. PostgreSQL dnes soutěží s nejlepšími proprietárními a open source databázovými systémy o funkce, výkon a popularitu.
PostgreSQL je vysoce kompatibilní relační databázový systém, který je škálovatelný, přizpůsobitelný a má prosperující komunitu lidí, kteří jej každý den vylepšují.
Co PostgreSQL potřebuje
V předchozím blogu jsme diskutovali o nastavení a optimalizaci PostgreSQL pro nový projekt. Je to dobrý úvod do konfigurace a chování PostgreSQL a lze jej nalézt zde:https://severalnines.com/blog/setting-optimal-environment-postgresql.
Pokud provádíte migraci aplikace z MySQL na PostgreSQL, nejlepším místem pro začátek by bylo její hostování na podobném hardwaru nebo hostitelské platformě jako zdrojová databáze MySQL.
On Premise
Pokud hostujete databázi na premise, jsou obecně nejlepší volbou pro hostování PostgreSQL holé kovové hostitele (spíše než virtuální stroje). Virtuální stroje občas přidávají některé užitečné funkce, ale přicházejí za cenu ztráty výkonu a výkonu od hostitele obecně, zatímco holý kov umožňuje softwaru PostgreSQL mít plný přístup k výkonu s menším počtem vrstev mezi ním a hardwarem. Místní hostitelé by pro správu databází potřebovali administrátora, ať už jde o zaměstnance na plný úvazek nebo dodavatele, podle toho, co má pro potřeby aplikace větší smysl.
In The Cloud
Cloud hosting ušel za posledních několik let dlouhou cestu a nespočet společností po celém světě hostuje své databáze na cloudových serverech. Vzhledem k tomu, že cloudoví hostitelé jsou vysoce konfigurovatelní, lze vybrat správnou velikost a výkon hostitele pro specifické potřeby databáze s odpovídajícími náklady.
V závislosti na použité možnosti hostování lze rychle zajistit nové hostitele, rychle vyladit paměť / procesor / disk a dokonce mohou být k dispozici další metody zálohování. Při výběru cloudového hostitele hledejte, zda je hostitel vyhrazený nebo sdílený, přičemž vyhrazený je lepší pro databáze s extrémně vysokým zatížením. Dalším klíčem je zajistit, aby IOPS dostupný pro cloudového hostitele byl dostatečně dobrý pro potřeby aktivity databáze. I s velkým paměťovým fondem pro PostgreSQL budou vždy existovat diskové operace pro zápis dat na disk nebo pro načtení dat, když nejsou v paměti.
Cloudové služby
Vzhledem k tomu, že PostgreSQL roste na popularitě, je k dispozici na mnoha cloudových databázových hostingových službách, jako je Heroku, Amazon AWS a další, a rychle dohání popularitu MySQL. Tyto služby umožňují třetí straně snadno hostovat a spravovat databázi PostgreSQL, což umožňuje soustředit se na aplikaci.
Porovnání pojmů / termínů
Při migraci z MySQL na PostgreSQL je třeba pokrýt několik srovnání, běžné konfigurační parametry, termíny nebo koncepty, které fungují podobně, ale mají své rozdíly.
Podmínky databáze
Různé databázové termíny mohou mít různý význam v rámci různých implementací technologie. Mezi MySQL a PostgreSQL existuje několik základních pojmů, které jsou chápány mírně odlišně, takže je někdy potřeba překlad.
„Shluk“
V MySQL se „shlukem“ obvykle rozumí několik hostitelů databáze MySQL, které jsou vzájemně propojeny, aby se klientům jevily jako jedna databáze nebo sada databází.
V PostgreSQL se při odkazování na „klastr“ jedná o jednu spuštěnou instanci databázového softwaru a všech jeho podprocesů, která pak obsahuje jednu nebo více databází.
"Databáze"
V MySQL mohou dotazy přistupovat k tabulkám z různých databází současně (za předpokladu, že uživatel má oprávnění pro přístup ke každé databázi).
SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
To se však v PostgreSQL nemůže stát, pokud nepoužíváte Foreign Data Wrapper (téma na jindy). Místo toho má databáze PostgreSQL možnost pro více „schémat“, která fungují podobně jako databáze v MySQL. Schémata obsahují tabulky, indexy atd. a lze k nim přistupovat současně pomocí stejného připojení k databázi, která je obsahuje.
SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Propojení s PostgreSQL
V klientovi příkazového řádku MySQL (mysql) používá rozhraní s databází klíčové funkce jako „DESCRIBE table“ nebo „SHOW TABLES“. Klient příkazového řádku PostgreSQL (psql) používá vlastní formu „příkazů zpětného lomítka“. Například místo ‚SHOW TABLES‘ je příkaz PostgreSQL ‚\dt‘ a místo ‚SHOW DATABASES;‘ je příkaz ‚\l‘.
Úplný seznam příkazů pro ‚psql‘ lze nalézt pomocí příkazu zpětného lomítka ‚\?‘ v psql.
Jazyková podpora
Stejně jako MySQL má PostgreSQL knihovny a pluginy pro všechny hlavní jazyky a také ovladače ODBC po vzoru MySQL a Oracle. Najít skvělou a stabilní knihovnu pro jakýkoli potřebný jazyk je snadný úkol.
Uložené procedury
Na rozdíl od MySQL má PostgreSQL na výběr širokou škálu podporovaných procedurálních jazyků. V základní instalaci PostgreSQL jsou podporované jazyky PL/pgSQL (Procedurální jazyk SQL), PL/Tcl (Procedurální jazyk Tcl), PL/Perl (Procedurální jazyk Perl) a PL/Python (Procedurální jazyk Python). Vývojáři třetích stran mohou mít více jazyků, které hlavní skupina PostgreSQL oficiálně nepodporuje.
Konfigurace
-
Paměť
MySQL to vyladí pomocí key_buffer_size při použití MyISAM a pomocí innodb_buffer_pool_size při použití InnoDB.
PostgreSQL používá shared_buffers pro hlavní paměťový blok daný do databáze pro ukládání dat do mezipaměti a obecně se drží kolem 1/4 systémové paměti, pokud to určité scénáře nevyžadují změnu. Dotazy využívající paměť k řazení používají hodnotu work_mem, kterou je třeba opatrně zvyšovat.
Nástroje pro migraci
Migrace na PostgreSQL může dát nějakou práci, ale existují nástroje, které komunita vyvinula, aby s tímto procesem pomohla. Obecně budou konvertovat / migrovat data z MySQL do PostgreSQL a znovu vytvářet tabulky / indexy. Uložené procedury nebo funkce jsou jiný příběh a obvykle vyžadují ruční přepsání buď částečně, nebo od základu.
Některé příklady dostupných nástrojů jsou pgloader a FromMySqlToPostgreSql. Pgloader je nástroj napsaný v Common Lisp, který importuje data z MySQL do PostgreSQL pomocí příkazu COPY a načítá data, indexy, cizí klíče a komentáře s převodem dat, aby data správně reprezentovala v PostgreSQL, jak bylo zamýšleno. FromMySqlToPostgreSql je podobný nástroj napsaný v PHP a dokáže převést datové typy MySQL na PostgreSQL a také cizí klíče a indexy. Oba nástroje jsou zdarma, existuje však mnoho dalších nástrojů (bezplatných i placených), které jsou nově vyvíjeny s vydáním nových verzí každého databázového softwaru.
Převod by měl vždy zahrnovat hloubkové vyhodnocení po migraci, aby se zajistilo, že data byla převedena správně a funkčnost funguje podle očekávání. Pro načasování a ověření dat se vždy doporučuje testování předem.
Možnosti replikace
Pokud pochází z MySQL, kde byla replikace použita, nebo je replikace z jakéhokoli důvodu vůbec potřeba, PostgreSQL má k dispozici několik možností, z nichž každá má své vlastní klady a zápory, v závislosti na tom, co je potřeba prostřednictvím replikace.
-
Vestavěné:
Ve výchozím nastavení má PostgreSQL svůj vlastní vestavěný režim replikace pro Point In Time Recovery (PITR). To lze nastavit buď pomocí odesílání protokolu založeného na souborech, kdy jsou soubory protokolu Write Ahead odeslány na záložní server, kde jsou čteny a přehrávány, nebo pomocí streamování replikace, kde záložní server pouze pro čtení načítá protokoly transakcí přes databázové připojení k přehrání. je.
Kteroukoli z těchto vestavěných možností lze nastavit buď jako „teplý pohotovostní režim“ nebo „horký pohotovostní režim“. „Teplý pohotovostní režim“ neumožňuje připojení, ale je připraven kdykoli se stát masterem a nahradit tak master s problémy . „Hot standby“ umožňuje připojení pouze pro čtení pro připojení a zadávání dotazů, kromě toho, že je v případě potřeby kdykoli připraven stát se masterem pro čtení/zápis.
-
Slony:
Jedním z nejstarších replikačních nástrojů pro PostgreSQL je Slony, což je metoda replikace založená na spouštěči, která umožňuje vysokou úroveň přizpůsobení. Slony umožňuje nastavení hlavního uzlu a libovolného počtu uzlů Replica a možnost přepnout hlavní uzel na libovolný požadovaný uzel a umožňuje správci vybrat, které tabulky (pokud nechce všechny) replikovat. Používá se nejen k replikaci dat v případě selhání / vyrovnávání zátěže, ale k odesílání konkrétních dat do jiných služeb nebo dokonce k minimálním upgradům prostojů, protože replikace může probíhat napříč různými verzemi PostgreSQL.
Slony má hlavní požadavek, aby každá replikovaná tabulka měla buď PRIMÁRNÍ KLÍČ, nebo UNIKÁTNÍ index bez sloupců s možnou hodnotou Null.
-
Bucardo:
Pokud jde o multi-master možnosti, Bucardo je jedním z mála pro PostgreSQL. Stejně jako Slony je to softwarový balíček třetí strany, který je umístěn nad PostgreSQL. Bucardo sám sebe nazývá „asynchronním replikačním systémem PostgreSQL, který umožňuje operace s více hlavními i více podřízenými“. Hlavní výhodou je multi-master replikace, která funguje docela dobře, ale postrádá řešení konfliktů, takže aplikace by si měly být vědomy možných problémů a odpovídajícím způsobem je opravit.
Existuje také mnoho dalších replikačních nástrojů a nalezení toho, který pro danou aplikaci funguje nejlépe, závisí na konkrétních potřebách.
Komunita
PostgreSQL má prosperující komunitu ochotnou pomoci s jakýmikoli problémy/informacemi, které mohou být potřeba.
-
IRC
Aktivní IRC chatovací místnost s názvem #postgresql je k dispozici na freenode jako celosvětový chat administrátorů a vývojářů o PostgreSQL a souvisejících projektech/problémech. K dispozici jsou ještě menší místnosti pro konkrétní osoby, jako je Slony, Bucardo a další.
-
Seznamy adresátů
Existuje několik e-mailových konferencí PostgreSQL pro ‚obecné‘, ‚administrátory‘, ‚výkon‘ a dokonce ‚nováčky‘ (skvělé místo, kde začít, pokud jste s PostgreSQL obecně noví). K odběru e-mailových konferencí se připojuje mnoho lidí po celém světě a poskytují velmi užitečné množství zdrojů pro zodpovězení jakékoli otázky, která může vyžadovat odpověď.
Úplný seznam PostgreSQL mailing listů lze nalézt na https://www.postgresql.org/list/
-
Skupiny uživatelů
Uživatelské skupiny jsou skvělým místem pro zapojení a aktivitu v komunitě a mnoho velkých měst po celém světě má k dispozici PostgreSQL User Group (PUG), do které se můžete připojit a zúčastnit se, a pokud ne, zvažte založení. Tyto skupiny jsou skvělé pro vytváření sítí, učení se novým technologiím a dokonce i pro osobní kladení otázek lidem s jakoukoli úrovní zkušeností.
-
Dokumentace
Nejdůležitější je, že PostgreSQL je zdokumentován velmi dobře. Veškeré informace o konfiguračních parametrech, funkcích SQL, použití, to vše lze snadno zjistit prostřednictvím oficiální dokumentace na webu PostgreSQL. Pokud není vůbec něco jasné, komunita pomůže v předchozích nastíněných možnostech.