Ist MySQL in etwas besser als PostgreSQL?

8

Ich weiß, die Frage klingt provokativ, ist es aber wirklich nicht. Ich finde in letzter Zeit, dass MySQL in vielen Bereichen einschränkend ist und PostgreSQL immer mehr mag. Es skaliert viel besser und respektiert die SQL-Standards viel mehr als MySQL.

Ich bin jedoch noch neu in der PostgreSQL-Welt und da ich bereit bin, mich für alle meine zukünftigen Projekte von MySQL zu entfernen, möchte ich wissen: Gibt es eine bestimmte Funktion von MySQL, die besser funktioniert (wie in mehr)? leistungsstärker oder benutzerfreundlicher usw.) als in PostgreSQL?

Ich frage mich, was ich von MySQL vermissen werde. Ich habe bereits festgestellt, dass die Felder AUTO_INCREMENT in MySQL praktischer sind als SEQUENCES in PostgreSQL, und die Bereitstellung unter Windows war in der Vergangenheit problematisch (kein Problem mehr. Nie ein Problem für mich).

Was sonst?

Massimiliano Torromeo
quelle
Hier ist eine Art Kuriosität: stackoverflow.com/questions/2221787/…
Paul
Ich hasse MySQL, aber es macht MERGE / UPSERT leichter als PG, und ich finde Felder mit Groß- und Kleinschreibung ärgerlich
Neil McGuigan

Antworten:

3

Sie nähern sich dem eindeutig aus Entwicklersicht, sodass Sie bei SO möglicherweise nützlichere Antworten finden.

Aus administrativer Sicht:
- Replikation (HA)
- Replikation (Skalierung *)
- Replikation (Backups)
- Anwendungsunterstützung
- Größe und Tiefe der Community (Dokumentation, Support)
- Vorhandene Installationsbasis / verfügbare Jobs

* Beachten Sie, dass Sie die postgresSkalierung besser erwähnt haben. Skalierung bedeutet für jeden etwas anderes, aber in der Regel lassen sich Dinge, die die Last auf mehrere Server verteilen können, besser skalieren als Dinge, die dies nicht tun.

Kagenut
quelle
Ich interessiere mich auch für die administrativen Aspekte. Ich war mir nicht sicher, wo ich das posten sollte. Übrigens haben Sie Recht mit der Skalierung. Mit besser skalieren meinte ich wirklich, auf einer einzelnen Maschine, nicht auf Clustern. MySQL hat auf Multicore-Systemen nur einen sehr geringen Leistungsgewinn, und heutzutage sind Multicore die Norm. Ich habe auch gesehen, dass MySQL von guter Leistung zu fast nutzlos wurde, als die Arbeitslast zunahm, und der Eindruck war, dass postgresql die Last besser gehandhabt hätte, aber ich verstehe, dass dies umstritten ist und besser abgefragt werden sollte. Übrigens sind die Replikationsargumente eine Überlegung wert.
Massimiliano Torromeo
1
MySQL hatte früher nur einen sehr geringen Perf-Gewinn für Multicore, aber wenn Sie einen gut gepatchten 5.0-Build ausführen, fast jeden 5.1-Build, einen Innodb-Plugin-Build (/ xtradb) oder einen 5.4-Build, der nicht mehr stimmt. Nicht zu versuchen, konfrontativ zu sein, aber Ihre anekdotische MySQL-Verlangsamung hätte mit ziemlicher Sicherheit angegangen werden können, und Ihr "Eindruck", den Postgres besser gehandhabt hätte, ist eine nackte Annahme. Der entscheidende Punkt hier ist, dass Postgres vs. MySQL etwas ist, über das man aus entwicklungspolitischer Sicht viel plappern kann, aber aus betrieblicher / geschäftlicher Sicht wurde der Fall vor Jahren abgeschlossen.
Kagenut
Natürlich habe ich angegeben, dass es nur ein Eindruck ist, denn wenn ich nicht versuche, dieselben Daten unter derselben Last bereitzustellen, kann ich nicht sicher sein, und ich weiß, dass ich nichts wirklich beweise. Vielen Dank, dass Sie die neuesten Leistungssteigerungen von MySQL geklärt haben.
Massimiliano Torromeo
Ich benutze einfach immer den Typ "serial" in postgres, ich finde ihn handlicher als "integer auto_increment". Oder meintest du vielleicht etwas anderes?
Ptman
3

COUNT (*) ist mit PSQL auch viel langsamer. Sie sollten Trigger für diese Art von Funktionalität erstellen.

