Niezależnie od tego, czy przeprowadzasz migrację bazy danych lub projektu z MySQL do PostgreSQL, czy wybierasz PostgreSQL dla nowego projektu z samą wiedzą o MySQL, jest kilka rzeczy, które należy wiedzieć o PostgreSQL i różnicach między tymi dwoma systemami baz danych.
PostgreSQL jest systemem baz danych w pełni open source, wydanym na własnej licencji, PostgreSQL License, która jest opisana jako „liberalna licencja Open Source, podobna do licencji BSD lub MIT”. Umożliwiło to The PostgreSQL Global Development Group (powszechnie określanej jako PGDG), która rozwija i utrzymuje projekt open source, ulepszyć projekt z pomocą ludzi z całego świata, przekształcając go w jedno z najbardziej stabilnych i bogatych w funkcje rozwiązań bazodanowych Obecnie PostgreSQL konkuruje z najlepszymi zastrzeżonymi i otwartymi systemami baz danych pod względem funkcji, wydajności i popularności.
PostgreSQL to wysoce zgodny relacyjny system baz danych, który jest skalowalny, konfigurowalny i ma kwitnącą społeczność ludzi, którzy codziennie go ulepszają.
Czego potrzebuje PostgreSQL
W poprzednim blogu omawialiśmy konfigurację i optymalizację PostgreSQL dla nowego projektu. Jest to dobre wprowadzenie do konfiguracji i zachowania PostgreSQL i można je znaleźć tutaj:https://severalnines.com/blog/setting-optimal-environment-postgresql.
Jeśli migrujesz aplikację z MySQL do PostgreSQL, najlepszym miejscem do rozpoczęcia jest hostowanie jej na podobnym sprzęcie lub platformie hostingowej co źródłowa baza danych MySQL.
Na miejscu
Jeśli baza danych jest hostowana lokalnie, hosty bare metal (zamiast maszyn wirtualnych) są zazwyczaj najlepszą opcją do hostowania PostgreSQL. Maszyny wirtualne czasami dodają kilka przydatnych funkcji, ale kosztują one ogólną utratę mocy i wydajności hosta, podczas gdy gołe oprogramowanie pozwala oprogramowaniu PostgreSQL na pełny dostęp do wydajności przy mniejszej liczbie warstw między nim a sprzętem. Lokalnie hosty będą potrzebować administratora do obsługi baz danych, niezależnie od tego, czy jest to pracownik zatrudniony na pełny etat, czy wykonawca, w zależności od tego, co jest bardziej sensowne dla potrzeb aplikacji.
W chmurze
Hosting w chmurze przeszedł długą drogę w ciągu ostatnich kilku lat, a niezliczone firmy na całym świecie hostują swoje bazy danych na serwerach w chmurze. Ponieważ hosty w chmurze są wysoce konfigurowalne, odpowiedni rozmiar i moc hosta można wybrać do konkretnych potrzeb bazy danych, przy odpowiadających kosztach.
W zależności od użytej opcji hostingu, nowe hosty można szybko udostępnić, pamięć / procesor / dysk można szybko dostosować, a nawet dodatkowe metody tworzenia kopii zapasowych mogą być dostępne. Wybierając hosta w chmurze, sprawdź, czy host jest dedykowany, czy współdzielony, dedykowany jest lepszy dla baz danych o bardzo dużym obciążeniu. Innym kluczem jest upewnienie się, że IOPS dostępne dla hosta w chmurze jest wystarczająco dobre dla potrzeb związanych z działalnością bazy danych. Nawet przy dużej puli pamięci dla PostgreSQL, zawsze będą operacje dyskowe w celu zapisania danych na dysku lub pobrania danych, gdy nie ma ich w pamięci.
Usługi w chmurze
Ponieważ PostgreSQL zyskuje na popularności, jest dostępny w wielu usługach hostingu baz danych w chmurze, takich jak Heroku, Amazon AWS i innych, i szybko dogania popularność MySQL. Usługi te pozwalają stronie trzeciej na łatwe hostowanie i zarządzanie bazą danych PostgreSQL, co pozwala skupić się na aplikacji.
Porównania pojęć / terminów
Istnieje kilka porównań, które należy uwzględnić podczas migracji z MySQL do PostgreSQL, wspólne parametry konfiguracyjne, terminy lub koncepcje, które działają podobnie, ale różnią się między sobą.
Warunki bazy danych
Różne terminy dotyczące bazy danych mogą mieć różne znaczenia w różnych implementacjach technologii. Pomiędzy MySQL i PostgreSQL istnieje kilka podstawowych terminów, które są rozumiane nieco inaczej, więc czasami potrzebne jest tłumaczenie.
„Klaster”
W MySQL „klaster” zwykle odnosi się do wielu hostów bazy danych MySQL połączonych ze sobą, aby wyświetlać się klientom jako pojedyncza baza danych lub zestaw baz danych.
W PostgreSQL, odwołując się do „klastra”, jest to pojedyncza uruchomiona instancja oprogramowania bazy danych i wszystkich jego podprocesów, która następnie zawiera jedną lub więcej baz danych.
„Baza danych”
W MySQL zapytania mogą uzyskiwać dostęp do tabel z różnych baz danych w tym samym czasie (pod warunkiem, że użytkownik ma uprawnienia dostępu do każdej bazy danych).
SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Jednak w PostgreSQL nie może się to zdarzyć, chyba że użyjesz obcych opakowań danych (temat na inny czas). Zamiast tego baza danych PostgreSQL ma opcję wielu „schematów”, które działają podobnie do baz danych w MySQL. Schematy zawierają tabele, indeksy itp. i można do nich uzyskać dostęp jednocześnie za pomocą tego samego połączenia z bazą danych, która je przechowuje.
SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Interfejs z PostgreSQL
W kliencie wiersza poleceń MySQL (mysql), łączenie się z bazą danych wykorzystuje klucz działa jak „DESCRIBE table” lub „SHOW TABLES”. Klient wiersza poleceń PostgreSQL (psql) używa własnej formy „polecenia odwróconego ukośnika”. Na przykład zamiast „SHOW TABLES” poleceniem PostgreSQL jest „\dt”, a zamiast „SHOW DATABASES;” poleceniem jest „\l”.
Pełną listę poleceń dla „psql” można znaleźć za pomocą polecenia odwrotnego ukośnika „\?” w psql.
Wsparcie językowe
Podobnie jak MySQL, PostgreSQL ma biblioteki i wtyczki dla wszystkich głównych języków, a także sterowniki ODBC na wzór MySQL i Oracle. Znalezienie świetnej i stabilnej biblioteki dla dowolnego potrzebnego języka jest łatwym zadaniem.
Przechowywane procedury
W przeciwieństwie do MySQL, PostgreSQL ma do wyboru szeroką gamę obsługiwanych języków proceduralnych. W podstawowej instalacji PostgreSQL obsługiwane języki to PL/pgSQL (język proceduralny SQL), PL/Tcl (język proceduralny Tcl), PL/Perl (język proceduralny Perla) i PL/Python (język proceduralny Pythona). Programiści zewnętrzni mogą mieć więcej języków, które nie są oficjalnie obsługiwane przez główną grupę PostgreSQL.
Konfiguracja
-
Pamięć
MySQL dostraja to za pomocą key_buffer_size w przypadku korzystania z MyISAM oraz innodb_buffer_pool_size w przypadku korzystania z InnoDB.
PostgreSQL używa shared_buffers dla głównego bloku pamięci przekazanego do bazy danych w celu buforowania danych i generalnie trzyma około 1/4 pamięci systemowej, chyba że niektóre scenariusze wymagają zmiany. Zapytania używające pamięci do sortowania używają wartości work_mem, którą należy ostrożnie zwiększać.
Narzędzia do migracji
Migracja do PostgreSQL może wymagać trochę pracy, ale istnieją narzędzia, które społeczność opracowała, aby pomóc w tym procesie. Zazwyczaj konwertują/migrują dane z MySQL do PostgreSQL i odtwarzają tabele/indeksy. Procedury lub funkcje przechowywane to inna historia i zwykle wymagają ręcznego przepisywania w części lub od podstaw.
Niektóre dostępne przykładowe narzędzia to pgloader i FromMySqlToPostgreSql. Pgloader to narzędzie napisane w Common Lisp, które importuje dane z MySQL do PostgreSQL za pomocą polecenia COPY i ładuje dane, indeksy, klucze obce i komentarze z konwersją danych, aby poprawnie reprezentować dane w PostgreSQL zgodnie z przeznaczeniem. FromMySqlToPostgreSql jest podobnym narzędziem napisanym w PHP i może konwertować typy danych MySQL na PostgreSQL, a także klucze obce i indeksy. Oba narzędzia są bezpłatne, jednak istnieje wiele innych narzędzi (bezpłatnych i płatnych), które są nowo opracowywane wraz z wydawaniem nowych wersji każdego oprogramowania bazodanowego.
Konwersja powinna zawsze obejmować dogłębną ocenę po migracji, aby upewnić się, że dane zostały poprawnie przekonwertowane, a funkcjonalność działa zgodnie z oczekiwaniami. Zawsze zachęcamy do wcześniejszego testowania w celu sprawdzenia czasów i walidacji danych.
Opcje replikacji
Jeśli pochodzi z MySQL, w którym zastosowano replikację lub w ogóle jest ona potrzebna z jakiegokolwiek powodu, PostgreSQL ma kilka dostępnych opcji, każda z własnymi zaletami i wadami, w zależności od tego, co jest potrzebne przez replikację.
-
Wbudowane:
Domyślnie PostgreSQL ma własny wbudowany tryb replikacji dla odzyskiwania punktu w czasie (PITR). Można to skonfigurować za pomocą przesyłania dziennika opartego na plikach, gdzie pliki dziennika zapisu z wyprzedzeniem są wysyłane na serwer rezerwowy, gdzie są odczytywane i odtwarzane, lub replikacji strumieniowej, gdzie serwer rezerwowy tylko do odczytu pobiera dzienniki transakcji przez połączenie z bazą danych w celu ponownego odtworzenia. ich.
Każdą z tych wbudowanych opcji można ustawić jako „ciepłe czuwanie” lub „gorące czuwanie”. „Ciepłe czuwanie” nie zezwala na połączenia, ale jest gotowe do stania się masterem w dowolnym momencie, aby zastąpić mastera w przypadku problemów . „Gotowy tryb gotowości” umożliwia połączeniom tylko do odczytu łączenie się i wysyłanie zapytań, a także gotowość do stania się w razie potrzeby wzorcem odczytu/zapisu w dowolnym momencie.
-
Słonie:
Jednym z najstarszych narzędzi replikacji dla PostgreSQL jest Slony, która jest metodą replikacji opartą na wyzwalaczu, która umożliwia wysoki poziom dostosowania. Slony umożliwia konfigurację węzła głównego i dowolnej liczby węzłów repliki oraz możliwość przełączenia węzła głównego na dowolny żądany węzeł, a także pozwala administratorowi wybrać, które tabele (jeśli nie wszystkie tabele) mają być replikowane. Jest używany nie tylko do replikacji danych w przypadku awarii / równoważenia obciążenia, ale także do przesyłania określonych danych do innych usług, a nawet do minimalnych przestojów, ponieważ replikacja może przebiegać w różnych wersjach PostgreSQL.
Slony ma główny wymóg, aby każda replikowana tabela miała albo klucz podstawowy, albo indeks UNIQUE bez kolumn dopuszczających wartość null.
-
Bucardo:
Jeśli chodzi o opcje multi-master, Bucardo jest jednym z niewielu dla PostgreSQL. Podobnie jak Slony, jest to pakiet oprogramowania innej firmy, który znajduje się na szczycie PostgreSQL. Bucardo nazywa siebie „asynchronicznym systemem replikacji PostgreSQL, umożliwiającym zarówno operacje multi-master, jak i multi-slave”. Główną korzyścią jest replikacja z wieloma wzorcami, która działa dość dobrze, jednak brakuje w niej rozwiązania konfliktów, więc aplikacje powinny być świadome możliwych problemów i odpowiednio je naprawiać.
Istnieje również wiele innych narzędzi do replikacji, a znalezienie tego, które działa najlepiej dla aplikacji, zależy od konkretnych potrzeb.
Społeczność
PostgreSQL ma dobrze prosperującą społeczność chętną do pomocy w rozwiązywaniu wszelkich problemów/informacji, które mogą być potrzebne.
-
IRC
Aktywny czat IRC o nazwie #postgresql jest dostępny na freenode, gdzie administratorzy i programiści na całym świecie rozmawiają o PostgreSQL i powiązanych projektach/problemach. Są jeszcze mniejsze sale na konkrety, takie jak Slony, Bucardo i nie tylko.
-
Listy mailingowe
Istnieje kilka list mailingowych PostgreSQL dla „ogólnych”, „administratorów”, „wydajności”, a nawet „nowicjuszów” (świetne miejsce na rozpoczęcie, jeśli jesteś nowy w PostgreSQL w ogóle). Listy mailingowe są subskrybowane przez wiele osób na całym świecie i zapewniają bardzo przydatne bogactwo zasobów, aby odpowiedzieć na każde pytanie, które może wymagać odpowiedzi.
Pełną listę list mailingowych PostgreSQL można znaleźć pod adresem https://www.postgresql.org/list/
-
Grupy użytkowników
Grupy użytkowników są świetnym miejscem do zaangażowania się i aktywności w społeczności, a wiele dużych miast na całym świecie ma dostępną grupę użytkowników PostgreSQL (PUG), do której można dołączyć i uczestniczyć, a jeśli nie, rozważ jej założenie. Grupy te świetnie nadają się do nawiązywania kontaktów, uczenia się nowych technologii, a nawet do osobistego zadawania pytań osobom o dowolnym poziomie doświadczenia.
-
Dokumentacja
Co najważniejsze, PostgreSQL jest bardzo dobrze udokumentowany. Wszelkie informacje dotyczące parametrów konfiguracyjnych, funkcji SQL, użycia — wszystko to można łatwo uzyskać dzięki oficjalnej dokumentacji dostępnej na stronie internetowej PostgreSQL. Jeśli w ogóle coś jest niejasne, społeczność pomoże w poprzednio przedstawionych opcjach.