sql >> Base de Datos >  >> RDS >> Mysql

MySQL Cluster (NDB) frente a MySQL Replication (InnoDB) para aplicaciones Rails 3:¿pros/contras?

Hay una buena comparación de InnoDB y MySQL Cluster (ndb) publicada recientemente en los documentos... vale la pena echarle un vistazo:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-compared.html

La arquitectura de clúster consta de un grupo de servidores MySQL a los que acceden las aplicaciones; estos servidores MySQL en realidad no almacenan los datos del clúster, los datos se dividen en el grupo de nodos de datos a continuación. Cada servidor MySQL tiene acceso a los datos en todos los nodos de datos. Si un servidor MySQL cambia una parte de los datos, todos los demás servidores MySQL lo pueden ver instantáneamente.

Obviamente, esta arquitectura hace que sea extremadamente fácil escalar la base de datos. A diferencia de la fragmentación, la aplicación no necesita saber dónde se guardan los datos; simplemente puede equilibrar la carga en todos los servidores MySQL disponibles. A diferencia del escalado horizontal con la replicación de MySQL, Cluster le permite escalar tanto las escrituras como las lecturas. Se pueden agregar nuevos nodos de datos o servidores MySQL a un clúster existente sin pérdida de servicio para la aplicación.

La arquitectura de nada compartido de MySQL Cluster significa que puede ofrecer una disponibilidad extremadamente alta (99,999%+). Cada vez que cambia los datos, se replican sincrónicamente en un segundo nodo de datos; si un nodo de datos falla, las solicitudes de lectura y escritura de las aplicaciones son manejadas automáticamente por el nodo de datos de respaldo.

Debido a la naturaleza distribuida de MySQL Cluster, algunas operaciones pueden ser más lentas (por ejemplo, JOIN que tienen miles de resultados provisionales, aunque hay una solución prototipo disponible que soluciona esto), pero otras pueden ser muy rápidas y pueden escalar extremadamente bien (por ejemplo, operaciones primarias). clave lee y escribe). Tiene la opción de almacenar tablas (o incluso columnas) en la memoria o en el disco y, al elegir la opción de memoria (con los cambios marcados en el disco en el fondo), las transacciones pueden ser muy rápido.

MySQL Cluster puede ser más complejo de configurar que un solo servidor MySQL, pero puede evitar que tenga que implementar fragmentación o división de lectura/escritura en su aplicación. Columpios y rotondas.

Para obtener el mejor rendimiento y escalabilidad de MySQL Cluster, es posible que deba modificar su aplicación (consulte el documento técnico Ajuste del rendimiento del clúster:http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php ). Si eres el propietario de la aplicación, esto normalmente no es un gran problema, pero si estás usando la aplicación de otra persona que no puedes modificar, entonces podría ser un problema.

Una nota final es que no es necesario que sea todo o nada:puede optar por almacenar algunas de sus tablas en Cluster y algunas usando otros motores de almacenamiento, esta es una opción por tabla. También puede replicar entre Cluster y otros motores de almacenamiento (por ejemplo, use Cluster para su base de datos en tiempo de ejecución y luego replique a InnoDB para generar informes complejos).