MySQL è meglio di PostgreSQL in qualcosa?


8

So che la domanda sembra provocatoria, ma in realtà non lo è. Ultimamente sto trovando MySQL che limita in molte aree e mi piace sempre più PostgreSQL. Ridimensiona molto meglio e rispetta gli standard SQL molto più di MySQL.

Sono ancora nuovo nel mondo PostgreSQL e, dato che sono disposto ad abbandonare MySQL per tutti i miei progetti futuri, quello che voglio sapere è: c'è qualche caratteristica particolare di MySQL che funziona meglio (come in più ad alte prestazioni o più user friendly, ecc.) rispetto a PostgreSQL?

Mi chiedo cosa mi mancherà da MySQL. Ho già scoperto che i campi AUTO_INCREMENT in MySQL sono più utili di SEQUENCES in PostgreSQL e la distribuzione in Windows è stata problematica in passato (non è più un problema. Mai un problema per me).

Cos'altro?


Ecco una sorta di curiosità: stackoverflow.com/questions/2221787/…
Paul


Odio mysql, ma MERGE / UPSERT lo fa più facilmente di PG, e trovo fastidiosi i campi sensibili al maiuscolo / minuscolo
Neil McGuigan,

Risposte:


3

Stai chiaramente affrontando questo aspetto dal punto di vista dello sviluppatore, quindi potresti trovare risposte più utili su SO.

Dal punto di vista amministrativo:
- Replication (HA)
- Replication (Scaling *)
- Replication (Backups)
- Supporto applicativo
- Dimensioni e profondità della community (Documentazione, Supporto)
- Base di installazione esistente / lavori disponibili

* Nota che hai menzionato postgresmeglio il ridimensionamento. il ridimensionamento significa qualcosa di diverso per tutti, ma come regola generale le cose che hanno un percorso per distribuire il carico su più server scalano meglio delle cose che non lo fanno.


Sono anche interessato agli aspetti amministrativi. Non ero sicuro di dove pubblicare questo. A proposito hai ragione sul ridimensionamento. Per bilancia meglio intendevo davvero, su una singola macchina, non sui cluster. MySQL ha un bassissimo guadagno in termini di prestazioni sui sistemi multicore e oggi i multicore sono la norma. Inoltre ho visto MySQL passare da buone prestazioni a quasi inutili quando il carico di lavoro è aumentato, e l'impressione è stata che postgresql avrebbe gestito meglio il carico, ma capisco che è discutibile e dovrebbe essere indagato meglio. A proposito, vale la pena considerare gli argomenti di replica.
Massimiliano Torromeo,

1
MySQL aveva un bassissimo guadagno di perf sul multicore, ma se stai eseguendo una build 5.0 ben patchata, quasi qualsiasi build 5.1, una build innodb-plugin (/ xtradb) o una build 5.4 che non è più vera. Non cercare di essere conflittuale, ma il tuo lento rallentamento aneddotico potrebbe quasi sicuramente essere stato affrontato e il tuo postgres "impressione" lo avrebbe gestito meglio è un'ipotesi nuda. Il punto chiave qui è che Postgres vs.Myql è qualcosa di cui puoi chiacchierare molto da una prospettiva di sofisticazione dello sviluppo, ma da una prospettiva operativa / commerciale, il caso è stato chiuso anni fa.
Cagenut,

Certo, ho specificato che era solo un'impressione perché se non provassi effettivamente a fornire gli stessi dati con lo stesso carico, non posso esserne sicuro e so che non sto davvero provando nulla. Grazie per aver chiarito gli ultimi guadagni di performance di MySQL.
Massimiliano Torromeo,

Uso sempre il tipo "serial" in postgres, lo trovo più maneggevole di "integer auto_increment". O forse intendevi qualcos'altro?
ptman,

3

COUNT (*) è anche molto più lento con PSQL. Dovresti creare trigger per questo tipo di funzionalità.


1
Interessante, ma per quanto ho capito, questo vale solo per le query COUNT (*) SENZA la clausola where sul motore MyISAM. Oltre a ciò, si comporta in modo simile. O postgresql è ancora più lento anche rispetto a InnoDB e MyISAM con una clausola where?
Massimiliano Torromeo,

