MySQL vs PostgreSQL dla aplikacji internetowych [zamknięte]

122

Pracuję nad aplikacją internetową w języku Python (Django) i chciałbym wiedzieć, czy MySQL lub PostgreSQL byłyby bardziej odpowiednie do wdrożenia w środowisku produkcyjnym.

W jednym z podcastów Joel powiedział, że miał problemy z MySQL i dane nie były spójne.

Chciałbym wiedzieć, czy ktoś miał takie problemy. Także jeśli chodzi o wydajność, którą można łatwo dostosować?

cnu
źródło

Odpowiedzi:

127

Uwaga dla przyszłych czytelników: Poniższy tekst był ostatnio edytowany w sierpniu 2008 roku. To prawie 11 lat temu od tej zmiany. Oprogramowanie może szybko zmieniać się z wersji na wersję, więc zanim wybierzesz DBMS na podstawie poniższych porad, zrób kilka badań, aby sprawdzić, czy nadal jest dokładny. Sprawdź poniżej nowsze odpowiedzi.


Lepszy?

MySQL jest znacznie częściej udostępniany przez hosty internetowe.

PostgreSQL to znacznie bardziej dojrzały produkt.

Jest to dyskusja adresowania „lepsze” pytanie

Najwyraźniej, zgodnie z tą stroną internetową , MySQL działa szybko, gdy równoległe poziomy dostępu są niskie i gdy jest o wiele więcej odczytów niż zapisów. Z drugiej strony wykazuje niską skalowalność wraz ze wzrostem obciążeń i współczynników zapisu / odczytu. PostgreSQL działa stosunkowo wolno przy niskich poziomach współbieżności, ale dobrze się skaluje wraz ze wzrostem poziomu obciążenia, zapewniając jednocześnie wystarczającą izolację między równoczesnymi dostępami, aby uniknąć spowolnień przy wysokich współczynnikach zapisu / odczytu. Następnie prowadzi do szeregu porównań wydajności, ponieważ te rzeczy są bardzo ... wrażliwe na warunki.

Więc jeśli twoim czynnikiem decyzyjnym jest „ co jest szybsze? ” Wtedy odpowiedź brzmi „to zależy. Jeśli to naprawdę ma znaczenie, przetestuj swoją aplikację na obu. w każdej bazie danych) i poproś ich, aby dostroili bzdury z baz danych, a następnie wybierz. To zdumiewające, jak drogie są dobrzy administratorzy baz danych; i są warte każdego centa .

Kiedy to ma znaczenie.

Które prawdopodobnie nie, więc po prostu wybierz dowolną bazę danych, której dźwięk lubisz i idź z nią; lepszą wydajność można kupić, mając więcej pamięci RAM i procesora, bardziej odpowiedni projekt bazy danych, sprytne sztuczki z procedurami składowanymi i tak dalej - a wszystko to jest tańsze i łatwiejsze w przypadku losowej witryny X niż zadawanie sobie trudu wyboru, MySQL lub PostgreSQL i specjalistyczne strojenie od drogich baz danych.


Joel powiedział również w tym podcastie, że komentarz wróci, by go ugryźć, ponieważ ludzie będą mówić, że MySQL to gówno - Joel nie mógł odzyskać ani jednego countz wierszy. Liczba mnoga anegdoty to nie dane. Powiedział :

MySQL to jedyna baza danych, z jaką kiedykolwiek programowałem w swojej karierze, która miała problemy z integralnością danych, w której wykonujesz zapytania i otrzymujesz bezsensowne odpowiedzi, które są niepoprawne.

i powiedział też:

To tylko anegdota. I to jest jedna z rzeczy, która mnie frustruje w blogowaniu lub ogólnie w Internecie. [...] Jest po prostu dziwna tendencja do przekształcania anegdot w prawdę i właściwie jako bloger zaczynam czuć się trochę winny z tego powodu

Josh
źródło
15
Inną kwestią jest to, że jeśli używasz frameworka, możesz być w stanie wyodrębnić kod z bazy danych, aby móc łatwo się przełączać.
Don Jones,
"który jest szybszy?" . Zależy od tego, co chcesz, jeśli chcesz bazę danych zgodną z ACID, przeczytaj to: randombugs.com/linux/mysql-postgresql-benchmarks.html
Sacx
47
Warto również zwrócić uwagę. MySQL jest własnością firmy Oracle. Dlatego nigdy nie byłoby dozwolone konkurowanie z ich płatnymi produktami.
unixman83
15

Po prostu dzwonił wiele miesięcy później.

Możliwości geograficzne obu baz danych są bardzo, bardzo różne. PostgreSQL ma wyjątkowe rozszerzenie PostGIS. W porównaniu z tym funkcjonalność geograficzna MySQL jest praktycznie zerowa.

Jeśli Twoja usługa internetowa zawiera składnik lokalizacji, wybierz PostgreSQL.

Lato
źródło
14

Nie używałem Django, ale używałem zarówno MySQL, jak i PostgreSQL. Jeśli będziesz używać swojej bazy danych tylko jako zaplecza dla Django, nie ma to większego znaczenia, ponieważ usunie większość różnic. PostgreSQL jest trochę bardziej skalowalny, ponieważ nie uderza w mur tak szybko, jak MySQL, gdy zwiększa się rozmiar danych / liczba klientów.

