MySQL vs PostgreSQL per applicazioni Web [chiuso]


122

Sto lavorando a un'applicazione web che utilizza Python (Django) e vorrei sapere se MySQL o PostgreSQL sarebbero più adatti durante la distribuzione per la produzione.

In un podcast Joel ha detto di aver avuto alcuni problemi con MySQL e che i dati non erano coerenti.

Vorrei sapere se qualcuno ha avuto tali problemi. Anche quando si tratta di prestazioni che possono essere facilmente modificate?

Risposte:


127

Una nota per i futuri lettori: il testo qui sotto è stato modificato l'ultima volta nell'agosto 2008. Sono passati quasi 11 anni da questa modifica. Il software può cambiare rapidamente da versione a versione, quindi prima di scegliere un DBMS in base ai consigli seguenti, fai qualche ricerca per vedere se è ancora accurato. Controlla le risposte più recenti di seguito.


Meglio?

MySQL è molto più comunemente fornito dagli host web.

PostgreSQL è un prodotto molto più maturo.

C'è questa discussione che affronta la tua domanda "migliore"

Apparentemente, secondo questa pagina web , MySQL è veloce quando i livelli di accesso simultaneo sono bassi e quando ci sono molte più letture che scritture. D'altra parte, mostra una bassa scalabilità con carichi crescenti e rapporti di scrittura / lettura. PostgreSQL è relativamente lento a bassi livelli di concorrenza, ma si adatta bene all'aumento dei livelli di carico, fornendo al contempo un isolamento sufficiente tra gli accessi simultanei per evitare rallentamenti con rapporti di scrittura / lettura elevati. Continua collegandosi a una serie di confronti delle prestazioni, perché queste cose sono molto ... sensibili alle condizioni.

Quindi, se il tuo fattore decisionale è " qual è più veloce? ", La risposta è "dipende. Se è davvero importante, testa la tua applicazione contro entrambi " . E se ti interessa davvero, ottieni due amministratori di database (uno specializzato in ogni database) e convincerli a sintonizzare la schifezza dai database, quindi scegliere. È sorprendente quanto siano costosi i buoni DBA; e valgono ogni centesimo .

Quando conta.

Cosa che probabilmente non è, quindi scegli il database di cui ti piace il suono e seguilo; migliori prestazioni possono essere acquistate con più RAM e CPU, e un design di database più appropriato, e trucchi intelligenti per la procedura memorizzata e così via - e tutto ciò è più economico e più facile per random-website-X che agonizzare su quale scegliere, MySQL o PostgreSQL e ottimizzazione specialistica da costosi DBA.


Joel ha anche detto in quel podcast che il commento sarebbe tornato a morderlo perché la gente avrebbe detto che MySQL era un pezzo di merda - Joel non poteva riavere countindietro un file. Il plurale di aneddoto non è dato. Ha detto :

MySQL è l'unico database con cui ho programmato nella mia carriera che ha avuto problemi di integrità dei dati, in cui fai query e ottieni risposte senza senso, che non sono corrette.

e ha anche detto:

È solo un aneddoto. E questa è una delle cose che mi frustra, in realtà, del blog o solo di Internet in generale. [...] C'è solo una strana tendenza a trasformare gli aneddoti in verità e io in quanto blogger sto cominciando a sentirmi un po 'in colpa per questo


15
E un altro punto è che, se usi un framework, potresti essere in grado di astrarre il tuo codice dal database, in modo da poter cambiare facilmente.
Don Jones

"quale è più veloce?" . Dipende da quello che vuoi, se vuoi un database conforme ad ACID, leggi questo: randombugs.com/linux/mysql-postgresql-benchmarks.html
Sacx

47
Degno di nota anche. MySQL è di proprietà di Oracle. Pertanto, non sarebbe mai consentito competere con i loro prodotti a pagamento.
unixman83

15

Suonò solo molti mesi dopo.

Le capacità geografiche dei due database sono molto, molto diverse. PostgreSQL ha l'eccezionale estensione PostGIS. La funzionalità geografica di MySQL è praticamente zero in confronto.

Se il tuo servizio web ha un componente di localizzazione, scegli PostgreSQL.


14

Non ho usato Django, ma ho usato sia MySQL che PostgreSQL. Se utilizzerai il tuo database solo come backend per Django, non importa molto, perché astrarrà la maggior parte delle differenze. PostgreSQL è un po 'più scalabile perché non colpisce il muro di mattoni velocemente come MySQL man mano che aumentano le dimensioni dei dati / il conteggio dei client.

La vera differenza arriva se stai facendo un nuovo sistema. Quindi consiglierei PostgreSQL a mani basse, perché ha molte più funzionalità che rendono il tuo livello DB molto più personalizzabile, in modo che tu possa adattarlo a qualsiasi requisito tu possa avere.


