Die Frage wird meist zu groß gestellt. Für die allermeisten Fälle auf einem VPS gilt: Beide Datenbanken sind schneller, als deine Anwendung sie fordert, beide laufen jahrelang ohne Zwischenfall, und beide kosten nichts. Die Wahl entscheidet sich an anderen Dingen.
Die Abkürzung#
Wenn einer dieser Punkte zutrifft, ist die Frage beantwortet, hör hier auf:
- Die Anwendung schreibt es vor. Nextcloud, WordPress, Matomo, viele PHP-Anwendungen sind auf MySQL/MariaDB zu Hause; Django-, Rails- und viele Go-Projekte auf PostgreSQL. Gegen den Strom zu installieren, heißt: schlechter getesteter Pfad, dünnere Anleitungen, mehr eigene Fehlersuche.
- Es läuft schon etwas. Zwei Datenbanksysteme auf einem kleinen Server zu betreiben, kostet doppelt Speicher, doppelt Aufmerksamkeit und doppelt Sicherungsstrecke.
- Dein Hoster oder dein Team kennt nur eines. Betriebswissen schlägt Datenblatt.
Wenn die Wahl offen ist#
| PostgreSQL | MariaDB | |
|---|---|---|
| Stärke | Datentypen, Korrektheit, Erweiterungen | Verbreitung, Einfachheit, Werkzeuge |
| JSON | ausgereift (jsonb, indizierbar) | vorhanden, weniger tief |
| Volltext | eingebaut, mehrsprachig | eingebaut, einfacher |
| Geodaten | PostGIS, der Maßstab in dem Feld | Grundfunktionen |
| Vektoren für KI | pgvector als Erweiterung | kein vergleichbares Ökosystem |
| Nebenläufige Schreiber | sehr gut | gut |
| Replikation | eingebaut, etwas mehr Handarbeit | eingebaut, sehr verbreitet |
| Einstieg | etwas steiler | flacher |
| Fehlermeldungen | ausführlich, manchmal streng | knapper, manchmal zu nachsichtig |
Der Unterschied, der im Alltag am meisten ausmacht, ist der letzte. PostgreSQL weist zurück, was nicht passt; MariaDB nimmt in der Voreinstellung mehr an und schreibt Näherungen weg. Wer saubere Daten will, ohne es in jeder Anwendung selbst zu erzwingen, ist mit PostgreSQL besser bedient. Wer eine bestehende Anwendung betreibt, die das ohnehin regelt, merkt davon nichts.
Was nicht entscheidet#
Geschwindigkeit. Zu beiden gibt es Vergleichsmessungen mit gegensätzlichem Ergebnis, weil sie unterschiedliche Lasten messen. Auf einem VPS mit einer Handvoll gleichzeitiger Nutzer ist der Engpass fast nie die Datenbank-Engine, sondern eine fehlende Indexierung, zu wenig RAM für den Zwischenspeicher oder eine Anwendung, die in einer Schleife Abfragen stellt.
„Enterprise-Tauglichkeit“. Beide tragen große Installationen. Diese Frage ist bei einem VPS-Projekt keine.
Nicht Abfragen pro Sekunde, sondern: Passt der aktive Datenbestand in den Arbeitsspeicher? Solange die häufig gelesenen Daten im Zwischenspeicher liegen, ist fast jede Datenbank schnell. Sobald sie von der Platte gelesen werden müssen, wird sie langsam und zwar beide gleichermaßen.
# Wie groß ist die Datenbank überhaupt?
sudo -u postgres psql -c "SELECT pg_size_pretty(pg_database_size('meinedb'));"
mariadb -e "SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024) AS mb
FROM information_schema.tables GROUP BY table_schema;"
MySQL oder MariaDB?#
MariaDB ist aus MySQL hervorgegangen und für die üblichen Anwendungsfälle austauschbar. Für neue Projekte auf einem eigenen Server ist MariaDB der bequemere Weg: in Debian und Ubuntu direkt paketiert, ohne Fremdquelle. Wer eine Anwendung betreibt, die ausdrücklich MySQL-Eigenheiten verlangt, bleibt bei MySQL.
Zwei Dinge, die für beide gelten#
1. Die Datenbank gehört nicht ins Internet. Beide lauschen nach der Installation je nach Paket unterschiedlich weit. Das gehört als Erstes geprüft:
ss -tlnp | grep -E "5432|3306"
# Erwartet: 127.0.0.1. Steht dort 0.0.0.0, ist der Dienst offen.
2. Eine Sicherung, die nie zurückgespielt wurde, ist keine. Das ist bei Datenbanken kein Spruch, sondern der häufigste Ernstfall überhaupt, siehe Datenbank sichern und wirklich zurückspielen.
Häufige Fragen#
Kann ich später wechseln?#
Ja, aber es ist Arbeit: Datentypen, Sortierreihenfolgen, Autoincrement-Verhalten und SQL-Dialekt unterscheiden sich. Für kleine Datenbestände ein Nachmittag, für gewachsene Anwendungen ein Projekt.
Beide auf einem Server?#
Technisch problemlos. Praktisch teilen sie sich denselben Arbeitsspeicher, und beide gehen davon aus, dass er ihnen gehört. Auf kleinen Maschinen ist das der schnellste Weg zu unerklärlichen Aussetzern.
Was ist mit SQLite?#
Für eine Anwendung mit wenigen gleichzeitigen Schreibern ist SQLite oft die richtige Antwort, kein Dienst, keine Ports, eine Datei. Erst wenn mehrere Prozesse gleichzeitig schreiben, wird ein Server nötig.
Und PostgreSQL für KI-Anwendungen?#
Über die Erweiterung pgvector speichert PostgreSQL Einbettungen und durchsucht sie ähnlichkeitsbasiert. Das erspart ein zweites Spezialsystem, praktisch, wenn du ohnehin ein Modell selbst betreibst.
Welche nimmt ein Anfänger?#
Die, die in der Anleitung der Anwendung steht. Diese Antwort ist langweilig und in neun von zehn Fällen richtig.
Kurz gesagt#
- Erst prüfen, was die Anwendung erwartet. Das beantwortet die Frage meistens.
- Offene Wahl und freie Hand: PostgreSQL, wegen Datentypen, Strenge und Erweiterungen.
- Bestehende PHP-Landschaft oder vorhandenes Wissen: MariaDB.
- Der Engpass ist selten die Engine, meist fehlen Indizes oder Arbeitsspeicher.
- Beide gehören auf
127.0.0.1, und beide brauchen eine geprüfte Wiederherstellung.
Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Proxmox- Hosts, einen Backup-Server und Kundendienste in der EU. Fehler in einer Anleitung sind Fehler im eigenen Betrieb. Korrekturen bitte über Discord.