ho postato prima, ma non ho motivo di cambiare questo consiglio:
MySQL è più facile per iniziare a utilizzare.
Strumenti di interfaccia utente più adatti. Più veloce, se non usi ACID. Più tollerante di dati non validi. Le colonne Autoincrement sono semplici come digitare autoincrement. Le autorizzazioni non sono così legate ai file system e agli utenti del sistema operativo. L'impostazione di un delimitatore è più semplice rispetto all'utilizzo del "segno di dollaro" di PG durante la scrittura di un processo memorizzato. In MySQL, ti colleghi a tutti i database, non solo uno alla volta.
Postgres (PG) è molto più conforme agli standard, ma è più brutto e complicato, soprattutto dal punto di vista dell'interfaccia utente. Aveva l'abitudine di richiedere l'aspirapolvere manuale, e in effetti applica l'integrità referenziale (che è una cosa grandiosa che può essere una seccatura). L'autoincremento è molto più flessibile, ma richiede sequenze (che posso mascherare usando il seriale) e aspetto, che cos'è un OID?
Quindi, se non si conosce o si cura molto dei database, della validità dei dati, della conformità ACID, ecc., Ma si cura della facilità e della velocità, si tende ad andare con MySQL.
Troppi (non tutti, ma molti) "programmatori web" sanno molto su "web 2.0" o PHP o Java, ma non sanno molto sulla teoria o sulla pratica dei database ("un indice? Che cos'è?").Tendono a vedere un database come un semplice hashtable o un sacco di dati, e in effetti uno che non è da nessuna parte come modificabile o tollerabile dinamicamente come un hashtable.
Per queste persone, MySQL - perché fino a 5.0 non era davvero un RDBMS, e in molti modi ancora non lo è - è una manna dal cielo. È "più veloce" rispetto alla concorrenza e non "spreca tempo" nel database "esoterico" che un programmatore web non vuole, capisce o vede il valore di.
Per qualcuno con uno sfondo di database, d'altra parte, MySQL è un campo minato: roba che dovrebbe funzionare (viste complicate, group by, order by in group by) potrebbe funzionare o potrebbe succedere se si è fortunati a bloccare il server , o se sei sfortunato dai solo risultati con dati errati.
Ho passato giornate a lavorare su alcune di queste cose in modo esplicitamente complicato da visualizzazioni e gruppi non straordinariamente complessi.
E MySQL non è molto più veloce. Se stai usando le tabelle InnoDb per ACID (o solo perché a più di 30 milioni di righe, le tabelle MyISAM tendono a diventare schifose), sì una selezione diretta di una tabella è probabilmente più veloce che in PG. Ma aggiungi join e PG è improvvisamente molto più veloce. (MySQL è particolarmente negativo ai join esterni.)
In sintesi: se per te il database è una borsa, se non hai intenzione di fare il data mining o il reporting, se sei principalmente interessato a servire grossi pezzi di testo con poche relazioni o aggiornamenti - cioè, se stai usando un database per alimentare un blog, MySQL è un'ottima scelta.
Tuttavia, se si stanno effettivamente gestendo i dati, se si capisce che i dati durano più a lungo e sono più utili per un'azienda rispetto ai programmi front-end e alle regole aziendali di medio livello, se sono necessarie le funzionalità di un vero database, utilizzare PG.
Un "programmatore web" che ha deciso tutte le sue strutture di tabella può essere generato automaticamente da Hibernate (o da qualche altro ORM) e dice "troppo complicato" e "Scommetto che complicato significa più costo e più velocità "e così va con MySQL.
Come ho già detto, PG è di gran lunga superiore, e odio chiacchierare con i bizzarri bug di MySQL, e penso che le prestazioni generali del PG siano probabilmente migliori di MySQL per qualsiasi query anche leggermente complicata.
Ma MySQL rende le cose semplici (in modo ingannevole), in modo da ottenere un sacco di persone che non capiscono il design del database che ritengono che MySQL sia un'ottima scelta.
Utilizzare PG. È coerente, affidabile, conforme agli standard, è più veloce (anche se moderatamente) di query complicate, non elimina completamente i tuoi impegni con bug strani.
Quanto ottimali vuoi? Se si desidera acquistare il miglior rendimento, allora è diverso dal fatto che il miglior denaro di failover possa essere acquistato. E se i soldi sono stretti, probabilmente dovresti dirlo. Inoltre, qual è la tua piattaforma di sviluppo; non è irragionevole scegliere una soluzione che si integri bene con gli strumenti e i livelli di accesso ai dati disponibili. – Rob
1) quanto è "una grande quantità di dati in entrata"? 2) i dati sono molti piccoli articoli inseriti frequentemente o pochi articoli di grandi dimensioni inseriti raramente? 3) i dati hanno una struttura uniforme (tutti i dati possiedono gli stessi campi)? 4) come pensate di affrontare la scalabilità, in verticale (proc più veloce, più RAM) o in orizzontale (DB distribuito, sharding)? 5) quanto tempo hai per imparare nuove cose? 6) Ci sono molte altre domande che potrei chiedere, ma il mio punto è di aiutarvi a vedere che la vostra domanda ha bisogno di raffinatezza. –
1) A seconda della quantità di utenti, tuttavia, un utente contribuirà con molti dati. 2) I dati saranno molti piccoli articoli inseriti frequentemente. 3) Sì, i dati hanno una struttura uniforme. 4) Non lo so, non ho mai dovuto "affrontare la scalabilità" prima, tuttavia ho un feeling con questo progetto che potrei dover, probabilmente "verticalmente".5) molto tempo :-), naturalmente a ragione. – benofsky