MySQL 5 vs. PostgreSQL 8.2



  • Hi,

    mit MySQL 5 in Verbindung mit PHP 5 arbeite ich schon seit längerem daheim.
    Nun habe ich auch mir mal PostgreSQL 8.2 angeschaut und das sieht vom Funktionsumfang mehr besser aus (hat Sequenzen, Schemas, ... die MySQL nicht hat).

    Da ich nun demnächst eine große(!) Benutzerverwaltung in PHP 5 und MySQL 5 oder PostgreSQL 8.2 programmieren möchte habe ich mich mal nach Benchmarks umgeschaut.
    In manchen Tests ist MySQL besser und in anderen wiederrum PostgreSQL.

    Welche Datenbank soll ich nun verwenden? Benutzerverwaltung heißt:
    Viel lesen aber auch einiges speichern.

    Funktionen, die ich brauchen werde:
    Foreign Keys, Stored Procedures, Transaktionen, Views und natürlich Indizes.

    mfg
    ac!d



  • bei MySQL kommt es auf die Tabellenformate an.
    MYISAM sperrt auf Tabellenebene wodurch SELECTS vor INSERTS gehen.
    Dh. ein INSERT wird gesperrt wenn viele SELECTS da sind. Das kann schnell zu Problemen führen.
    Mit INNODB ist das nicht so.
    MYSQL ist unter Windows sehr langsam. Habe mit meinen Programmen und Webseiten hier eine Test gehabt zw. MSSQL und MYSQL. MSSQL ist um den Factor 436 schneller bei einer DB mit 6 GB und mehrere Mill Datensätzen pro Table.
    MSSQL ist aber auch teuer. Mit
    POSTGRE habe ich mich nicht beschäftigt. MYSQL ist aber deshlab so schnell (zumindest unter Linux in diesem Preissegment) weil es weniger Features hat.



  • Postgresql ist praktisch immer die technisch überlegene Datenbank. Postgresql hat mehr und ausgereiftere Datenbankfeatures. Der Vorteil von Mysql ist, daß viele es verwenden und es dadurch mehr Tools und Hilfen dafür gibt. Ich würde aber immer Postgresql vorziehen.

    Es gibt viele Vergleichstest. Sehr aussagekräftig finde ich http://tweakers.net/reviews/657/6. Der Test zeigt, daß Mysql ohne konkurrierende Zugriffe die Nase vorn hat, aber wenn mehrere Benutzer gleichzeitig auf die Datenbank zugreifen, dann skaliert Postgresql deutlich besser. Und darauf kommt es ja an. Performance wird erst dann interessant, wenn auch Last vorhanden ist.

    Für kleine Applikationen, insbesondere Webapplikationen, mit nur einem oder ganz wenigen Benutzern würde ich eher sqlite nehmen.

    Prinzipiell ist es natürlich sinnvoll, eine Datenbankabstraktionsschicht zu verwenden und datenbankunabhängig zu programmieren.

    Tntnet



  • @User:
    Wenn MySQL, dann sowieso InnoDB.

    Mir ist bereits bekannt gewesen, dass InnoDB einen "Row-Level-Lock" hat und MyISAM "Table-Lock". Aber da ich sowieso InnoDB verwenden werde (wegen Foreign Keys, ...) habe ich dieses Thema nicht erwähnt.

    Mir kommt es hier eigentlich nicht darauf an, was möglichst viele bentuzen sondern was performanter ist bei großen Datenmengen.

    @tntnet:
    Wie du bereits gesagt hast, bietet eben PostgreSQL mehr Funktionalität, jedoch brauche ich nur die genannten. Ich werde mir mal die Benchmarks ansehen, danke.

    Ich werde sowieso die PDO API benutzen, die PHP 5 standardmäßig dabei hat.



  • Das finde ich immer wieder eine lustige Argumentation: "Mir reichen die Features, die Mysql bietet." Ich bekomme zwar eine bessere Datenbank mit der freieren Lizenz auch kostenlos. Es spricht eigentlich nichts gegen Postgresql, aber dennoch nehmen die Leute Mysql.

    Das ist so, als wollte ich mit dem Auto von A nach B und darf mir aussuchen, ob ich einen 20 Jahre alten gebrauchten 50-PS-Golf nehme oder einen neuen 170-PS-Golf mit Klimaanlage und allem drum und dran. Beides kostenlos. Da ich ja nur von A nach B fahren will und ich das mit der alten Rostschüssel auch machen kann, nehme ich doch die. 😃



  • ac!d schrieb:

    Wenn MySQL, dann sowieso InnoDB.

    Klar, aber vergiss dabei eines nicht: Für InnoDB gibt es keine freien Online-Binärbackuptools. Dh. Du musst entweder Dumps anfertigen (was dank nicht sperrender Reads (MVCC) grundsätzlich möglich, aber trotzdem vergleichsweise lahm ist, oder Du kaufst Dir eine Lizenz, was nicht ganz billig ist.

    tntnet: MySQL hat schon eine gewisse Daseinsberechtigung für simple kleine Webanwendungen, aber eben nur deswegen, weil das Setup so einfach ist und es hochgradig auf Leseperformance für sehr einfache Anfragen optimiert ist. Sobald ein paar Schreibzugriffe mehr (bzw. Parallelität bei selbigen) oder irgendwelche sonstigen Features, die über die primitivsten MySQL-Fähigkeiten hinausgehen, genutzt werden, hat man Probleme. Natürlich lässt es sich selten vorher abschätzen, ob man nicht doch irgendwann mal mehr brauchen könnte...
    Ich würde daher mittlerweile auch einfach fast immer (außer vielleicht für ganz simple CMS-Anwendungen für kleine Seiten oä) PostgreSQL verwenden.



  • nman schrieb:

    tntnet: MySQL hat schon eine gewisse Daseinsberechtigung für simple kleine Webanwendungen, aber eben nur deswegen, weil das Setup so einfach ist und es hochgradig auf Leseperformance für sehr einfache Anfragen optimiert ist. Sobald ein paar Schreibzugriffe mehr (bzw. Parallelität bei selbigen) oder irgendwelche sonstigen Features, die über die primitivsten MySQL-Fähigkeiten hinausgehen, genutzt werden, hat man Probleme. Natürlich lässt es sich selten vorher abschätzen, ob man nicht doch irgendwann mal mehr brauchen könnte...
    Ich würde daher mittlerweile auch einfach fast immer (außer vielleicht für ganz simple CMS-Anwendungen für kleine Seiten oä) PostgreSQL verwenden.

    Das ist doch genau das, worauf ich hingewiesen habe. Es gibt Anwendungsfälle, wo Mysql genausogut wie Postgresql ist. Es gibt Anwendungsfälle, wo Postgresql Mysql überlegen ist. Es gibt allerdings praktisch keine Anwendungsfälle, wo Mysql besser wäre.

    Ist es einfach das, daß Mysql einfacher aufzusetzen ist? Wenn es darauf ankommt, dann würde ich Sqlite bevorzugen, was noch leichter ist. Sqlite unterstützt keine Authentifizierung, die bei Webanwendungen sowieso keine Rolle spielt, da der Client sowieso immer der Webserver ist.

    Mich würde jetzt wirklich mal interessieren, warum ihr euch für Mysql entschieden habt.



  • MySQL ist sehr leicht aufzusetzen, zu administrieren und für simple Anwendungen, bei denen viele primitive Leseanfragen geschickt werden, die performanteste Lösung. Die MySQL-Volltext-Indizes sind insbesondere für mittelgroße Tabellen auch etwas performanter, als die der Konkurrenz.



  • Für Backups benutze ich für MySQL "Navicat for MySQL".
    Dies eine Desktop-Anwendung (verbinde mich dann extern auf den MySQL Server). Das Tool kann nicht nur Backups machen sondern auch Tabllen erstellen, ... (wie phpMyAdmin nur besser bzw. mehr Funktionalität und nicht im Web).

    Das ist eine gute Frage warum MySQL so berühmt ist.
    Ich habe auch mit MySQL angefangen. Warum? Weil es dazu sehr viele Tutorials gibt und eine gute Dokumentation (wenn die Dokumentation von PostgreSQL auch nicht schlecht ist, die von MySQL finde ich besser).

    Ich denke auch, dass oft MySQL verwendet wird weil es einfacher ist (eben weil es weniger Funktionen hat). Die Funktionen von früher haben eben für kleine Websites gelangt und dadurch an Beliebtheit gewonnen. Neue Programmierer haben sich dann der starken Verbreitung (bzw. vielen Hilfen) angeschlossen.
    Eine kleine Website braucht ja auch nicht viele Datenbanken Funktionen.

    Ich habe dann mit Oracle gearbeitet und gesehen, dass MySQL wirklich kaum Funktionen anbietet. Doch mit MySQL 5 ist das ja jetzt wesentlich besser geworden.

    Ein Vorteil von MySQL sind vielleicht die verschiednen Datenbank Engines wie MEMORY, MERGE, ... die PostgreSQL nicht bietet. Jedoch ist dies für kleine Website nicht relevant.



  • ac!d schrieb:

    Für Backups benutze ich für MySQL "Navicat for MySQL".

    Also machst Du im Wesentlichen Dumps. Das wird bei größeren Tabellen richtig schmerzhaft werden; insbesondere wenn oben genannte Szenarien eintreten.

    Ich habe dann mit Oracle gearbeitet und gesehen, dass MySQL wirklich kaum Funktionen anbietet. Doch mit MySQL 5 ist das ja jetzt wesentlich besser geworden.

    Nicht wirklich. Natürlich kann MySQL jetzt mehr, aber das ist auch fast alles ziemlich dreckig und inkonsistent umgesetzt und manches funktioniert immer noch überhaupt nicht.

    Ein Vorteil von MySQL sind vielleicht die verschiednen Datenbank Engines wie MEMORY, MERGE, ... die PostgreSQL nicht bietet. Jedoch ist dies für kleine Website nicht relevant.

    Naja, praktisch sämtliche Funktionalität lässt sich in größeren anderen DBMS (wie eben Postgres) auch abbilden, nur eben auf andere Art und Weise.



  • Ich habe mysql verwendet weil es ausreichte und selbst mit INSERT/UPDATES/SELECT und das sehr viele (> 120/SEC) auf Linux noch sehr schnell war. Auch Replikation war sehr einfach und gut. Ein INSERT/UPDATE/MASTER und > 1 SELECTSERVER. Und das in echtzeit. Habe aber jetzt MSSQL 2005 und ist kein vergleich mehr.
    Wenn die DB > 4 GB mit Tabelle > 2.000.000 Datensätzen wird ist es schon merklich schneller bei sehr vielen schreib- und lesevorgängen.
    Und Replikation hat sich bei 2005 sehr viel getan und läuft perfekt.
    Selbst die Sicherung mit Backupexec und Wiederherstellung dauert nur wenige Minuten.
    Ist natürlich für Privat dann nicht mehr zu bezahlen aber wenn es um Verfügbarkeit und dadurch auch Geld geht braucht man das dann.
    Hier geht es ja dann auch weiter mit Cluster u.s.w.



  • @nman: Ja da kann man Dumps machen (SQL Anweisungen in einer Datei) aber auch Datenbank Backups, die in einem eigenen Navicat Dateiformat gespeichert werden.

    Ja klar kommt MySQL nicht an die Funktionen von Oracle ran. Ich meinte nur es hat sich verbessert mit Triggers, Views, Stored Procedures, ...

    Es gibt ja auch die Express Varianten von Oracle, DB2 und MSSQL, wobei alle recht stark die Hardware begrenzen. DB2 9 Express-C hat da noch die meisten Hardwarefreiheiten.



  • ac!d schrieb:

    @nman: Ja da kann man Dumps machen (SQL Anweisungen in einer Datei) aber auch Datenbank Backups, die in einem eigenen Navicat Dateiformat gespeichert werden.

    Ist und bleibt trotzdem ein Dump, auch wenn das Format ein bisschen ein anderes ist.

    Es gibt ja auch die Express Varianten von Oracle, DB2 und MSSQL, wobei alle recht stark die Hardware begrenzen. DB2 9 Express-C hat da noch die meisten Hardwarefreiheiten.

    Oder man nimmt gleich Postgres. (Ja, natürlich haben die Express-Versionen auch ihre Vorteile, aber im Regelfall fährt man mit Postgres schon ziemlich gut.)



  • tntnet schrieb:

    Mich würde jetzt wirklich mal interessieren, warum ihr euch für Mysql entschieden habt.

    "Dafür entschieden" hab ich mich nicht.
    Es ist eine Entwicklungsplatform wie SQLite für mich.

    Deiner Einschätung zu MySQL vs Postgresql kann ich fast voll zustimmen!

    Mit einer Ausnahme - ein ERD Tool für Postgres fehlt mir unter Win ( und eigentlic auch unter Unix)

    ERWin & Co. - Teuer und gefallen mir alle nicht mehr so recht
    Eclipse - Soll via JDBC gehen; habe ich aber nicht verstanden und schneckt imo

    DBDesigner4 klappt aber unter Win und Unix mit MySQL.
    Via ODBC komm nicht so mit Postgres arbeiten wie ich das möchte.
    Ausserdem ist es sehr mähsam DBDesigner erstmal Postgrestypen beibringen zu müssen.

    Wenn Postgres sauber eingebunden wäre oder ein anderes Tool würde ich sofort "umziehen".

    Grüsse

    *this


Anmelden zum Antworten