Prawdziwa różnica pojawia się, jeśli robisz nowy system. W takim razie poleciłbym bez trudu PostgreSQL, ponieważ ma o wiele więcej funkcji, które sprawiają, że twoja warstwa DB jest znacznie bardziej konfigurowalna, dzięki czemu możesz ją dostosować do dowolnych wymagań.

Szara Pantera
źródło
7

Chociaż jest trochę nieaktualny, warto przeczytać stronę MySQL Gotchas . Według mojej najlepszej wiedzy, wiele z wymienionych tam pozycji jest nadal aktualnych.

Używam PostgreSQL.

Greg Hewgill
źródło
6

Używam obu szeroko. Mój wybór do konkretnego projektu sprowadza się do:

  • Licencjonowanie - czy zamierzasz rozpowszechniać swoją aplikację (IANAL)
  • Istniejąca infrastruktura i baza wiedzy
  • Każdy specjalny sos, który musisz mieć.

Przez specjalny sos rozumiem takie rzeczy jak:

  • Łatwa / tania replikacja = MySQL
  • Ogromne problemy ze zbiorami danych z małymi wynikami = PostgreSQL. Korzystaj z rozszerzeń językowych i wykonuj bardzo wydajne operacje na danych. (PL / Python, PL / TCL, PL / Perl itp.)
  • Interfejs z bibliotekami statystycznymi R = PostgreSQL PL / R dostępny w debian / ubuntu
Lance Rushing
źródło
3
Postgres ma również łatwą / tanią replikację. Po prostu nie jest wbudowany , ponieważ do wyboru jest pół tuzina, każdy z własnymi dobrymi i złymi częściami. Możesz więc wybrać jedną przeciętną replikację dla MySQL lub jedną z wielu dla PostgreSQL. Twój wybór.
Randal Schwartz
6
PostgreSQL 9.0+ ma wbudowaną binarną replikację WAL, która jest bardzo łatwa w konfiguracji.
Sean,
1

Cóż, nie sądzę, abyś używał innej marki bazy danych w jakimkolwiek wcześniejszym rozwoju (kompilacja, staging, prod), ponieważ wróci to, by cię ugryźć.

Z tego, jak rozumiem, PostgreSQL jest bardziej „poprawną” implementacją bazy danych, podczas gdy mySQl jest mniej poprawna (mniej zgodna), ale szybsza.

Więc jeśli prawie piszesz aplikację CRUD, mySQL jest drogą do zrobienia. Jeśli potrzebujesz pewnych funkcji ze swojej bazy danych (jeśli nie jesteś pewien, to nie), możesz zajrzeć do postgreSQL.

SCdF
źródło
1

Jeśli piszesz aplikację, która może być dość często dystrybuowana na różnych serwerach, MySQL ma dużo większą wagę niż PostgreSQL ze względu na przenośność. PostgreSQL jest trudny do znalezienia na mniej niż zadowalających serwerach internetowych, chociaż jest ich kilka. W większości przypadków PostgreSQL jest wolniejszy niż MySQL, zwłaszcza jeśli chodzi o ostateczne dostrojenie. Podsumowując, powiedziałbym, żebym dał PostgreSQL szansę na krótki czas, w ten sposób nie unikniesz go całkowicie, a następnie dokonaj oceny.

tslocum
źródło
1
Zgadzam się z tobą, że więcej niższej jakości hosty internetowe powinny oferować wybór zamiast rzucać nam MySQL w twarz. Jednak wybierając hosting współdzielony, i tak jesteś na ich łasce. Dlatego wybór DBM nie ma większego znaczenia.
unixman83
0

Dziękuję Ci. Użyłem Django z MySQL i jest w porządku. Wybierz bazę danych pod kątem potrzebnych funkcji. Trudno porównać MySQL i Postgres. Lepiej porównać Postgress do SQl Server.

Stephen Cox
źródło
0

@WolfmanDragon

PostgreSQL ma (niewielkie) wsparcie dla obiektów, ale z natury jest relacyjną bazą danych. Z jego strony :

PostgreSQL to potężny system relacyjnych baz danych typu open source .

marcospereira
źródło
2
system zarządzania obiektowo-relacyjnymi bazami danych ISA System zarządzania relacyjnymi bazami danych. Jeśli przeczytasz dalej w dokumentacji PostgSQL, przekonasz się, że PostgSql to ORDBMS. Być może mylisz ORDBMS z ODBMS, na przykład Objectivity / DB.
WolfmanDragon
-1

MySQL to system zarządzania relacyjnymi bazami danych, natomiast PostgreSQL to system obiektowo- relacyjny . PostgreSQL jest odpowiedni dla programistów C ++ lub Java, ponieważ daje nam większą kontrolę nad sposobem pisania zapytań. ORDBMS udostępnia nam również obiekty i typy zdefiniowane przez użytkownika. Same zapytania SQL są znacznie bliższe standardom ISO niż MySQL.
Czy potrzebujesz ORDBMS lub RDBMS? To lepiej odpowie na twoje pytanie.

WolfmanDragon
źródło
To trochę zbytnie uproszczenie; tylko dlatego, że nie potrzebujesz ORDBMS, niekoniecznie oznacza, że ​​musisz korzystać z MySQL. Są inne, bardziej znaczące różnice, prawda?
Don Jones,
1
Masz rację. Staram się nie brzmieć jak popychacz PostgreSQL. Nie widzę żadnego prawdziwego powodu, aby używać czegoś innego niż PostgreSQL, chyba że projekt wymaga prawdziwej bazy danych obiektów. Nie widzę sensu w MySQL poza tym, że więcej osób go zna.
WolfmanDragon