Che cosa vuoi dire con questo ? seleziona count ( ) da foo; non funziona in pgsql? Mentre è vero che count ( ) è più lento in postgres rispetto a mysql, c'è una ragione per questo e una soluzione alternativa. Una buona panoramica è disponibile su wikivs.com/wiki/MySQL_vs_PostgreSQL
Sibster

1
È più lento per lo stesso motivo di InnoDB di MySQL, leggi di più qui: wikivs.com/wiki/MySQL_vs_PostgreSQL#COUNT.28.2A.29
EarthMind

3
COUNT (*) è più lento a causa dell'implementazione MVCC. Guadagni in termini di prestazioni di lettura / scrittura, ma poiché le transazioni possono essere in vari stati, diventa difficile determinare quale sia il conteggio "vero".
Avery Payne,

2

Poiché Postgres esegue effettivamente una copia su scrittura per ogni aggiornamento (in modo che possa gestire le transazioni), se non hai bisogno di transazioni e fa molte scritture relative alle letture, MySQL non avrà l'overhead di PostgreS volere. (ogni record aggiornato deve scrivere di più, aggiornare gli indici, ecc.)


1
Penso che dovresti qualificarlo solo un po '. Sì, sarà più veloce, ma non ci sarà alcuna garanzia di coerenza nei dati. Questo va perfettamente bene per alcune situazioni (riscrittura dei commenti degli utenti da un sito Web) ma potrebbe comportare problemi in altri (prendere un ordine "carrello della spesa" online).
Avery Payne,

1

Mi viene in mente una cosa che manca a PostgreSQL:

Penso che ci fosse qualcosa anche con il blocco, l'inserimento o l'aggiornamento. Ma non riesco a ricordare cosa fosse in realtà. :S


1

Il campo auto_increment essendo 'utile' non è molto rilevante, vero? Oracle ha sequenze ed è senza dubbio il database commerciale più utilizzato al mondo.

C'è una grande quantità di informazioni da trovare su come PostgreSQL se più crash sicuro e così via. Ti indicherò questa pagina sul wiki di PostgreSQL (senza dubbio un'opinione colorata, ma è comunque quello che stai cercando).

Molte persone citano in questa pagina che MySQL è più amichevole con i neofiti. Così? Spiegami come è importante in un ambiente mission-critical.


Essendo le sequenze l'approccio più utilizzato non rende i campi auto_increment meno "utili", ed è rilevante per me perché sto chiedendo differenze tra i 2 dbms in questione. Ma questo non mi impedisce di passare a pgsql, quindi concordo sul fatto che non è un vero problema.
Massimiliano Torromeo,

1

MySQL è spesso chiamato grep SQL . Quanto a me (ora al momento della stesura) sembra più o meno PHP - piuttosto imbarazzante, ma popolare.

Mi chiedo cosa mi mancherà da MySQL.

Prova a rinominare un database per cominciare. ;) Quindi aggiungi (condizionando) gli indici condizionali.

PS Posso indicare almeno una buona caratteristica non contestabile che MySQL ha - supporta piuttosto tipi di dati a risparmio di spazio così piccoli come byte (senza segno) per es. Ciò potrebbe risparmiare molta RAM e spazio su disco se utilizzato di conseguenza. Ma ci sono anche alcune chicche da menzionare, ahimè. E il confronto sul link che ti è stato dato è davvero intelligente.


0

auto_increment è utile fino a quando non ti rendi conto che fanno schifo per tabelle con concorrenza di inserti estremamente elevata, a quel punto diventano un collo di bottiglia e sei costretto a implementare una sequenza usando una tabella MyISAM.

Ad ogni modo, per rispondere alla tua domanda, la cosa più importante che MySQL ha avuto è stata la facile configurazione della replica che consenta il concatenamento della replica e la lettura degli slave. Tuttavia, Postgres lo avrà nella prossima versione 9.0 (che è già in stato alpha).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.