La API de Complementos del Controlador Nativo de MySQL es una característica del Controlador Nativo de MySQL, o mysqlnd. Los complementos de mysqlnd operan en la capa que hay entre las aplicaciones de PHP y el servidor MySQL. Es comparable al Proxy de MySQL. El Proxy de MySQL opera sobre una capa entre cualquier aplicación cliente de MySQL, por ejemplo, una aplicación de PHP, y el servidor de MySQL. Los complementos de mysqlnd can undertake typical MySQL Proxy tasks such as load balancing, monitorizan y optimizan el rendimiento. A causa de la arquitectura y ubicación diferentes, los complementos de mysqlnd no tienen algunas de las desventajas del Proxy de MySQL. Por ejemplo, con los complementos no existe un único punto de fallo, ni un servidor proxy para el despliegue, y no hace falta aprender un nuevo lenguaje de programación (Lua).
Se puede pensar en un complemento de mysqlnd como una extensión de mysqlnd. Los complementos pueden interceptar la mayoría de las funciones de mysqlnd. Las funciones de mysqlnd son llamadas por las extensiones de MySQl de PHP, como ext/mysql, ext/mysqli, y PDO_MYSQL. Como resultado, es posible que un complemento de mysqlnd intercepte todas las llamadas hechas a estas extensiones desde la apliacación cliente.
Las llamadas a funciones internas de mysqlnd también pueden ser interceptadas o reemplazadas. No existen restricciones en la manipulación de tablas de funciones internas de mysqlnd. Es posible configurar cosas, y así cuando ciertas funciones de mysqlnd son llamadas por extensiones que utilizan mysqlnd, la llamada es dirigida a la función apropiada del complemento de mysqlnd. La capacidad de manipular tablas de funciones internas de mysqlnd de esta manera permite una flexibilidad máxima para los complementos.
Los complementos de mysqlnd son de hecho Extensiones de PHP, escritos en C, que utilizan la API de complementos de mysqlnd (la cual está construida dentro del Controlador Nativo de MySQL, mysqlnd). Los complementos se pueden hacer 100% transparentes a las aplicaciones de PHP. No es necesario hacer ningún cambio a las aplicaciones ya que los complementos operan en una capa diferente. Se puede pensar en los complementos de mysqlnd como en una operación en una capa por debajo de mysqlnd.
La siguiente lista representa algunas aplicaciones posibles de los complementos de mysqlnd.
Equilibrio de Carga
División de Lectura/Escritura. Un ejemplo de esto es la extensión PECL/mysqlnd_ms (Maestro Esclavo). Esta extensión divide las consultas de lectura/escritura para una configuración de réplica.
Tolerancia a fallos
Rotación de servidores para evitar la sobrecarga ("Round-Robin")
Monitorización
Registro de Consultas
Análisis de Consultas
Audición de Consultas. Un ejemplo de esto es la extensión PECL/mysqlnd_sip (Protección contra la Inyección SQL). Esta extensión inspecciona las consultas y ejecuta únicamente aquellas que están permitidas según un cojunto de reglas.
Rendimiento
Almacenamiento en Caché. Un ejemplo de esto es la extenión PECL/mysqlnd_qc (Caché de Consultas).
Estrangulamiento ("Throttling")
Fragmentación. Un ejemplo de esto es la extensión PECL/mysqlnd_mc (Multiconexión). Esta extensión intentará dividir una sentencia SELECT en n partes, usando SELECT ... LIMIT parte_1, SELECT LIMIT parte_n. Envía las consultas a diferentes servidores MySQL y combina el resultado en el cliente.
Complementos del Controlador Nativo de MySQL disponibles
Hay varios complementos de mysqlnd ya disponibles. Estos incluyen:
PECL/mysqlnd_mc - Complemento de Multiconexión.
PECL/mysqlnd_ms - Complemento Maestro Esclavo.
PECL/mysqlnd_qc - Complemento de Caché de Consultas.
PECL/mysqlnd_pscache - Complemento de Caché de Gestores de Sentencias Preparadas.
PECL/mysqlnd_sip - Complemento de Protección contra Inyección SQL.
PECL/mysqlnd_uh - Complemento de Gestor de Usuarios.