EarthMind
quelle
1
Interessant, aber soweit ich es verstanden habe, gilt dies nur für COUNT (*) -Abfragen OHNE die where-Klausel in der MyISAM-Engine. Davon abgesehen verhält es sich ähnlich. Oder ist postgresql sogar langsamer als InnoDB und MyISAM mit einer where-Klausel?
Massimiliano Torromeo
Was meinst du damit ? wähle count ( ) aus foo; funktioniert nicht in pgsql? Zwar ist count ( ) in Postgres langsamer als in MySQL, aber es gibt einen Grund dafür und eine Problemumgehung. Eine gute Übersicht finden Sie unter wikivs.com/wiki/MySQL_vs_PostgreSQL
Sibster
1
Es ist aus dem gleichen Grund langsamer als InnoDB von MySQL. Lesen Sie hier mehr: wikivs.com/wiki/MySQL_vs_PostgreSQL#COUNT.28.2A.29
EarthMind
3
COUNT (*) ist aufgrund der MVCC-Implementierung langsamer. Sie gewinnen an Lese- / Schreibleistung, aber da sich Transaktionen in verschiedenen Zuständen befinden können, wird es schwierig, die "wahre" Anzahl zu bestimmen.
Avery Payne
2

Da Postgres für jedes Update effektiv eine Kopie beim Schreiben erstellt (damit Transaktionen verarbeitet werden können), hat MySQL nicht den Overhead, den PostgreS hat, wenn Sie keine Transaktionen benötigen und viele Schreibvorgänge in Bezug auf Lesevorgänge ausführen werden. (Jeder aktualisierte Datensatz muss mehr schreiben, Indizes aktualisieren usw.)

Joe H.
quelle
1
Ich denke, Sie sollten das nur ein bisschen qualifizieren. Ja, es wird schneller sein, aber es gibt keine Garantie für die Konsistenz Ihrer Daten. Dies ist in einigen Situationen vollkommen in Ordnung (Ausschreiben von Benutzerkommentaren von einer Website), kann jedoch in anderen Situationen Probleme verursachen (Online-Bestellung eines "Einkaufswagens").
Avery Payne
1

Ich kann mir eine Sache vorstellen, die in PostgreSQL fehlt:

Ich denke, es gab auch etwas mit Blockieren, Einfügen oder Aktualisieren. Aber ich kann mich anscheinend nicht erinnern, was es tatsächlich war. : S.

Egon
quelle
1

Das Feld "auto_increment", das "praktisch" ist, ist nicht sehr relevant, oder? Oracle hat Sequenzen und ist zweifellos die am weitesten verbreitete kommerzielle Datenbank der Welt.

Das ist eine riesige Menge an Informationen darüber, wie PostgreSQL absturzsicherer ist und so weiter. Ich werde Sie nur auf diese Seite im PostgreSQL-Wiki verweisen (zweifellos eine farbige Meinung, aber das ist es, wonach Sie suchen).

Viele Leute erwähnen auf dieser Seite, dass MySQL für Neulinge freundlicher ist. Damit? Erklären Sie mir, wie wichtig dies in einer geschäftskritischen Umgebung ist.

wzzrd
quelle
Als Sequenzen macht der am weitesten verbreitete Ansatz auto_increment-Felder nicht weniger "praktisch", und es ist für mich relevant, weil ich nach Unterschieden zwischen den fraglichen 2 dBms frage. Dies hindert mich jedoch nicht daran, zu pgsql zu wechseln, daher stimme ich zu, dass dies kein wirkliches Problem ist.
Massimiliano Torromeo
1

MySQL wird oft als SQL-Grep bezeichnet . Für mich (jetzt zum Zeitpunkt des Schreibens) sieht es ziemlich nach PHP aus - ziemlich umständlich, aber beliebt.

Ich frage mich, was ich von MySQL vermissen werde.

Versuchen Sie, eine Datenbank von Anfang an umzubenennen. ;) Dann füge (fehlende) bedingte Indizes hinzu.

PS Ich kann auf mindestens eine unbestreitbare gute Funktion hinweisen, die MySQL hat - es unterstützt eher platzsparende Datentypen, die so klein sind wie (vorzeichenloses) Byte, z. Dies könnte bei entsprechender Verwendung viel RAM und Speicherplatz sparen. Aber es gibt leider noch ein paar Leckereien zu erwähnen. Und der Vergleich des Links, den Sie erhalten haben, ist wirklich geschickt.

poige
quelle
0

auto_increment ist praktisch, bis Sie feststellen, dass sie für Tabellen mit extrem hoher Einfügungsparallelität saugen. Zu diesem Zeitpunkt werden sie zu einem Flaschenhals und Sie müssen eine Sequenz mithilfe einer MyISAM-Tabelle implementieren.

Um Ihre Frage zu beantworten, war es für MySQL am einfachsten, eine Replikation einzurichten, die Replikationsverkettungen und das Lesen von Slaves ermöglicht. Postgres wird dies jedoch in der nächsten Version 9.0 haben (die bereits im Alpha-Status ist).

mage2k
quelle