620 likes | 1.07k Views
MariaDB y MySQL. Integrantes: María José Gutiérrez Juan Carlos Ferreira Ronald Prado. Agenda:. MySQL. Características de MySQL. MariaDB. Características de MariaDB. Arquitectura de MySQL. Arquitectura de MariaDB Manejo de Memoria. Tipos de Archivos. Índices en MySQL. Concurrencia.
E N D
MariaDB y MySQL Integrantes: María José Gutiérrez Juan Carlos Ferreira Ronald Prado
Agenda: • MySQL. • Características de MySQL. • MariaDB. • Características de MariaDB. • Arquitectura de MySQL. • Arquitectura de MariaDB • Manejo de Memoria. • Tiposde Archivos. • Índices en MySQL. • Concurrencia. • Recuperación.
MySQL • MySQL es un sistema de administración para bases de datos relacionales que provee una solución robusta a los usuarios con poderosas herramientas multi-usuario, soluciones de base de datos SQL (structured Query Language) multi-threaded. Es rápido, robusto y fácil de utilizar.
Características de MySQL Las principales características de este gestor de bases de datos son las siguientes: • Aprovecha la potencia de sistemas multiprocesador, gracias a su implementación multihilo. • Soporta gran cantidad de tipos de datos para las columnas. • Dispone de API's en gran cantidad de lenguajes (C, C++, Java, PHP, etc). • Gran portabilidad entre sistemas. • Soporta hasta 32 índices por tabla. • Gestión de usuarios y passwords, manteniendo un muy buen nivel de seguridad en los datos.
MariaDB • MariaDB es un servidor de base de datos derivado de MySQL con licencia GPL. Está soportado por Michael Monty Widenius (fundador de MySQL) y la comunidad de desarrolladores de software libre. • Tiene una alta compatibilidad con MySQL ya que posee las mismas órdenes, interfaces, APIs y bibliotecas, siendo su objetivo poder cambiar un servidor por otro directamente.
Características de MariaDB • Uno de las características a favor de MariaDB es que no hace falta hacer ninguna modificación en toda la estructura de la base de datos que tenemos, ni siquiera hay que tocar una línea de código, porque MariaDB es 100% compatible con MySQL. • Mejoras de Velocidad: • Existen algunas mejoras al código DBUG para hacer su ejecución mas rápida cuando se compila. • La tabla de chequeo de redundancia es mas rápida . • El uso del motor aria permite realizar consultas complejas rápidamente. • Replicación rápida y segura.
Arquitectura de MySQL Los conectores son bibliotecas en diferentes lenguajes de programación que permiten la conexión (remota o local) con servidores MySQL y la ejecución de consultas. Por ejemplo, el conector Connector/J permite conectarse a MySQL desde cualquier aplicación programada en lenguaje Java, y utilizando el Java Database Connectivity (JDBC) API.
Arquitectura de MySQL La gestión de conexiones es responsable de mantener las múltiples conexiones de los clientes. Las conexiones consumen recursos de máquina, y crearlas y destruirlas son también procesos costosos. Por eso, el gestor de conexiones de MySQL puede configurarse para limitar el número de conexiones concurrentes.
Arquitectura de MySQL Cada vez que una consulta llega al gestor de MySQL, se analiza sintácticamente y se produce una representación intermedia de la misma. A partir de esa representación, MySQL toma una serie de decisiones, que pueden incluir el determinar el orden de lectura de las tablas, el uso de ciertos índices, o la re-escritura de la consulta en una forma más eficiente.
Arquitectura de MySQL Dado que la optimización de las consultas depende de las capacidades del gestor de almacenamiento que se esté utilizando, el optimizador “pregunta” al gestor si soporta ciertas características, y de este modo, puede decidir el tipo de optimización más adecuado.
Arquitectura de MySQL MySQL implementa un caché de consultas, donde guarda consultas y sus resultados enteros. De este modo, el procesador de consultas, antes ni siquiera de plantear la optimización, busca la consulta en la caché, para evitarse realizar el trabajo en el caso de que tenga suerte y encuentre la consulta en la caché.
Arquitectura de MySQL El control de concurrencia en un gestor de bases de datos es simplemente el mecanismo que se utiliza para evitar que lecturas o escrituras simultáneas a la misma porción de datos terminen en inconsistencias o efectos no deseados.
Arquitectura de MySQL La recuperación permite “volver hacia atrás” (rollback) partes de una transacción.
Arquitectura de MySQL La gestión de transacciones permite dotar de semántica “todo o nada” a una consulta o a un conjunto de consultas que se declaran como una sola transacción.
Arquitectura de MySQL Los motores de almacenamiento son una interfaz abstracta con funciones comunes de gestión de datos en el nivel físico.
Arquitectura de MySQL EL motor de almacenamiento InnoDB proporcionan tablas transaccionales.
Arquitectura de MySQL Trata tablas no transaccionales. Proporciona almacenamiento y recuperación de datos rápida.
Arquitectura de MySQL El motor de almacenamiento MEMORY proporciona tablas en memoria.
Arquitectura de MySQL El motor de almacenamiento FEDERATED guarda datos en una base de datos remota.
Arquitectura de MariaDB • Mas motores de almacenamiento: Adicionalmente a los motores estándar de MySQL, los siguientes motores están incluidos en los paquetes binarios y fuente de MariaDB: • Aria: Un motor de almacenamiento a prueba de fallos basado en MyISAM. • PBXT: Un motor de almacenamiento transaccional con una gran cantidad de nuevas características. • XtraDB: El reemplazo del motor InnoDB basado en el plug-in de InnoDB • FederatedX: El reemplazo del motor Federated.
Manejo de Memoria • El servidor MySQL utiliza espacio en disco para almacenar lo siguiente: • Los programas cliente y servidor, y sus librerías. • Los archivos de registro ("logs") y de estado. • Las bases de datos. • Los archivos de formato de tablas ("*.frm") para todos los motores de almacenamiento, y los archivos de datos y archivos de índices para algunos motores de almacenamiento. • Los archivos de "tablespaces" de InnoDB, si el motor de almacenamiento InnoDB está activado. • Tablas temporales internas que han sobrepasado el límite de tamaño en memoria y deben ser convertidas a tablas en disco.
Tipos de Archivos • El motor de almacenamiento MyISAM almacena en el disco duro cada tabla en tres archivos: • .frm archivos de formato de la tabla. • .MYD (MyData) archivos de datos. • .MYI (MyIndex) archivos índices. Cuyos nombres que comienzan con el nombre de la tabla y tienen una extensión para indicar el tipo de archivo.
Indices • Estructuras de datos que permiten al SMBD localizar de una manera mas rápida un registro dentro de un archivo de datos. • Los índices (como en el caso de los libros) sirven para agilizar las consultas de las tablas, evitando que MySQL tenga que revisar todos los datos disponibles para devolver el resultado. • En MySQL el número máximo de índices por tabla y la longitud máxima del índice se define por el motor de almacenamiento. • Todos los motores de almacenamiento de apoyo (support) permiten por lo menos 16 índices por tabla y una longitud total del índice de al menos 256 bytes. La mayoría de los motores de almacenamiento tienen límites más altos.
¿Cómo usa MySQL los índices? • Para buscar filas que coincidan con una cláusula WHERE rápidamente. • Para recuperar filas de otras tablas al realizar joins. • Para encontrar el valor MIN() y MAX() de una columna de índice específicos key_col.
Tipos de Índice en MySQL • PRIMARY KEY: Índice diseñado para consultas especialmente rápidas. Todos sus campos deben ser UNICOS y no admite NULL • UNIQUE: es aquel que no permite almacenar dos datos iguales. • FULLTEXT: (soportado sólo por MyISAM)permite realizar búsquedas de palabras. Se pueden crear FULLTEXT sobre columnas tipo CHAR, VARCHAR o TEXT. Una vez creado se pueden hacer búsquedas de la siguiente manera: SELECT * FROM nombre_tabla WHERE MATCH(nombre_indice_fulltext) AGAINST('palabra_a_buscar');
Tipos de Índice en MySQL • SPATIAL: su uso común es en tablas geom que almacene columnas del tipo GEOMETRY. Para tablas MyISAM, MySQL puede crear índices SPATIAL del mismo modo que los índices regulares , pero agregando la palabra reservada SPATIAL, como se verá más adelante. • Prefijo: Con col_name ( N ) de sintaxis en una especificación de índice, puede crear un índice que utiliza sólo la primera N caracteres de una columna de cadena. Indexación sólo un prefijo de valores de columna de esta manera puede hacer un fichero índice mucho menor.
Regla de “la izquierda” • Si necesitamos un SELECT ... WHERE columna_1 = X AND columna_2 = Y y ya tenemos un índice con la columna_1, podemos crear un segundo índice con la columna 2, o mejor todavía, crear un único índice combinado con las columnas 1 y 2. Estos son los índices multicolumna, o compuestos. • No obstante si tenemos índices multicolumna y se utilizan en las clausulas WHERE, se debe incluir siempre de izquierda a derecha las columnas indexadas; o el índice NO se usará: • Supongamos un INDEX usuario (id, name, adress), y una cláusula SELECT ... WHERE NAME = x. Este Select no aprovechará el índice. Tampoco lo haría un SELECT ... WHERE ID =X AND ADRESS = Y. Cualquier consulta que incluya una columna parte del INDEX sin incluir además las columnas a su izquierda, no hará uso del índice. • Por tanto en nuestro ejemplo sólo sacarían provecho del índice las consultas SELECT ... WHERE ID = x, o WHERE ID = X AND NAME = y o WHERE ID = x AND NAME = y AND ADRESS = Z
Creando un índice en MySQL • CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...) [index_type] • index_col_name: col_name [(length)] [ASC | DESC] • index_type: USING {BTREE | HASH}
Uso de PRIMARY KEY • El PRIMARY KEY de una tabla representa la columna o el conjunto de columnas que se utilizan en la mayoría de las preguntas vitales. • Tiene un índice asociado, para el rendimiento de consulta rápida. Beneficios de rendimiento de consulta de la optimización NOT NULL, ya que no puede incluir ningún valor NULL. • Con el motor de almacenamiento InnoDB, los datos de la tabla se organizan físicamente para hacer ultra-rápido y búsquedas de tipos sobre la base de la columna de clave principal o columnas.
Índices de columna • El tipo más común de índice implica una sola columna, el almacenamiento de copias de los valores de esa columna en una estructura de datos, lo que permite búsquedas rápidas de las filas con los valores de la columna correspondiente • La estructura de datos B-TREE permite encontrar rápidamente el índice de un valor específico, un conjunto de valores, o un rango de valores, lo que corresponde a los operadores como = , > , ≤ ,BETWEEN , IN , y así sucesivamente, en un WHERE cláusula.
Índices de múltiples columnas • MySQL puede crear índices compuestos (es decir, los índices de varias columnas). Un índice puede ser de hasta 16 columnas. • Un índice de múltiples columnas puede ser considerado como un conjunto ordenado, las filas de los cuales contienen los valores que se crean mediante la concatenación de los valores de las columnas indexadas.
Concurrencia Proceso en el que dos transacciones o más se ejecutan independientemente y realizando todas las acciones para las cuales fueron creadas y dejando a la base de datos en un estado consistente. Cada transacción concurrente debe cumplir con las características ACID: Atomicidad, Consistencia, aIslamiento, Durabilidad.
Concurrencia En MySQL, esta misión se enfoca en el motor de Base de Datos INNODB. MySQL tiene al motor de almacenamiento INNODB como mecanismo para el manejo de concurrencia.
Motor de Almacenamiento INNODB * Dota a MySQL de un motor de almacenamiento transaccional. * Posee capacidades de COMMIT, ROLLBACK y recuperación ante fallas. * Máximo rendimiento al procesar grandes volúmenes de datos. * Soporta restricciones FOREIGN KEY.
Motor de Almacenamiento INNODB * Implementa dos protocolos para la concurrencia: BLOQUEO A NIVEL DE FILAS BLOQUEO A NIVEL DE TABLAS y se puede configurar en modo MVCC (CONTROL MULTIVERSIÓN)
Modos de Bloqueo INNODB 1) A nivel de Filas. A este nivel tenemos dos categorías: 1.a) Compartido(S): permite a una transacción solo leer una fila 1.b) Exclusivo(X): permite a una transacción modificar o eliminar una fila
Modos de Bloqueo INNODB Un extra… INNODB soporta “bloqueo de granularidad múltiple” (bloqueos en registros y bloqueos en tablas enteras, simultáneamente)
Modos de Bloqueo INNODB 2) A nivel de Tablas. Denominados “bloqueos de Intención”, quiere decir que: la transacción indica que tipo de bloqueo requerirá sobre una fila de dicha tabla.
Modos de Bloqueo INNODB Tipos de Bloqueo de Intención. 2.a) Intención Compartida(IS): T trata de establecer bloqueos S en tuplas individuales de la tabla. 2.b) Intención Exclusiva(IX): T trata de establecer bloqueos X en todas las tuplas de la tabla.
Modos de Bloqueo INNODB Protocolo de Bloqueo de Intención. Idea Básica: “Antes que una determinada transacción logre un bloqueo(S)/bloqueo(X) en una determinada fila, antes necesita establecer un bloqueo(S)/bloqueo(X) en la tabla que contiene esta fila”
Modos de Bloqueo INNODB Ejemplos de sentencias MySQL para bloqueo: SELECT … FROM … LOCK IN SHARE MODE LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW PRIORITY] WRITE} … UNLOCK TABLES
Modos de Bloqueo INNODB Tabla de compatibilidad entre tipos de bloqueos:
Configuración de los Niveles de Aislamiento en INNODB * Toda la actividad del usuario, se establece en una transacción. * INNODB, posee un modo de ejecución automática (configurable) llamado AUTOCOMMIT. Si (AUTOCOMMIT = 1) -> cada sentencia SQL es una transacción individual Si (AUTOCOMMIT = 0) -> cada usuario tiene una transacción abierta
Niveles de Aislamiento en INNODB Hay 4 niveles que ofrece INNODB para las transacciones: READ COMITTED READ UNCOMITTED (lectura sucia) REPETEABLE READ SERIALIZABLE
Recuperación Se puede definir básicamente como todos aquellos mecanismos y métodos por las cuales pasa una base de datos para recuperar las acciones hechas por las transacciones, dañadas debido a algún factor interno o externo a la BD.
Recuperación en MySQL 1.- Tipos: MySQL implementa dos tipos o métodos de recuperación. 1.a) Basada en BINARY LOG 1.b) Modificación Inmediata de la BD (dependiendo del estado de AUTOCOMMIT {0,1}).
Recuperación en MySQL 2.- Estructuras. * MySQL utiliza dos archivos de registros binarios: ib_logfile0 y ib_logfile1 (son compartidos por todas las tablas INNODB. * El registro binario se encarga de actualizar la base de datos tan completamente como sea posible (contiene todas las copias hechas tras la copia de seguridad)