MySQL Fabric

Nota: Requisitos de versión y estado

Se comenzó a trabajar en el soporte para MySQL Fabricen la versión 1.6. Considere el soporte con una calidad prealfa. El manual podría no enumerar todas las limitaciones de la/s característica/s. Aún se está trabajand en ello.

La fragmentación es el único caso de uso soportado por el complemento hasta la fecha.

Nota: Conceptos de MySQL Fabric

Por favor, verfique el manual de referencia de MySQL para más información sobre MySQL Fabric y cómo configurarlo. El manual de PHP asumen que se es familiar con los conceptos e ideas básicos de MySQL Fabric.

MySQL Fabric es un sistema para gestionar granjas de servidores MySQL para lograr una Alta Disponibilidad y opcionalmente soporte para fragmentación. Técnicamente, es un middleware para gestionar y monitorizar servidores MySQL.

Los clientes consultan a MySQL Fabric para obtener listas de servidores MySQL, sus estados y sus roles. Por ejemplo, los clientes pueden solicitar una lista de esclavos para un grupo de Replicacion MySQL y para ver si están listos para manejar peticiones SQL. Otro ejemplo es un clúster de servidores de MySQL fragmentados donde el cliente busca conocer a qué fragmento consultar para una tabla y clave de de fragmentación dados. Si se configura para utilizar Fabric, el complemento usa XML RCP sobre HTTP para obtener la lista en tiempo de ejecución desde un host deto MySQL Fabric. La llamada XML a un procedimiento remoto se realiza en segundo plano y de forma transparente desde el punto de vista de los desarrolladores.

En lugar de enumerar los servidores MySQL directamente en el fichero de configuración del complemento, este contiene una lista de uno o más host de MySQL Fabric.

Ejemplo #1 Configuración del complemento: hosts de Fabric en lugar de servidores MySQL

{
    "myapp": {
        "fabric": {
            "hosts": [
                {
                    "host" : "127.0.0.1",
                    "port" : 8080
                }
            ]
        }
    }
}

Los usuarios utilizan las nuevas funciones mysqlnd_ms_fabric_select_shard() y mysqlnd_ms_fabric_select_global() para cambiar al conjunto de servidores responsables de una clave de fragmento dada. Luego, el complemento elige un servidor apropiado para ejecutar las consultas. Al hacer esto, el complemento se encarga del conjunto de reglas adicionales de equilibrado de carga.

El ejemplo de abajo asume que MySQL Fabric ha sido configurado al fragmento de tabla test.fabrictest usando la columna id de la tabla como clave de fragmento.

Ejemplo #2 Particionameinto manual usando sugerencias SQL

<?php
$mysqli 
= new mysqli("myapp""usuario""contraseña""base_datos");
if (!
$mysqli) {
    
/* Por supuesto, su manejo de errores es mejor... */
    
die(sprintf("[%d] %s\n"mysqli_connect_errno(), mysqli_connect_error()));
}

/* Crear una tabla global - una tabla disponible en todos los fragmentos */
mysqlnd_ms_fabric_select_global($mysqli"test.fabrictest");
if (!
$mysqli->query("CREATE TABLE test.fabrictest(id INT NOT NULL PRIMARY KEY)")) {
    die(
sprintf("[%d] %s\n"$mysqli->errno$mysqli->error));
}

/* Cambiar la conexión al fragmento apropiado e insertar un registro */
mysqlnd_ms_fabric_select_shard($mysqli"test.fabrictest"10);
if (!(
$res $mysqli->query("INSERT INTO fabrictest(id) VALUES (10)"))) {
    die(
sprintf("[%d] %s\n"$mysqli->errno$mysqli->error));
}

/* Intentar leer el recién insertado registro */
mysqlnd_ms_fabric_select_shard($mysqli"test.fabrictest"10);
if (!(
$res $mysqli->query("SELECT id FROM test WHERE id = 10"))) {
    die(
sprintf("[%d] %s\n"$mysqli->errno$mysqli->error));
}
?>

El ejemplo crea una tabla fragmentada, inserta un registro y lo lee después. Todas las operaciones de lenguaje de definición de datos (DDL) sobre una tabla fragmentada deben aplicarse a lo que se llama el grupo de servidores global. Antes de crear o alterar una tabla fragmentada, se llama a mysqlnd_ms_fabric_select_global() para cambiar la conexión dada a los servidores correspondientes del grupo global. Las senetencias SQL de manipulación de datos (DML) deben ser enviadas a los fragmentos directamente. La función mysqlnd_ms_fabric_select_shard() cambia una conexión para manejar el fragmento de una cierta clave de fragmento.