Come si sceglie un motore di database MySQL

In particolare, come si sceglie tra MyISAM e InnoDB, quando non manca una funzionalità richiesta (ad esempio, non è necessario chiavi esterne).

Viene sempre a provare entrambi e misurare? O ci sono buone norme di pollice riguardo al numero e alla frequenza delle letture rispetto alle scritture, e altre misure come quella? La dimensione della table ha un effetto sulla scelta tipica?

5 Solutions collect form web for “Come si sceglie un motore di database MySQL”

La risposta è che si dovrebbe sempre misurare, preferibilmente con i propri dati e il carico di lavoro, se ansible.

Poiché i templates di accesso ai dati possono variare notevolmente da app ad app, è difficile dire e con each probabilità imansible determinare un motore di memorizzazione "migliore" per tutti i carichi di lavoro.

Tuttavia, ci sono sviluppi molto incoraggianti nello spazio MySQL che hanno partecipato alla MySQLConf / Percona Performance Conf la settimana scorsa.

Alcuni dei motori di immagazzinaggio alternativi:

  1. XtraDB (forchetta di InnoDB)
  2. InnoDB plugin
  3. PBXT
  4. TokuDB

Inoltre, Percona, Google, ecc. Hanno contribuito le patch che contribuiscono notevolmente alle performance di InnoDB. Personalmente, gestisco una build di OurDelta. Funziona bene per me e incoraggiamo a controllare le costruzioni di OurDelta e Percona.

Se è solo un semplice sistema di archiviazione / rapporto utilizzo MyISAM per le sue performance grezze.

Utilizzo InnoDB se ero preoccupato di più accessi simultanei con un sacco di scritture, per sfruttare il block a livello di row.

Ci sono un buon numero di parametri per i diversi motori di database MySQL. C'è un discreto confronto con MyISAM, InnoDB e Falcon sul Percona MySQL Performance Blog , vedi qui .

Un'altra cosa da considerare tra i due motori sopra menzionati (MyISAM e InnoDB) sono i loro approcci al bloccaggio. MyISAM esegue il block delle tabelle, mentre InnoDB esegue il block delle righe. Ci sono una varietà di cose da considerare, non solo le figure di performance diritta.

Ci sono funzionalità che trovenetworking molto utili, per motivi operativi, anche se la vostra applicazione non li richiede assolutamente:

  • InnoDB ha MVCC, il che significa che è ansible eseguire backup costanti non bloccanti
  • InnoDB ha ripristino automatico che non significa operazioni lunghe di REPAIR TABLE dopo un arresto impuro
  • Con InnoDB, i lettori non bloccano mai gli scrittori e viceversa, vale a dire (in generale) una maggiore concorrenza (questo non deve significare migliori performance nel caso generale)
  • InnoDB raggruppa le sue righe sulla chiave primaria, il che potrebbe significare less operazioni IO per le operazioni di lettura se il codice primario è stato scelto abbastanza bene.

Quindi nonostante i vincoli di chiave stranieri, probabilmente si desidera utilizzare InnoDB comunque.

ovviamente questo è ServerFault, non Stack Overflow, quindi la risposta corretta è:

  • È sempre necessario utilizzare il motore che gli sviluppatori di applicazioni hanno scelto
  • Se non hanno scelto un motore specifico, non sono molto serio nell'uso di MySQL e probabilmente non sanno come utilizzarlo correttamente.
  • Non è ansible passare a un motore diverso da quello in cui è stata testata la tua applicazione, potrebbe presentare bug.

Il mio fornitore di hosting ci ha consigliato di sbarazzarsi completamente di MyISAM e passare a InnoDB, a less che non sia ansible.

Nel nostro caso avevamo una grave danneggiamento dei dati che cominciarono a mostrare da alcune volte a poche volte al giorno, sempre che richiedevano REPAIR TABLE e comandi correlati, che richiedevano età su grandi tavoli.

Una volta convertiti (o convertiti) in InnoDB, i problemi sono andati immediatamente. Svantaggi / avvertenze che abbiamo avuto:

  • Non è ansible convertire tabelle con l'indice FULLTEXT (questo problema è andato via nel tempo da solo, è stato sostituito con una soluzione basata su Solr / Lucene che ha comunque una qualità molto migliore)
  • I grandi tavoli con milioni di righe che spesso richiedono COUNT (*) sono stati molto lenti, non siamo stati in grado di passare entrambi.

Ma nota: questo è tutto specifico per il nostro ambiente, ecc., Per cui generalmente non si applica.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.