2009-05-06 11 views
19

Sembrerebbe che oggigiorno tutti si limitino a utilizzare MySQL perché è proprio quello con cui tutti vanno. Sto lavorando a un'applicazione web che gestirà una grande quantità di dati in arrivo e mi chiedo se dovrei "andare con MySQL" o se dovrei dare un'occhiata ad altri database open-source o anche a database commerciali?Scelta del database giusto: MySQL vs Tutto il resto

EDIT: dovrei aver menzionato, sto cercando prestazioni ottimali, integrazione con ruby ​​+ rail in esecuzione su debian 5 e il denaro è stretto, anche se se si risparmieranno nel lungo periodo prenderei in considerazione la possibilità di fare un investimento in qualcosa di più costoso.

+0

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

+0

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. –

+0

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

risposta

37

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.

+0

Grazie per la tua risposta estremamente dettagliata! – benofsky

+0

Sono d'accordo. Risposta fantastica +1 –

+2

Questa è un'ottima risposta, ho usato PostgreSQL sin dalla 8.x e non ho dovuto fare confusione con gli OID o anche occuparmi di impostare sequenze (so che ci sono). Ciò potrebbe essere dovuto al fatto che tutto ciò che ho fatto è stato di piccola scala. Penso che pg sia ottimo e lo userei su MySQL * qualsiasi * giorno della settimana, principalmente a causa di tutti i trucchi e gli strani bug che ottieni con MySQL. –

21

Penso che PostgreSQL sia un'alternativa molto valida a MySQL. È molto più simile a Oracle.

+1

Per i database open source, PostgreSQL ha i miei "soldi" ogni volta. Vedere la mia risposta sul perché: http://stackoverflow.com/questions/831849/choosing-the-right-database-mysql-vs-everything-else/831986#831986 –

+0

Piuttosto, MySQL è un'alternativa alquanto valida a PostgreSQL . – yfeldblum

+3

Una spiegazione di "un po 'fattibile" sarebbe bella. – duffymo

2

Mysql è ottimo e mssql è ottimo. Non ho usato nient'altro. Direi che se sei completamente fuori di testa, vai con lo stack tecnologico con il quale sei più forte. Ho una buona quantità di C#, asp.net e altre esperienze di stack Microsoft, quindi è abbastanza naturale per me specializzarmi in mssql. Se hai più familiarità con * nix, php, ecc, potresti essere più a tuo agio con uno stack open source. Puoi certamente mescolare e abbinare i due stack, ma attenersi a un mondo o all'altro può evitare un po 'di dolore per te.

+4

Non mi importa un voto negativo su una risposta se la mia risposta puzza, ma mi piacerebbe sentire la visione opposta. – ahains

+0

Non vedo niente di sbagliato nella risposta. E anche l'elettore non sembra dare una spiegazione. Quindi, ti ho riportato a zero. – Nirmal

+0

Postgresql dispone di ottimi binding .NET ad esempio della società Devart. http://www.devart.com/dotconnect/postgresql/ –

1

"Sembrerebbe che oggigiorno tutti si limitino a utilizzare MySQL perché è proprio quello con cui tutti vanno." Se MySQL è l'unica cosa che le persone usano, allora perché Oracle e MSSQL sono ancora in circolazione?

Il dibattito su quale motore di database fare riferimento può essere discusso fino a quando le mucche tornano a casa. Personalmente ho sempre trovato una costante nella scelta di un motore di dati. Quello che ti puoi permettere è generalmente quello per cui vai.

Se si può giustificare la spesa XXX su un database, probabilmente si conoscono già le ragioni per sceglierlo.

+0

Mi spiace, per chiarire, intendevo nella scena di sviluppo web "web 2.0". – benofsky

+0

Ho completamente smesso di utilizzare MySQL quando Oracle Express è stato rilasciato, ma è perché Oracle è l'opzione migliore per il tipo di app con cui lavoro solitamente, ma le mie tasche non sono così profonde. – Chepech

6

Bene, ci possono essere differenze tra i RDBMS del mondo. Dai un'occhiata a http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems#Fundamental_features

