Descargar

Motores de almacenamiento y manejo de Indices en MySQL


    Resumen

    MySQL es un sistema de administracion de base de datos relacional. Logicamente, los datos se estructuran en tablas que se relacionan entre si por un campo comun. MySQL incorpora una caracteristica unica llamada "motores de almacenamiento", que nos permite seleccionar el tipo de almacenamiento interno de cada tabla, en base al que mejor se adecue a una situacion particular, entre los mas populares se encuentran MyISAM e InnoDB. MySQL utiliza indices para la optimizacion de consultas, los cuales facilitan a MySQL recuperar eficientemente los datos de una tabla.

    Palabras ClaveMotor de Almacenamiento, indices, espacio en disco.

    1 INTRODUCCION

    Esta investigacion, no se concentraraen los aspectos tecnicos de los diferentes motores de almacenamiento, sino que se concentrarasobre como y donde estos diferentes motores pueden ser empleados de la mejor manera. Tambien se incluye un analisis detallado de la estructura y utilizacion de los indices y sus beneficios.

    A continuacion se describe brevemente lo que es un motor de almacenamiento y la indexacion:

    El servidor MySQL incorpora una caracteristica unica llamada "motores de almacenamiento", que nos permite seleccionar el tipo de almacenamiento interno de cada tabla, en base al que mejor se adecue a una situacion particular. Dicha seleccion, la hace el desarrollador a nivel de tabla, y no afecta a la manera en que el servidor interactua con el cliente: los comandos SQL seran los mismos sea cual sea el motor de almacenamiento escogido. El cliente no necesita saber como se guardan los datos.

    El motor de almacenamiento es quien almacenara, manejaray recuperara informacion de una tabla en particular. Comparando MyISAM vs InnoDB, ninguno se destaca como la solucion para la mayoria de los casos. Cada uno tiene sus pros y sus contras, por lo tanto al momento de decidir que motor de almacenamiento a utilizar dependeramucho del escenario donde se aplique.

    En la optimizacion de consultas se hace uso del indexado, la indexacion puede aumentar drasticamente el rendimiento al buscar y recuperar datos de la base de datos. Los diferentes motores de almacenamiento ofrecen diferentes tecnicas de indizacion y algunos pueden ser mas adecuados para el tipo de datos que se encuentren.

    2 MOTORES DE ALMACENAMIENTO

    2.1 ¿Que es un Motor de Almacenamiento?

    Los datos en MySQL se almacena en archivos o memoria usando una variedad de diferentes tecnicas. Cada una de estas tecnicas emplean diferentes mecanismos de almacenamiento, la indexacion facilita, los niveles de bloqueo y, en definitiva, proporciona una gama de diferentes funciones y capacidades. Al elegir una tecnica diferente podemos ganar mas velocidad o funcionalidad de los beneficios que mejoren la funcionalidad de nuestra aplicacion.

    Por ejemplo, si trabajamos con una gran cantidad de datos temporales, podemos hacer uso del motor de almacenamiento MEMORY, que almacena todos los datos de las tablas en la memoria. Alternativamente, podemos querer una base de datos que soporte transacciones para garantizar la capacidad de datos.

    Cada una de estas diferentes tecnicas y suites de funcionalidad en el sistema de MySQL que se denomina un motor de almacenamiento tambien conocido como tipo de tabla. Por defecto, MySQL viene con una serie de diferentes motores de almacenamiento preconfigurado y habilitado en el servidor MySQL.

    Podemos seleccionar el motor de almacenamiento a utilizar en un servidor, base de datos e incluso la tabla base, proporcionandonos mayor flexibilidad a la hora de elegir la forma en que la informacion se almacenara, como se indexa y quecombinacion de rendimiento y funcionalidad deseamos utilizar con los datos.

    Esta flexibilidad de elegir la forma en que los datos son almacenados y la indexacion es una de las principales razones por las queMySQL es tan popular; otros sistemas de bases de datos, incluidas la mayoria de las opciones comerciales, soportan un unico tipo de almacenamiento de base de datos. Lamentablemente, el "tamaño de un enfoque unico para todos" en estas otras soluciones significa un sacrificio en el rendimiento de la funcionalidad, o tener que pasar horas o incluso dias de ajuste adecuado para la base de datos. Con MySQL, podemos cambiar el motor que estamos utilizando.

    2.2 Diferenciando los Motores

    La mayoria de las personas que utilizan MySQL saben que MyISAM e InnoDB son los dos motores de almacenamientos mas comunes en MySQL. Tambien es sabido, que la mayoria no toma en cuenta el motor de almacenamiento al crear una tabla y acepta el que viene por default en la base de datos.

    Con el fin de tomar una decision acerca de cual motor elegir, primero tenemos que pensar en las diferentes funcionalidades basicas en cada uno de los motores que nos permitan diferenciarlos entre ellos. En general podemos dividir la funcionalidad basica en cuatro partes, el apoyo sobre campos y tipos de datos, tipos de bloqueo, indizacion y transacciones.

    Campos y Tipos de Datos: Aunque todas los motores soportan los tipos comunes datos, es decir, enteros, reales y caracteres, no todos los motores apoyan otros tipos de campo, en particular la BLOB "grandes objetos binarios" o tipos de texto. Otros motores pueden soportar anchuta de caracter y tamaños de datos limitado.

    Mientras estas limitaciones, afectan directamente a la informacion que tiende tambien a tener un efecto relacionado con los tipos de busquedas que se realizan, o sobre los indices que se creen sobre esa informacion. A su vez, estas diferencias pueden afectar el rendimiento y la funcionalidad de la aplicacion, es por ello que se pueden tomar decisiones a cerca de la funcionalidad del motor de almacenamiento que se elija para el tipo de datos que se estealmacenando.

    El Bloqueo: El bloqueo dentro de las bases de datos, define como es controlado el acceso y la actualizacion de informacion. Cuando un objeto en la base de datos establoqueado para la actualizacion, otros procesos no pueden modificar o en algunos casos leer los datos hasta que la actualizacion ha terminado.

    Indexacion: la indexacion puede aumentar drasticamente el rendimiento al buscar y recuperar datos de la base de datos. Los diferentes motores de almacenamiento ofrecen diferentes tecnicas de indizacion y algunos pueden ser mas adecuados para el tipo de datos que se encuentren.

    Algunos motores de almacenamiento simplemente no soportan la indexacion, ya sea porque todos los que utilizan la indexacion de las tablas fundamentales o porque el metodo de almacenamiento de datos no permite la indexacion.

    Transacciones: Las transacciones proporcionan fiabilidad de los datos durante la actualizacion o insercion de la informacion permitiendo añadir datos a la base de datos, pero solo depositan estos datos cuando las condiciones y otras etapas en la ejecucion de la aplicacion han finalizado con exito. Por ejemplo, cuando la transferencia de informacion de una cuenta a otra deberiamos usar transacciones para asegurarnos de que tanto la domiciliacion bancaria de una cuenta y el credito se ha completado correctamente. Si bien el proceso ha fallado, podriamos cancelar la transaccion y los cambios se perderian. Si el proceso es completado, entonces lo confirmariamos depositando los cambios.

    2.3 Tipos de Motores de MySQL

    MySQL dispone de una docena de motores de almacenamiento propios, mas los motores externos desarrollados por terceras partes que se pueden incorporar al servidor. Algunos de los mas conocidos son: MyISAM, InnoDB, HEAP, NDB. En este capitulo se le daramayor enfasis a los motores MyISAM e InnoDB, los cuales trataremos mas adelante.

    A continuacion se describe brevemente cada uno de los motores de almacenamiento, mas adelante se trataran con mas detalle los motores MyISAM e InnoDB:

    MyISAM trata tablas no transaccionales.

    Proporciona almacenamiento y recuperacion de datos rapida, asi como posibilidad de busquedas fulltext. MyISAM se soporta en todas las configuraciones MySQL, y es el motor de almacenamiento por defecto a no ser que tenga una configuracion distinta a la que viene por defecto con MySQL.

    El motor de almacenamiento MEMORY anteriormente conocido como el monton motor de almacenamiento almacena todos los datos en memoria, una vez que se ha decidido apagar el servidor MySQL, cualquier informacion almacenada en una base de datos MEMORY se han perdido. Sin embargo, el formato de las tablas individuales se mantiene y esto le permite crear tablas temporales que se pueden utilizar para almacenar informacion para un acceso rapido sin tener que recrear las tablas cada vez que el servidor de base de datos es iniciado.

    A largo plazo, el uso del motor MEMORY en general, no una buena idea, porque los datos podrian ser tan perdidos facilmente. Sin embargo, se tiene la RAM para soportar las bases de datos en las que se estan trabajando, el uso de tablas MEMORY es una forma eficiente de correr consultas complejas sobre grandes conjuntos de datos y beneficiandonos de las ganancias del rendimiento.

    El motor de almacenamiento MERGE permite una coleccion de tablas MyISAM identicas ser tratadas como una simple tabla. Como MyISAM, los motores de almacenamiento MEMORY y MERGE tratan tablas no transaccionales y ambos se incluyen en MySQL por defecto. Podemos ejecutar consultas que devuelven los resultados de multiples tablas como si se tratara de una sola tabla. Cada tabla fusionada debe tener la misma definicion de tabla. Las tablas MERGE son particularmente efectivas si estamos logging directorios de datos, directa o indirectamente, en una base de datos MySQL y creando una tabla individual por dia, semana o mes y queriendo ser capaces de producir consultas agregadas de multiples tablas. Hay limitaciones para esto sin embargo, podemos fusionar tablas MyISAM y la restriccion de definicion de identica de tabla es estrictamente forzada.

    El motor de almacenamiento ISAM es el motor original disponible en las versiones de MySQL hasta que se introdujo el motor de almacenamiento MyISAM en MySQL.

    ISAM tiene un numero de diferentes limitaciones que lo hacen poco practico como un motor de base de datos. Estos incluyen el formato de almacenamiento, que es nativo de la plataforma y por lo tanto, no entre sistemas portatiles, un tamaño maximo de tabla de 4GB y limitado a busquedas de solo texto. Los indices son tambien son mas limitados, desde que MyISAM es compatible con las mismas plataformas que ISAM, y ofrece una mejor compatibilidad, portabilidad y rendimiento.

    El motor EXAMPLE es en realidad un ejemplo de programacion de un motor de almacenamiento que puede ser utilizado como base para otros motores en el sistema de MySQL. No soporta las inserciones de datos y no es un motor practico para cualquier forma de acceso a bases de datos. Sin embargo, es una buena guia de como desarrollar su propio motor de almacenamiento y, por tanto, una eficaz guia para los programadores.

    NDB Cluster es el motor de almacenamiento usado por MySQL Cluster para implementar tablas que se particionan en varias maquinas. Estadisponible en distribuciones binarias MySQLMax 5.0. Este motor de almacenamiento estadisponible para Linux, Solaris, y Mac OS X.

    El motor de almacenamiento ARCHIVE se usa para guardar grandes cantidades de datos sin indices con una huella muy pequeña.

    El motor de almacenamiento CSV guarda datos en ficheros de texto usando formato de valores separados por comas.

    El motor de almacenamiento FEDERATED se añadioen MySQL 5.0.3. Este motor guarda datos en una base de datos remota. En esta version solo funciona con MySQL a traves de la API MySQL C Client.

    2.4 El Motor MyISAM

    MyISAM es el motor de almacenamiento por defecto. Se basa en el codigo ISAM pero tiene muchas extensiones utiles. Cada tabla MyISAM se almacena en disco en tres ficheros. Los ficheros tienen nombres que comienzan con el nombre de tabla y tienen una extension para indicar el tipo de fichero. Un fichero .frm almacena la definicion de tabla. El fichero de datos tiene una extension .MYD. El fichero indice tiene una extension .MYI MYIndex.

    El motor MyISAM proporciona la mejor combinacion de rendimiento y funcionalidad, a pesar de que carece de la capacidad de transaccion en cambio utiliza el nivel de tabla de bloqueo.

    A menos que necesitemos transacciones, hay pocas bases de datos y aplicaciones que no pueden ser almacenados de manera efectiva usando el motor MyISAM. Sin embargo, en aplicaciones de alto rendimiento en las que hay un gran numero de inserciones o actualizaciones de datos en comparacion con el numero de lecturas puede provocar problemas para el motor MyISAM. Originalmente fue diseñado con la idea de que mas del 90% de los accesos de de las bases de datos una tabla MyISAM serian para lectura, mas bien que para escritura.

    Con el nivel de tabla de bloqueo, una base de datos con un elevado numero de fila las inserciones o actualizaciones se convierten en un cuello de botella de rendimiento como la tabla establoqueada mientras que los datos se añaden. Afortunadamente, esta limitacion tambien funciona bien dentro de las restricciones de las bases de datos no-transaccionales.

    Algunas caracteristicas del motor de almacenamiento MyISAM son:

    MyISAM es el motor de almacenamiento por default y estabasado en el probado ISAM, incorporando nuevas caracteristicas pero conservando su fiabilidad.

    MyISAM almacena la informacion en tres archivos por tabla, uno para el formato de tabla, otro para los datos y un tercer archivo para los indices.

    Los campos Text y Blob pueden ser indexados completamente, lo que es de gran importancia para funciones de busqueda.

    No transaccional.

    Bloqueos a nivel de tabla.

    Muy rapido en lectura y escritura.

    Bajo requerimiento de espacio en disco y memoria.

    Los datos se guardan en disco: diferentes ficheros para la definicion de la tabla, los datos y los indices.

    Es una buena eleccion cuando necesitamos velocidad, y tenemos pocas modificaciones simultaneas de la tabla.

    Ficheros grandes se soportan en sistemas de ficheros y sistemas operativos que soportan ficheros grandes.

    Registros de tamaño dinamico se fragmentan mucho menos cuando se mezclan borrados con actualizaciones e inserciones. Esto se hace combinando automaticamente bloques borrados adyacentes y extendiendo bloques si el siguiente bloque se borra.

    La longitud maxima de clave es 1000 bytes.

    Esto puede cambiarse recompilando. En caso de clave mayor a 250 bytes, se usa un tamaño de bloque mayor, de 1024 bytes.

    Las columnas BLOB y TEXT pueden indexarse.

    Valores NULL se permiten en columnas indexadas. Esto ocupa 0-1 bytes por clave.

    EL PRESENTE TEXTO ES SOLO UNA SELECCION DEL TRABAJO ORIGINAL. PARA CONSULTAR LA MONOGRAFIA COMPLETA SELECCIONAR LA OPCION DESCARGAR DEL MENU SUPERIOR.