Do czego ciekawego mógłbym użyć PostgreSQL?

0

Do czego ciekawego mógłbym użyć PostgreSQL? Chciałbym się nauczyć tej bazy, więc zrobiłbym jakiś ciekawy projekt tylko do jakiego typu projektów jest ona najlepsza? Wiem, że mogę robić to samo co na MySQL, ale może ma jakieś lepsze zastosowania? W ogóle jaką według was ma ona przewagę nad MySQL?

1

Praktycznie wszystko oprócz read-heavy oraz replikacji (aczkolwiek sytuacja się poprawia wraz z pSQL 10).

  • Lepsze pokrycie nowych standardów SQL-a. Jak ktoś lubi się katować SQL:93 to nie zauważy różnicy, ale jednak warto czasem zobaczyć co jest nowego.
  • Rozbudowane typy: UUID, tablice, Hstore oraz typy zdefiniowane przez użytkownika
  • CTE (ma się pojawić w MySQL 8)
  • Asynchroniczne powiadomienia
  • MySQL ma dość elastyczne podejście do błędów w zapytaniach jak np. NOT NULL i CONSTRAINT, a dodatkowo to zachowanie bardzo się różni pomiędzy silnikami
  • MySQL kiedyś zaimplementowało "swoją własną" wersję UTF-8, więc teraz mamy utf8 oraz utf8_mb4, przy czym pierwszego nie należy używać
  • Rozbudowane indeksy (btree, gin, gist, brin oraz hash) oraz wsparcie dla częściowych indeksów, poza tym IIRC MySQL ma czasem problem z łączeniem indeksów, więc jak masz index na polu a oraz indeks na polu b a zapytanie masz SELECT a, b FROM foo WHERE a = … AND b = … to potrafi dać sequential scan zamiast użyć indeksów
  • Natywne wsparcie dla MATERIALIZED VIEW (ostatnio musiałem tego użyć i obciążenie na DB spadło jakieś 7x)
  • WINDOW FUNCTIONS (z tego co widzę ma się poprawić w MySQL 8)
  • LATERAL JOIN
  • Foreign Data Wrapper (od normalnych jak file (wczytywanie danych z pliku) czy postgres (wczytywanie danych z innej instancji DB) po głupie jak twitter)
  • Wbudowane funkcjonalności OLAP (CUBE, GROUPING SETS oraz ROLLUP)
  • Duża ilość rozszerzeń jak:
    • Indeksy Blooma
    • btree_gin oraz btre_gist, które zwiększają ilość operatorów, które można użyć z danymi indeskami
    • pg_trgm indeksy trigramowe, które przydają się jak chcesz szukać po fragmentach dokumentów, a FTS jest overkillem (np. szukanie po fragmencie imienia i nazwiska)
    • MySQL domyślnie porównuje ignorując wielkość liter co IMHO jest dużym błędem, w Postgresie jest do tego rozszerzenie citext
    • tablefunc oferujące PIVOT tables
    • zewnętrzne rozszerzenie, ale zawsze, wsparcie dla TSDB jak np. gromadzenie logów czy statystyk

Pewnie znalazło by się więcej. Więc moje założenie zawsze jest takie: używaj Postgresa tak długo jak jesteś całkowicie pewien, że nie potrzebujesz czegoś innego (i raczej nie będzie wtedy to MySQL).

0

Wow dzięki, super post!

A możesz doradzić jaki projekt mógłbym zrobić oparty o PosgreSQLa tak żeby pobawić się w nim jego możliwościami? Ogólnie to czytałem, że dobrze się nadaje do pracy z JSONem a Ty akurat o tym nie napisałeś, a myślałem o jakimś prostym sklepie, żeby to wykorzystać.

0

W sumie dobra i bardzo łatwa w instalacji baza ogólnego przeznaczenia. Jak dla mnie nr 1 do nauki SQL. Znacznie łatwiejsza w instalacji niż np. Oracle.

Wadą jest mniej domyślnych przydanych narzędzi niż do Oracle i są raczej na niższym standardzie (nie wiem jak wygląda to z narzędziami od JetBrains, może się poprawiło: https://www.jetbrains.com/datagrip/). Ja używałem zwykłego prostego PGAdmin3 oraz SQL Power Architect Community Edititon (reverse eng, resowanie diagramu ERD).

Atutem jest szybki rozwój i również możliwość wsparcia komercyjnego https://www.enterprisedb.com/. Wadą jest pewnie mniejsza ilość certyfikowanych db-adminów niż w Oracle czy MS SQL Server.

Praca z JSON to nie tylko specjalnych typ do ich obsługi. Warte uwagi są projekty wykorzystujące PostgreSQL np. implementacje silnika MongoDB w bazie relacyjnej:
https://www.torodb.com/stampede/

Dla mnie po prostu domyślna baza relacyjna ogólnego przeznaczenia.

Ciekawą cechą jest obsługa wielu języków do programowania po stronie bazy, nie tylko proceduralny PL/pgSQL, ale także np. PL/Python. Może się przydać jak ktoś potrzebuje hurtowni danych i potrzebuje nietypowych funkcji agregujących (przy typowym programowaniu nie tak często).

1

Bo JSON jest już też w MySQLu, więc nie jest to wyróżniające się zastosowanie. Poza tym jeśli możesz powinieneś unikać denormalizacji DB (aka używania JSONa, tablic lub hstore). Jeśli chcesz pisać coś swojego to masz multum opcji i sklep jest jedną z nich. Jak chcesz się pouczyć pisać zapytania to możesz użyć Sakila DB, która jest bazą danych filmów i jest używana we wszystkich postach od jOOQ.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0