Divulgazione: sono un dipendente MySQL, sto lavorando su MySQL Cluster.
Direi che MySQL Cluster potrebbe raggiungere un throughput / host più elevato rispetto a MySQL + InnoDB, a condizione che:
- Le domande sono semplici
- Tutti i dati si adattano in memoria
In termini di latenza, MySQL Cluster dovrebbe avere una latenza più stabile rispetto a MySQL frammentato. La latenza effettiva per i dati puramente in memoria potrebbe essere simile.
Man mano che le query diventano più complesse e i dati vengono archiviati su disco, il confronto delle prestazioni diventa più confuso. Per ottenere una risposta più specifica, è necessario descrivere di più sull'applicazione e sulle query eseguite, nonché il numero di host e il volume di dati. MySQL Cluster ha recentemente ottenuto l'esecuzione di query localizzate parallele (AQL), il che significa che può essere competitivo con MySQLD autonomo nonostante abbia dati distribuiti su più host.
MySQL Cluster è attualmente limitato a "sharding" su 48 host. MySQL frammentato in teoria non ha limiti. Tuttavia, per un determinato throughput di destinazione, potrebbe essere necessario un numero inferiore di host MySQL Cluster rispetto agli host MySQL frammentati.
Differenze più interessanti sono quando si guardano aree diverse dalle prestazioni:
- MySQL Cluster supporta query arbitrarie su tutti i frammenti
- MySQL Cluster supporta transazioni arbitrarie su tutti i frammenti
- MySQL Cluster supporta la replica sincrona di frammenti con failover e ripristino automatici
- MySQL Cluster supporta il nodo di aggiunta online (espansione del cluster)
- Sharded MySQL è più "fai da te"
Avere lo sharding integrato nella tua applicazione ti offre il massimo potenziale di ridimensionamento, ma aggiunge complessità e limita la tua flessibilità in termini di query e operazioni cross-shard. Se il tuo sharding è prematuro, potrebbe essere la radice di alcuni problemi per te. MySQL Cluster ti consente di ottenere alcuni dei vantaggi del sharding senza dover vincolare la tua applicazione al solo frammento singolo.
Per quanto riguarda la risposta precedente, alcuni chiarimenti:
"Sebbene MySQL Cluster sia un reclamo ACID, non fornisce un motore di archiviazione adatto per i dati con chiavi composte."
MySQL Cluster supporta chiavi primarie e secondarie composte. Non sono sicuro di cosa non sia "adatto" al riguardo. Forse il poster precedente può spiegare?
"Per poter archiviare dati con le stesse caratteristiche chiave in un particolare set di nodi di dati, è possibile effettuare le seguenti operazioni:
- Porta offline tutti i nodi di dati, lasciando solo quei nodi di dati che desideri ospitare i dati con le stesse caratteristiche chiave.
- Carica i tuoi dati nel MySQL Cluster, che popola solo i tuoi nodi di dati selezionati
- Riporta online tutti i nodi di dati "
Questo non è corretto La distribuzione dei dati è indipendente da quali nodi sono in linea in qualsiasi momento. MySQL Cluster supporta vari schemi di distribuzione dei dati per supportare le ottimizzazioni che descrivi. Descrivo la distribuzione dei dati in MySQL Cluster in un post di blog qui: Distribuzione dei dati in MySQL Cluster