MySQL vs PostgreSQL für Webanwendungen [geschlossen]

122

Ich arbeite an einer Webanwendung mit Python (Django) und möchte wissen, ob MySQL oder PostgreSQL für die Bereitstellung für die Produktion besser geeignet sind.

In einem Podcast sagte Joel, dass er einige Probleme mit MySQL habe und die Daten nicht konsistent seien.

Ich würde gerne wissen, ob jemand solche Probleme hatte. Auch wenn es um Leistung geht, die leicht angepasst werden kann?

cnu
quelle

Antworten:

127

Ein Hinweis für zukünftige Leser: Der folgende Text wurde zuletzt im August 2008 bearbeitet. Das war vor fast 11 Jahren. Die Software kann sich schnell von Version zu Version ändern. Bevor Sie sich also für ein DBMS entscheiden, das auf den folgenden Hinweisen basiert, sollten Sie einige Nachforschungen anstellen, um festzustellen, ob es noch korrekt ist. Suchen Sie unten nach neueren Antworten.


Besser?

MySQL wird viel häufiger von Webhosts bereitgestellt.

PostgreSQL ist ein viel ausgereifteres Produkt.

Es gibt diese Diskussion, die sich mit Ihrer "besseren" Frage befasst

Laut dieser Webseite ist MySQL anscheinend schnell, wenn die gleichzeitigen Zugriffsebenen niedrig sind und wenn viel mehr Lese- als Schreibvorgänge ausgeführt werden. Andererseits zeigt es eine geringe Skalierbarkeit mit zunehmenden Lasten und Schreib- / Leseverhältnissen. PostgreSQL ist bei niedrigen Parallelitätsstufen relativ langsam, lässt sich jedoch mit zunehmender Last gut skalieren und bietet gleichzeitig eine ausreichende Isolation zwischen gleichzeitigen Zugriffen, um Verlangsamungen bei hohen Schreib- / Leseverhältnissen zu vermeiden. Es wird auf eine Reihe von Leistungsvergleichen verwiesen, da diese Dinge sehr ... empfindlich auf Bedingungen reagieren.

Wenn Ihr Entscheidungsfaktor also lautet: " Was ist schneller? ", Lautet die Antwort: "Es kommt darauf an. Wenn es wirklich darauf ankommt, testen Sie Ihre Bewerbung gegen beide. " in jeder Datenbank) und veranlassen Sie sie, den Mist aus den Datenbanken zu entfernen, und wählen Sie dann. Es ist erstaunlich, wie teuer gute Datenbankadministratoren sind. und sie sind jeden Cent wert .

Wenn es darauf ankommt.

Was es wahrscheinlich nicht tut, wählen Sie einfach die Datenbank aus, deren Sound Ihnen gefällt, und gehen Sie damit um. Eine bessere Leistung kann mit mehr RAM und CPU, einem angemesseneren Datenbankdesign und cleveren Tricks für gespeicherte Prozeduren usw. erzielt werden - und all dies ist für Random-Website-X billiger und einfacher als die Qual, über die man sich entscheiden muss, MySQL oder PostgreSQL und spezialisiertes Tuning von teuren DBAs.


Joel sagte in diesem Podcast auch, dass dieser Kommentar zurückkommen würde, um ihn zu beißen, weil die Leute sagen würden, dass MySQL ein Miststück sei - Joel konnte keine countZeilen zurückbekommen. Der Plural der Anekdote sind keine Daten. Er sagte :

MySQL ist die einzige Datenbank, gegen die ich in meiner Karriere jemals programmiert habe und die Datenintegritätsprobleme hatte, bei denen Sie Abfragen durchführen und unsinnige Antworten zurückerhalten, die falsch sind.

und er sagte auch:

Es ist nur eine Anekdote. Und das ist eines der Dinge, die mich am Bloggen oder am Internet im Allgemeinen frustrieren. [...] Es gibt nur eine seltsame Tendenz, Anekdoten zu Wahrheiten zu machen, und als Blogger fühle ich mich ein bisschen schuldig

