PostgreSQL 8.3 - początek końca mysql ?

Wiem że mysql ma wielu zwolenników i zawsze mają jeden argument przeciwko PostgreSQL - wydajność. Ponieważ wersja 8.3 jest już dostępna prawie rok postanowiłem zmigrować na nią kilka baz i myślę że argument o wydajności jest już zupełnie nieaktualny. Jeżeli projektujesz nową aplikacje pod mysql to poczytaj trochę i może zmienisz bazę :)

Dodany z kris.biz.pl do Technologia » Nowe technologie z tagami postgresql mysql bazy danych

Wykopali 219, zakopali 15

  • Reklamy Google

  • qris +15  

    My tu o PostgreSQL 8.3 a wersja 8.4 ma się pojawić na dniach. A w niej smakowite nowości, ja osobiście czekam na (Recursive) Common Table Expression - tego to nawet Oracle nie ma ;)

    pokaż komentarz
    qris
  • pstradomski 0  

    Ale MS SQL już CTE ma (chociaż też się cieszę, że będą też w PostgreSQL)

    pokaż komentarz
    pstradomski
  • thor +8  

    MS SQL ma kilka ciekawych rzeczy ale "standard" to, jak zwykle w MS, dla niego niemal obce słowo ;)

    pokaż komentarz
    thor
  • qris +1  

    @pstradomski
    CTE ma też IBM DB2 (chyba jako pierwsza) i Firebird (od wersji 2.1). Oracle też ma jego kawałek - ale bez możliwości rekurencyjnego wykonywania (na pocieszenie ma CONNECT BY - ale jest to mniej uniwersalne rozwiązanie).
    @thor
    CTE pojawiły się w standardzie SQL:1999, w SQL Server w wersji 2005. Czyli akurat tu MS nie wyszedł przed szereg. W sumie to wszystkie bazy danych to średnio zgodne z standardem SQL są.

    pokaż komentarz
    qris
  • shell +12  

    Nie wiem czy pamiętacie te wszystkie porównania, jak to MySQL jest szybki i bije PostgreSQL na głowę wydajnością. Tyle że niemal każdy test jaki widziałem, wykorzystywał engine MyISAM, nie obsługuje kluczy obcych. O kant d... więc takie porównania ;)

    PostgreSQL używam produkcyjnie od kilku lat, jeszcze od wersji 7.x. Na chwilę obecną 8.x ma takie możliwości, że głowa boli. Niemniej jednak, nie można odmówić MySQL-owi jednej rzeczy. W InnoDB indeks główny jest automatycznie klastrowany, w PostgreSQL wymusza się ręczne jego poukładanie. Gdyby nie to, PostgreSQL byłby idealny.

    pokaż komentarz
    shell
  • yoshi314 +5  

    no i gdyby nie ten "kop w jaja" w wersji 8.3 z wylaczeniem porownywania liczby z tekstem, byloby jeszcze lepiej.

    ale moze to sie odbije pozytywnie na wydajnosci, kto wie?

    pokaż komentarz
    yoshi314
  • koziolek666 +2  

    @yosu314, zawsze pozostaje rzutowanie.
    @shell, klastrowanie wyłączyli bo miało jakiego buga.

    pokaż komentarz
    koziolek666
  • yoshi314 0  

    @koziolek666, sprobuj tak przerobic kilkuletni produkcyjny system dla jakiejs hurtowni ;-). to naprawde bolesny krok.

    pokaż komentarz
    yoshi314
  • koziolek666 0  

    @yoshi314, rzuć okiem na mojego bloga... Ostatnio przerabiam LINC+COBOL+ALGOL generalnie niezła jazda.

    pokaż komentarz
    koziolek666
  • underley +6  

    Slony,. Mamooth, Londiste i kilka innych "rozwiązań zewnętrznych".

    A MySQL ma coś takiego jak PostGIS?
    Albo może potrafi korzystać z indeksów funkcyjnych? Nie?
    Może przynajmniej z cząstkowych? Też nie, poważnie?
    Oj... To może nauczył się już używać więcej niż jednego indeksu w zapytaniu?

    ;P

    pokaż komentarz
    underley
  • underley +6  

    Ja od siebie dodam, że "problemy wydajnościowe Postgresa" to mit od bardzo dawna, co najmniej od wersji 8.0, albo nawet 7.4. Potrzebny był tylko odpowiedni tuning, plus czasem jakiś pgpool na froncie.

    pokaż komentarz
    underley
  • toszcze +3  

    Wszystko fajnie, ale jest jeden problem - o ile z dostępnością Postgresa na serwerach wirtualnych problemu nie ma, o tyle adminów potrafiących poprawnie skonfigurować ten silnik jest jak na lekarstwo. MySQLa nauczyli się tuningować z konieczności, a z Postgresa korzysta na tyle niewielu ich klientów, że najwyraźniej nie czuli potrzeby zgłębiania jego tajników. I nie jest to mój wymysł - wiem to z własnego skromnego doświadczenia.

    Oczywiście zaraz ktoś powie, że mając serwer dedykowany można wszystko zrobić samemu, ale przecież jest wiele aplikacji, które z powodzeniem mogą działać na wirtualkach, a jednocześnie ich twórcy chcieliby skorzystać z możliwości, jakie daje Postgres.

    pokaż komentarz
    toszcze
  • kris2 +2  

    Ja bym nie przesadzał z tym tuningiem. Ostatnio trochę nad tym przysiedziałem bo chciałem wiedzieć co zmieniło się od wersji 8.3 i w ciągu 30 minut znalazłem i przeczytałem z 5 bardzo łopatologicznych artykułów które zrozumiała by średnio inteligentna małpa.

    pokaż komentarz
    kris2
  • toszcze +2  

    kris2: ja nie twierdzę, że to jest jakaś wiedza tajemna, której zgłębienie wymaga miesięcy nauki. Ja po prostu mówię, że większość osób zajmujących się administracją serwerów w firmach hostingowych takiej wiedzy nie posiada i dostępny dla klientów Postgres jest z reguły po prostu zainstalowany z domyślną konfiguracją.

    pokaż komentarz
    toszcze
  • grzegorzc +25  

    Jeden z niewielu wykopów, w którym wszyscy są tacy mili!! Same plusiki prawie.. ;] Widać że DB admini/developerzy to spokojni ludzie. ;]

    pokaż komentarz
    grzegorzc
  • Adaslaw +8  

    @grzegorzc
    Tak, bardzo spokojni ;]
    http://www.wrzuta.pl/obraz/aVmLt30Whi/ogloszenie

    pokaż komentarz
    Adaslaw
  • slakoz +2  

    Ja tylko dodam, że widać teraz kto czyta/redaguje/wykopuje/zakopuje linki na wykopie :D

    pokaż komentarz
    slakoz
  • qris +2  

    Tzn, kto? Zaciekawiła mnie Twa teoria, ale nie potrafię sam dojść do tych wnosków (to nie jest ironia, tylko zwykła szczera proźba)

    pokaż komentarz
    qris
  • litestep +1  

    Jak już tak zachęcacie to nie zapomnijcie wspomnieć że Postgres jest nadal sto lat za murzynami (tzn mysql) jeśli chodzi o collation. W Postgresie można to wybrać tylko podczas inicjalizacji całego klastra, w MySql można to przestawiać do woli i per kolumna.

    pokaż komentarz
    litestep
  • underley +2  

    Jedna przewaga. Za parę tygodni (jak wypuszczą 8.4) będzie już nieaktualna.

    (teraz czekam aż ktoś napisze o replikacji ;])

    pokaż komentarz
    underley
  • hofi 0  

    @underley
    A co z replikacją?

    pokaż komentarz
    hofi
  • M4ks +1  

    Slony?

    pokaż komentarz
    M4ks
  • Sejten +31  

    Nareszcie się coś ciekawego na wykopie pojawiło.

    pokaż komentarz
    Sejten
  • korro +8  

    Co prawda moje aplikacje maja to ta druga grupa - kilka tysięcy requestów dziennie, ale dla samego siebie następny projekt zrobię w oparciu o Postgresa.

    pokaż komentarz
    korro
  • qris +25  

    PostgreSQL nie tylko jest godny zaufania i wydajny, ale też bardzo przyjemny dla programisty. W artykule nie ma o tym mowy to pozwolę sobie napisać.

    PostgreSQL ma naprawdę ładną składnię, mocno zbliżoną do standardu, przyjemnie się w nim programuje. Przykładowo w Oracle chcąc pobierać klucz główny dopiero co wstawionego rekordu trzeba się ręcznie babrać z sekwencjami. W PostgreSQL się robi po prostu "INSERT INTO a(name) VALUES('Ala') RETURNING id".

    PostgreSQL ma wiele przydatnych rozszerzeń i możliwości:
    - tsearch2 - wyszukiwanie pełnotekstowe
    - PostGIS - obsługa danych pzestrzennych (mapy, itd)
    - obsługa XML
    - kolumny z wieloma wartościami (np int[])
    - pełna tranzakcyjność (w tym MVCC)
    - możliwość pisania funkcji w wielu językach
    - spore możliwości indeksów (w tym indeksy funkcyjne - coś co Oracle ma w tych najdroższych wersjach)

    pokaż komentarz
    qris
  • M4ks -4  

    tylko żeby jeszcze poprawnie działał z małymi i dużymi literkami w nazwach :)

    pokaż komentarz
    M4ks
  • qris +8  

    @M4ks
    Działa poprawnie, wystarczy ująć nazwę w cudzysłów (czyli "NazwaTabeli", czy "NIP")

    pokaż komentarz
    qris
  • dancios +3  

    myslalem ze wyszukiwanie pelnotekstowe juz jest standardowo w 8.3 bez zadnych wtyczek :>

    pokaż komentarz
    dancios
  • M4ks +2  

    wiem. Czyli nie działa poprawnie..
    standard mowi - case nie ma znaczenia - czyli dupaID = dupaid

    pokaż komentarz
    M4ks
  • Adaslaw +5  

    Też używam PostgreSQL do jednego ze swoich projektów. A dokładniej - PostgreSQL używam do developmentu systemu, a "produkcyjnie" ma to chodzić na Oracle.
    Ponieważ używam Hibernate nie ma większego znaczenia, czy pod spodem jest PostgreSQL czy Oracle. Przełączenie systemu z bazy PostgreSQL na Oracle zajęło kilka minut (przeedytowanie pliku konfiguracyjnego Hibernate).

    btw:
    Wydawało mi się, że w Oracle jest konstrukcja:
    INSERT INTO ... VALUES ... RETURNING
    ... ale może się myliłem (mniejsza o szczegóły).

    pokaż komentarz
    Adaslaw
  • asix6 +4  

    @Adaslaw
    dobrze Ci sie wydawało

    pokaż komentarz
    asix6
  • underley +4  

    @M4ks
    _standard mowi - case nie ma znaczenia - czyli dupaID = dupaid _

    Pitolisz. Działa poprawnie, zgodnie ze standardem SQLa, a nawet zgodnie z tym co piszesz.

    underley=# select 1 from genes where patient_id = 666;
    ?column?
    ----------
    (0 rows)

    underley=# select 1 from genes where patient_ID = 666;
    ?column?
    ----------
    (0 rows)

    underley=# select 1 from genes where "patientID" = 666;
    ERROR: column "patient
    ID" does not exist

    [blee, parser wykopu psuje pojedyncze podkreślenia, przez co przykład wygląda nieco dziwnie. ale w parent_id miedzy parent a id jest podkreślenie]

    pokaż komentarz
    underley
  • qris +1  

    @Adaslaw
    Tak, Oracle ma "INSERT INTO ... VALUES ... RETURNING", tylko, że jest ona wykonana z lekka paskudnie (w mojej skromnej opini).

    W PostgreSQL wykonuje się:
    INSERT INTO tab(name) VALUES (:name) RETURNING id
    a dane (w tym przypadku id) pobiera się dokładnie tak samo jakby to był jakiś SELECT

    W Oracle trzeba przekazać dodatkowy (bardzo specjalny) parametr do wywołania, w którym po jego zakończeniu pojawi się wynik:
    INSERT INTO tab(name) VALUES (:name) RETURNING :id

    pokaż komentarz
    qris
  • asix6 +1  

    a co w tym parametrze jest takiego specjalnego?

    INSERT INTO tab(name) VALUES (:name) RETURNING id into :id

    imo bardzo wygodna konstrukcja do skryptow/procedur, nie spotkalem sie z sytuacja w ktorej wygodniejsze by bylo bezposrednie zwracanie (nie przez zmienna)

    pokaż komentarz
    asix6
  • dave8x 0  

    wystarczy zamiast badziewnego mechanizmu Myisam, uzywac pelnowartosciowego zaawansowanego Innodb, a nie tylko narzekac na Myslqa i wychwalac Postgresa ... Poza tym i tak 99% projektow WWW nie potrzebuje tak zaawansowanych rozwiazan, wystarczy najprostsza bazka.

    pokaż komentarz
    dave8x
  • el_che 0  

    W Oracle returning jest od 10g.

    Co do PostgreSQL to moze i jest fajny ale zadna powazna instyucja na to sie nie zgodzi. Prawie wszyscy jada na Oracle'u...

    pokaż komentarz
    el_che
  • pstradomski +3  

    @dave8x - ale to i tak rozwiązuje tylko część problemów.

    Na InnoDB nie ma indeksów pełnotekstowych, trzeba sobie radzić denormalizacją do osobnej tabeli myisam... no i są problemy dotyczące całego MySQL-a, bez względu na silnik składowania. Np. zepsute triggery (nie działające po kaskadach, nie mogące modyfikować tabeli, na której są nałożone), brak indeksów funkcyjnych albo częściowych, brak CHECK, tragiczne DEFAULT (tylko stałe lub NOW(), przy czym NOW() tylko na jednej kolumnie timestamp w tabeli), brak sekwencji.... Można by wymieniać długo. MySQL jest po prostu dużo słabszą bazą jeśli idzie o możliwość jej programowania.

    pokaż komentarz
    pstradomski
  • underley +4  

    Co do PostgreSQL to moze i jest fajny ale zadna powazna instyucja na to sie nie zgodzi. Prawie wszyscy jada na Oracle'u...

    Phi... Znam dwa wdrożenia Postgresa w dwóch bardzo poważnych polskich instytucjach z sektora finansowego. Owszem, instutucje te mają też Oracle i MSQL, ale nie zmienia to faktu, że do pewnych rzeczy użyły Postgresa.

    pokaż komentarz
    underley
  • Emiliusz +2  

    Reszta artykułów z tego bloga też jest warta uwagi

    pokaż komentarz
    Emiliusz
  • maciekpacut +4  

    "dokonał porównania mysql i postgresql na maszynach wielordzeniowych i wychodzi na to że postgresql jest szybszy od mysql, a przewaga rośnie wraz z liczbą konkurencyjnych zapytań i liczną rdzeni procesora"

    concurrent - współbieżny

    przyznam, że udało Ci się wywołać u mnie uśmiech politowania

    pokaż komentarz
    maciekpacut
  • kris2 +6  

    super, trochę rozrywki się zawsze przyda ;)

    pokaż komentarz
    kris2
  • semisiu 0  

    Tego postu nie da się czytać!

    Merytorycznie miałkie stwierdzenia, już w pierwszym zdaniu rażący błąd gramatyczny, całość brzmi jak przeżycia emo-nastolatki na blogasku. Klikając na wykopie w ten artykuł spodziewałem się czegoś odkrywczego, a trafiłem na zlepek nic nie wartych wynurzeń, nie popartych obiektywnymi argumentami.

    Skąd takie rzeczy biorą się na wykopie!?

    pokaż komentarz
    semisiu
  • M4ks +2  

    helloł, od tego są blogi, żeby na nich przeżywać.
    Zresztą zawsze możesz zakopać to i wykopać..co to dzisiaj mieliśmy..tekst z JM sprzed 8 lat i pare niewiele młodszych grafik z tego samego źródła :)

    pokaż komentarz
    M4ks
pokaż 

Wykopali i zakopali (219 / 15)