7

Anche se è un po 'datato, varrebbe la pena leggere la pagina MySQL Gotchas . Molti degli elementi elencati sono ancora veri, per quanto ne so.

Uso PostgreSQL.


6

Uso entrambi ampiamente. La mia scelta per un particolare progetto si riduce a:

  • Licenze - Distribuirai la tua app (IANAL)
  • Infrastruttura esistente e Knowledge Base
  • Qualsiasi salsa speciale che devi avere.

Per salsa speciale intendo cose come:

  • Replica facile / economica = MySQL
  • Enormi problemi di set di dati con piccoli risultati = PostgreSQL. Utilizza le estensioni del linguaggio e assicurati di eseguire operazioni sui dati molto efficienti. (PL / Python, PL / TCL, PL / Perl, ecc.)
  • Interfaccia con le librerie statistiche R = PostgreSQL PL / R disponibile in debian / ubuntu

3
Postgres ha anche una replica facile / economica. Semplicemente non è integrato , perché ce ne sono una mezza dozzina tra cui scegliere, ciascuna con le proprie parti positive e negative. Quindi puoi scegliere una replica mediocre per MySQL o una delle tante per PostgreSQL. La tua scelta.
Randal Schwartz

6
PostgreSQL 9.0+ ha una replica WAL binaria incorporata che è molto facile da configurare.
Sean

1

Bene, non penso che dovresti usare un marchio di database diverso in qualsiasi cosa di sviluppo passato (build, staging, prod) in quanto ciò tornerà a morderti.

Da quanto ho capito, PostgreSQL è un'implementazione del database più "corretta" mentre mySQl è meno corretta (meno conforme) ma più veloce.

Quindi, se stai praticamente scrivendo un'applicazione CRUD, mySQL è la strada da percorrere. Se hai bisogno di alcune funzionalità dal tuo database (se non sei sicuro, allora non lo fai) allora potresti voler esaminare postgreSQL.


1

Se stai scrivendo un'applicazione che può essere distribuita abbastanza su server diversi, MySQL ha molto peso su PostgreSQL a causa della portabilità. PostgreSQL è difficile da trovare su host web meno che soddisfacenti, anche se ce ne sono alcuni. Nella maggior parte dei casi, PostgreSQL è più lento di MySQL, specialmente quando si tratta di mettere a punto alla fine. Tutto sommato, direi di dare a PostgreSQL una possibilità per un breve lasso di tempo, in questo modo non lo eviti completamente e poi dai un giudizio.


1
Sono d'accordo con te sul fatto che più host web di bassa qualità dovrebbero offrire una scelta invece di metterci in faccia MySQL. Tuttavia, quando vai con l'hosting condiviso sei comunque in balia di loro. Quindi una scelta DBM non è così importante.
unixman83

0

Grazie. Ho usato Django con MySQL e va bene. Scegli il tuo database sulle funzionalità di cui hai bisogno. Difficile confrontare MySQL e Postgres. Meglio confrontare Postgress con SQl Server.


0

@WolfmanDragon

PostgreSQL ha un (piccolo) supporto per gli oggetti, ma è, per sua natura, un database relazionale. Dalla sua pagina delle informazioni :

PostgreSQL è un potente sistema di database relazionale open source .


2
un sistema di gestione di database relazionali a oggetti ISA Relational Database Management System. Se leggi più avanti nella documentazione di PostgSQL, scoprirai che PostgSql è un ORDBMS. Forse stai confondendo ORDBMS con ODBMS come Objectivity / DB.
WolfmanDragon

-1

MySQL è un sistema di gestione di database relazionali , mentre PostgreSQL è un oggetto di sistema di gestione di database -relational . PostgreSQL è adatto per sviluppatori C ++ o Java, poiché ci dà un maggiore controllo su come vengono scritte le query. ORDBMS ci fornisce anche oggetti e tipi definiti dall'utente. Le query SQL stesse sono molto più vicine agli standard ISO rispetto a MySQL.
Hai bisogno di un ORDBMS o di un RDBMS? Questo risponderà meglio alla tua domanda.


Questa è una specie di semplificazione eccessiva; solo perché non hai bisogno di un ORDBMS non significa necessariamente che devi andare con MySQL. Ci sono altre differenze più significative, no?
Don Jones

1
Hai ragione. Sto cercando di non suonare come un pusher PostgreSQL. Non vedo alcun motivo reale per utilizzare qualcosa di diverso da PostgreSQL a meno che il design non richieda un vero database di oggetti. Non vedo alcun punto in MySQL se non che più persone lo conoscono.
WolfmanDragon,
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.