Josh
quelle
14
Ein weiterer Punkt ist, dass Sie bei Verwendung eines Frameworks möglicherweise Ihren Code aus der Datenbank abstrahieren können, sodass Sie problemlos wechseln können.
Don Jones
"Welche ist schneller?" . Hängt davon ab, was Sie wollen. Wenn Sie eine ACID-kompatible Datenbank wünschen, lesen Sie diese: randombugs.com/linux/mysql-postgresql-benchmarks.html
Sacx
46
Auch bemerkenswert. MySQL ist im Besitz von Oracle. Daher würde es niemals erlaubt sein, mit ihren bezahlten Produkten zu konkurrieren.
Unixman83
15

Nur viele Monate später.

Die geografischen Fähigkeiten der beiden Datenbanken sind sehr, sehr unterschiedlich. PostgreSQL hat die außergewöhnliche PostGIS-Erweiterung. Die geografische Funktionalität von MySQL ist im Vergleich praktisch Null.

Wenn Ihr Webdienst über eine Standortkomponente verfügt, wählen Sie PostgreSQL.

Sommer
quelle
13

Ich habe Django nicht verwendet, aber ich habe sowohl MySQL als auch PostgreSQL verwendet. Wenn Sie Ihre Datenbank nur als Back-End für Django verwenden, spielt dies keine Rolle, da die meisten Unterschiede dadurch abstrahiert werden. PostgreSQL ist etwas skalierbarer (es trifft die Mauer nicht so schnell wie MySQL, wenn die Datengröße / Clientanzahl zunimmt).

Der wirkliche Unterschied ergibt sich, wenn Sie ein neues System ausführen. Dann würde ich PostgreSQL zweifellos empfehlen, da es viel mehr Funktionen bietet, die Ihre DB-Ebene viel anpassbarer machen, sodass Sie sie an Ihre Anforderungen anpassen können.

Grauer Panther
quelle
7

Obwohl es etwas veraltet ist, lohnt es sich, die MySQL Gotchas- Seite zu lesen . Viele der dort aufgeführten Punkte sind nach meinem besten Wissen immer noch wahr.

Ich benutze PostgreSQL.

Greg Hewgill
quelle
1
+1 ... muss ... nicht ... Antworten, die nur Links sind, positiv bewerten ... aber was ist, wenn die Links wirklich wirklich gut sind? Oh, dann haben Sie eine positive Bewertung :)
icc97
6

Ich benutze beide ausgiebig. Meine Wahl für ein bestimmtes Projekt läuft darauf hinaus:

  • Lizenzierung - Werden Sie Ihre App (IANAL) vertreiben?
  • Bestehende Infrastruktur und Wissensdatenbank
  • Jede spezielle Sauce, die Sie haben müssen.

Durch spezielle Sauce mag ich Dinge:

  • einfache / billige Replikation = MySQL
  • Riesige Datensatzprobleme mit kleinen Ergebnissen = PostgreSQL. Verwenden Sie die Spracherweiterungen und arbeiten Sie sehr effizient mit Daten. (PL / Python, PL / TCL, PL / Perl usw.)
  • Schnittstelle zu R Statistical Libraries = PostgreSQL PL / R verfügbar in debian / ubuntu
Lance Rushing
quelle
3
Postgres hat auch eine einfache / billige Replikation. Es ist einfach nicht eingebaut , weil es ein halbes Dutzend zur Auswahl gibt, jedes mit seinen eigenen guten und schlechten Teilen. Sie können also die eine mittelmäßige Replikation für MySQL oder eine von vielen für PostgreSQL auswählen . Deine Entscheidung.
Randal Schwartz
5
PostgreSQL 9.0+ verfügt über eine integrierte binäre WAL-Replikation, die sehr einfach einzurichten ist.
Sean
1

