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

MySQL Cluster (NDB) vs MySQL Replication (InnoDB) per le app Rails 3:pro/contro?

C'è un buon confronto tra InnoDB e MySQL Cluster (ndb) recentemente pubblicato nei documenti... vale la pena dare un'occhiata:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-compared.html

L'architettura Cluster consiste in un pool di server MySQL a cui accedono le applicazioni; questi server MySQL in realtà non memorizzano i dati del cluster, i dati sono partizionati sul pool di nodi di dati sottostante. Ogni server MySQL ha accesso ai dati in tutti i nodi di dati. Se un server MySQL modifica un dato, è immediatamente visibile a tutti gli altri server MySQL.

Ovviamente, questa architettura rende estremamente facile la scalabilità orizzontale del database. A differenza dello sharding, l'applicazione non ha bisogno di sapere dove sono conservati i dati:può semplicemente bilanciare il carico su tutti i server MySQL disponibili. A differenza della scalabilità orizzontale con la replica MySQL, Cluster consente di ridimensionare le scritture e le letture. È possibile aggiungere nuovi nodi di dati o server MySQL a un cluster esistente senza alcuna perdita di servizio per l'applicazione.

L'architettura shared-nothing di MySQL Cluster significa che può fornire una disponibilità estremamente elevata (99,999%+). Ogni volta che si modificano i dati, questi vengono replicati in modo sincrono su un secondo nodo di dati; se un nodo di dati si guasta, le richieste di lettura e scrittura delle applicazioni vengono gestite automaticamente dal nodo di dati di backup.

A causa della natura distribuita di MySQL Cluster, alcune operazioni possono essere più lente (ad esempio JOIN che hanno migliaia di risultati provvisori, sebbene sia disponibile una soluzione prototipo che risolve questo problema), ma altre possono essere molto veloci e scalabili estremamente bene (ad es. la chiave legge e scrive). Hai la possibilità di archiviare tabelle (o anche colonne) in memoria o su disco e scegliendo l'opzione di memoria (con le modifiche contrassegnate su disco in background) le transazioni possono essere molto veloce.

MySQL Cluster può essere più complesso da configurare rispetto a un singolo server MySQL, ma può impedirti di implementare lo sharding o la suddivisione in lettura/scrittura nell'applicazione. Altalene e rotonde.

Per ottenere le migliori prestazioni e scalabilità da MySQL Cluster potrebbe essere necessario modificare l'applicazione (consultare il white paper sull'ottimizzazione delle prestazioni del cluster:http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php ). Se possiedi l'applicazione normalmente non è un grosso problema, ma se stai utilizzando l'applicazione di qualcun altro che non puoi modificare, potrebbe essere un problema.

Un'ultima nota è che non è necessario che sia tutto o niente:puoi scegliere di archiviare alcune delle tue tabelle in Cluster e alcune utilizzando altri motori di archiviazione, questa è un'opzione per tabella. È inoltre possibile eseguire la replica tra Cluster e altri motori di archiviazione (ad esempio, utilizzare Cluster per il database di runtime e quindi replicare su InnoDB per generare report complessi).