Usando questa guida dovresti essere in grado di limitare molto le tue scelte.

Un paio di cose da tenere a mente:

SQL Server 2005 Express è limitata a una dimensione del file da 4 GB, ma ha un supporto eccellente int .NET e Java lingue.

MySQL verrà eseguito su Windows e Linux e molte lingue lo supportano (incluso .NET e Java) con librerie esterne.

SQLite è supportato da tutti i sistemi operativi e può essere distribuito come parte integrante dell'applicazione.

+0

SQLite non ha chiavi esterne –

+0

Corrette, ovvero, in effetti, menzionate dal collegamento che ho postato. –

12

Personalmente, cerco di evitare MySQL ogni volta che posso per i seguenti motivi:

  1. Il MyISAM motore stoccaggio predefinito manca Foreign Key supporto. Innodb, tuttavia, non supporta le chiavi esterne per le tabelle MyISAM per ovvi motivi.
  2. Se tento di inserire dati non validi, MySQL lo cambierà felicemente per me.
    1. illegali DateTime, data o valori timestamp sono convertire a "zero": http://dev.mysql.com/doc/refman/5.1/en/datetime.html
    2. Varchar e tipo char colonne: http://dev.mysql.com/doc/refman/5.1/en/char.html
    3. numerici Datatypes seconda SQL Modalità rigorosa: http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

Queste cose potrebbero non essere di alcuna importanza per alcune persone, ma quando si tratta di qualità dei dati, preferirei usare qualcos'altro.

+0

Quindi, cosa usi e perché? :-) – benofsky

+3

Dipende dal progetto. Per i database open source, preferisco PostgreSQL perché ha il supporto immediato per Foreign Key e, se cerco di inserire dati non validi, mi lancia degli errori. –

+0

Sì, sono d'accordo, MySQL è ottimo (facile, piccolo, abbastanza veloce per progetti di piccole e medie dimensioni ma può gestire enormi quantità di dati allo stesso tempo) ma il suo lato negativo è che sembra DB con mentalità PHP. E non pensare nemmeno a migrare grandi quantità di dati da server con versioni leggermente diverse ... finirai per impiccarti con il cavo del mouse. – Chepech

4

Firebird la versione open source e ramificata di Interbase di Borland è piuttosto buona, funziona felicemente con la maggior parte dei (tutti?) Sapori di Linux ed è molto performante. Non sono un ragazzo di RoR quindi non conosco i dettagli, ma ho un amico in Nuova Zelanda che usa Firebird con tutti i suoi progetti di RoR, funziona sicuramente con RoR e funziona bene.

Edit:
Trovato un collegamento a un Firebird Rails adattatore here

+0

interessanti non hanno mai sentito parlare di Firebird prima. Grazie! – benofsky

+0

fantastico, grazie per il link! dare un'occhiata! – benofsky

2

Come duffymo Raccomando anche PostgreSQL. È molto bello dal punto di vista dello sviluppatore: funziona su molte piattaforme (entrambe basate su Unix e Windows), ha interfacce stabili variabili per qualsiasi laguaggio/ambiente che ho lavorato (Windows, Linux, Delphi, Java, Perl, Python). Linguaggio di stored procedure: PLPGSQL è anche facile e potente. Il supporto utente (newsgroup, liste, SO) è carino e utile.

3

Si prega di essere un po 'diffidenti nei punti di vista idealistici proposti da persone che potrebbero avere asce da macinare. MySQL è una soluzione capace, robusta e scalabile per molti problemi, ma questo di solito non è così immediato, dato che i suoi valori predefiniti sono estremamente conservativi. Come qualsiasi prodotto di database, è necessario dedicare del tempo all'ottimizzazione dell'installazione per le prestazioni desiderate. Dovrai anche dedicare del tempo a soddisfare i suoi limiti, il che è anche vero per qualsiasi database tu scelga.

La popolarità di MySQL è parzialmente autogenerata: molti provider di hosting lo forniscono, quindi molte persone lo utilizzano.