Ich denke nicht, dass Sie in früheren Entwicklungen (Build, Staging, Prod) eine andere Datenbankmarke verwenden sollten, da dies Sie beißen wird.

Soweit ich weiß, ist PostgreSQL eine korrektere Datenbankimplementierung, während mySQl weniger korrekt (weniger konform), aber schneller ist.

Wenn Sie also so ziemlich eine CRUD-Anwendung schreiben, ist mySQL der richtige Weg. Wenn Sie bestimmte Funktionen aus Ihrer Datenbank benötigen (wenn Sie sich nicht sicher sind, tun Sie dies nicht), sollten Sie sich mit postgreSQL befassen.

SCdF
quelle
0

Wenn Sie eine Anwendung schreiben, die möglicherweise auf verschiedenen Servern verteilt wird, hat MySQL aufgrund der Portabilität einen hohen Stellenwert gegenüber PostgreSQL. PostgreSQL ist auf weniger als zufriedenstellenden Webhosts schwer zu finden, auch wenn es einige gibt. In den meisten Fällen ist PostgreSQL langsamer als MySQL, insbesondere wenn es letztendlich um die Feinabstimmung geht. Alles in allem würde ich sagen, dass Sie PostgreSQL für eine kurze Zeit ausprobieren sollten, damit Sie es nicht vollständig vermeiden und dann ein Urteil fällen.

tslocum
quelle
1
Ich stimme Ihnen zu, dass Webhosts mit geringerer Qualität eine Auswahl bieten sollten, anstatt MySQL in unsere Gesichter zu schieben. Wenn Sie sich jedoch für Shared Hosting entscheiden, sind Sie ihnen sowieso ausgeliefert. Eine DBM-Auswahl ist also nicht so wichtig.
Unixman83
0

Danke dir. Ich habe Django mit MySQL verwendet und es ist in Ordnung. Wählen Sie Ihre Datenbank anhand der Funktionen aus, die Sie benötigen. Schwer zu vergleichender MySQL und Postgres. Vergleichen Sie Postgress besser mit SQl Server.

Stephen Cox
quelle
0

@ WolfmanDragon

PostgreSQL unterstützt (winzige) Objekte, ist jedoch von Natur aus eine relationale Datenbank. Von seiner About-Seite :

PostgreSQL ist ein leistungsstarkes relationales Open Source- Datenbanksystem.

marcospereira
quelle
1
ein objektrelationales Datenbankverwaltungssystem ISA Relational Database Management System. Wenn Sie weiter in die PostgSQL-Dokumentation lesen, werden Sie feststellen, dass PostgSql ein ORDBMS ist. Vielleicht verwechseln Sie ORDBMS mit ODBMS wie Objectivity / DB.
WolfmanDragon
-1

MySQL ist ein relationales Datenbankverwaltungssystem, während PostgreSQL ein objektrelationales Datenbankverwaltungssystem ist . PostgreSQL eignet sich gut für C ++ - oder Java-Entwickler, da es uns mehr Kontrolle darüber gibt, wie Abfragen geschrieben werden. ORDBMS bietet uns auch Objekte und benutzerdefinierte Typen. Die SQL-Abfragen selbst sind den ISO-Standards viel näher als MySQL.
Benötigen Sie ein ORDBMS oder ein RDBMS? Das wird Ihre Frage besser beantworten.

WolfmanDragon
quelle
Das ist eine Art Vereinfachung. Nur weil Sie kein ORDBMS benötigen, müssen Sie sich nicht unbedingt für MySQL entscheiden. Es gibt andere bedeutendere Unterschiede, nein?
Don Jones
1
Du hast Recht. Ich versuche nicht wie ein PostgreSQL-Drücker zu klingen. Ich sehe keinen wirklichen Grund, etwas anderes als PostgreSQL zu verwenden, es sei denn, das Design erfordert eine echte Objektdatenbank. Ich sehe keinen Sinn in MySQL, außer dass mehr Leute damit vertraut sind.
WolfmanDragon