Mysql
 sql >> Database >  >> RDS >> Mysql

Partizionamento / Sharding / Splitting MySQL:quale strada da percorrere?

Inizierai sicuramente a riscontrare problemi su quella tabella da 42 GB una volta che non si adatta più alla memoria. Infatti, non appena non si adatta più alla memoria, le prestazioni si degraderanno estremamente rapidamente. Un modo per testare è mettere quella tabella su un'altra macchina con meno RAM e vedere come funziona male.

Questo non è corretto. Il partizionamento (tramite la funzione in MySQL 5.1 o la stessa cosa usando le tabelle MERGE) può fornire notevoli vantaggi in termini di prestazioni anche se le tabelle si trovano sulla stessa unità.

Ad esempio, supponiamo che tu stia eseguendo query SELECT sulla tua tabella grande utilizzando un intervallo di date. Se la tabella è intera, la query sarà forzata a scansionare l'intera tabella (e a quelle dimensioni, anche l'utilizzo degli indici può essere lento). Il vantaggio del partizionamento è che le tue query verranno eseguite solo sulle partizioni dove è assolutamente necessario. Se ogni partizione ha una dimensione di 1 GB e la tua query deve accedere solo a 5 partizioni per soddisfare se stessa, la tabella combinata da 5 GB è molto più facile da gestire per MySQL rispetto a una versione mostruosa da 42 GB.

Una cosa che devi chiederti è come stai interrogando i dati. Se è possibile che le tue query debbano accedere solo a determinati blocchi di dati (ad esempio un intervallo di date o un intervallo di ID), il partizionamento di qualche tipo si rivelerà vantaggioso.

Ho sentito che c'è ancora qualche bug con il partizionamento di MySQL 5.1, in particolare relativo alla scelta della chiave corretta da parte di MySQL. Le tabelle MERGE possono fornire la stessa funzionalità, sebbene richiedano un sovraccarico leggermente maggiore.

Spero di esserti stato d'aiuto... buona fortuna!