{"id":6743,"date":"2014-05-20T23:10:04","date_gmt":"2014-05-20T21:10:04","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=6743"},"modified":"2014-05-20T23:29:51","modified_gmt":"2014-05-20T21:29:51","slug":"motores-de-almacenamiento-en-mysql-tipos","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/motores-de-almacenamiento-en-mysql-tipos\/","title":{"rendered":"Motores de almacenamiento en Mysql. Tipos"},"content":{"rendered":"<p style=\"text-align: justify;\">MySQL\u00a0incorpora una caracter\u00edstica \u00fanica llamada &#8220;motores\u00a0de\u00a0almacenamiento&#8221;, que nos permite seleccionar el tipo de almacenamiento interno de cada tabla, en base al que mejor se adecue a una situaci\u00f3n particular. Dicha selecci\u00f3n, la hace el desarrollador a nivel de tabla, y no afecta a la manera en que el servidor interact\u00faa con el\u00a0cliente: los\u00a0comandos\u00a0SQL\u00a0ser\u00e1n los mismos sea cual sea el motor de almacenamiento escogido. El cliente no necesita saber c\u00f3mo se almacenan los datos.<\/p>\n<p style=\"text-align: justify;\">En este <strong>SGBDR<\/strong> (Sistema Gestor de Bases de Datos Relacionales) existen 9 motores de almacenamiento, adem\u00e1s de los desarrollados por terceras partes, incorporables al servidor.<\/p>\n<p style=\"text-align: justify;\">Los motores <strong>MyISAM e InnoDB<\/strong> son los m\u00e1s empleados.<\/p>\n<p style=\"text-align: justify;\">Tambi\u00e9n es sabido, que la mayor\u00eda no toma en cuenta el motor de almacenamiento al crear una tabla y <strong>acepta el que viene por defecto en la base de datos<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Con el fin de tomar una decisi\u00f3n acerca de cu\u00e1l motor escoger, primero tenemos que pensar en las diferentes funcionalidades b\u00e1sicas en cada uno de los motores que nos permitan diferenciarlos entre ellos.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-6747\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2014\/05\/motores-mysql.gif\" alt=\"motores-mysql\" width=\"600\" height=\"244\" \/><\/p>\n<p>En general podemos dividir la funcionalidad b\u00e1sica en <strong>4\u00a0partes<\/strong>, campos y\u00a0tipos de datos, tipos de bloqueo, indizaci\u00f3n y transacciones.<\/p>\n<p>\u2022\u00a0<strong>Campos y Tipos de Datos<\/strong>: Aunque todos 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 &#8220;grandes objetos binarios&#8221; o tipos de\u00a0texto. Otros motores pueden soportar anchura de car\u00e1cter y tama\u00f1os de datos limitado.<\/p>\n<p>Mientras estas limitaciones, afectan directamente a la informaci\u00f3n que tiende tambi\u00e9n a tener un efecto relacionado con los tipos de b\u00fasquedas que se realizan, o sobre los \u00edndices que se creen sobre esa informaci\u00f3n. A su vez, estas diferencias pueden afectar el rendimiento y la funcionalidad de la aplicaci\u00f3n, es por ello que se pueden tomar decisiones acerca de la funcionalidad del motor de almacenamiento que se elija para el tipo de datos que se este almacenando.<\/p>\n<p style=\"text-align: justify;\">\u2022<strong>\u00a0El Bloqueo<\/strong>: El bloqueo dentro de las\u00a0bases de datos, define como es controlado el acceso y la actualizaci\u00f3n de informaci\u00f3n. Cuando un objeto en la base de datos est\u00e1 bloqueado para la actualizaci\u00f3n, otros\u00a0procesos\u00a0no pueden modificar o en algunos casos leer los datos hasta que la actualizaci\u00f3n ha terminado.<\/p>\n<p style=\"text-align: justify;\">\u2022<strong>\u00a0Indexaci\u00f3n<\/strong>: la indexaci\u00f3n puede aumentar dr\u00e1sticamente el rendimiento al buscar y recuperar datos de la base de datos. Los diferentes motores de almacenamiento ofrecen diferentes t\u00e9cnicas de indizaci\u00f3n y algunos pueden ser m\u00e1s adecuados para el tipo de datos que se encuentren.<\/p>\n<p style=\"text-align: justify;\">Algunos motores de almacenamiento simplemente no soportan la indexaci\u00f3n, ya sea porque todos los que utilizan la indexaci\u00f3n de las tablas fundamentales o porque el m\u00e9todo de almacenamiento de datos no permite la indexaci\u00f3n.<\/p>\n<p style=\"text-align: justify;\">\u2022\u00a0<strong>Transacciones<\/strong>: Las transacciones proporcionan fiabilidad de los datos durante la actualizaci\u00f3n o inserci\u00f3n de la informaci\u00f3n permitiendo a\u00f1adir datos a la base de datos, pero solo depositan estos datos cuando las condiciones y otras etapas en la ejecuci\u00f3n de la aplicaci\u00f3n han finalizado con\u00a0\u00e9xito. Por ejemplo, cuando la transferencia de informaci\u00f3n de una cuenta a otra deber\u00edamos usar transacciones para asegurarnos de que tanto la domiciliaci\u00f3n bancaria de una cuenta y el cr\u00e9dito se ha completado correctamente. Si bien el\u00a0proceso\u00a0ha fallado, podr\u00edamos cancelar la transacci\u00f3n y los cambios se perder\u00edan. Si el proceso es completado, entonces lo confirmar\u00edamos depositando los cambios.<\/p>\n<p><strong>Tipos de motores que podemos controlar desde la interfaz web phpMyAdmin.\u00a0 Explicaci\u00f3n detallada.<\/strong><\/p>\n<p><strong>FEDERATED:<\/strong><\/p>\n<p>Este \u00a0motor de almacenamiento, almacena la informaci\u00f3n en tablas ubicadas un servidor remoto, en vez de local. Este proceso se realiza sin necesidad de usar replicaci\u00f3n o cluster.<\/p>\n<p>En las tablas federadas las peticiones o querys se ejecutan en el servidor remoto. Este motor no se activa por defecto en la instalaci\u00f3n por defecto de MYSQL y hay que instalarlo ,activarlo de manera independiente. Este motor se a\u00f1adi\u00f3 en la \u00a0versi\u00f3n MySQL 5.0.3.<\/p>\n<p>Este motor solo funciona con Mysqk a trav\u00e9s de la API MySQL C Cliente.<\/p>\n<p><strong>MRG_MYISAM<\/strong><\/p>\n<p>Motor tambi\u00e9n conocido como MERGE MYISAM. Permite utilizar una colecci\u00f3n id\u00e9ntica de tablas ISAM y emplearlas como una sola tabla. Para usar este motor, todas las tablas deben ser completamente id\u00e9nticas (mismos nombres, mismos \u00edndices).<\/p>\n<p><strong>BACKHOLE<\/strong><\/p>\n<p>Agujero Negro. No recomendado como motor por defecto. Un motor como motor temporal, para replicaci\u00f3n o servidores esclavos. Toda la informaci\u00f3n introducida se perder\u00e1 al seleccionarle. Esta nuevo engine no escribe los datos en las tablas de MySQL, pero s\u00ed lo hace en el\u00a0binary log, que es justo el log\u00a0que MySQL emplea para realizar la sincronizaci\u00f3n de los datos con los esclavos. Es \u00fatil en un entorno replicado donde todas las sentencias SQL se ejecutan en todos los nodos, pero s\u00f3lo se necesita algunos nodos para almacenar en realidad el resultado.<\/p>\n<p><strong>CSV<\/strong><\/p>\n<p style=\"text-align: justify;\">Almacena los datos en texto plano separado por comas. Puede ser manipulado por terceras aplicaciones como pueden ser las ofim\u00e1ticas: ejemplo: Excel, Openoffice Calc. No soporta \u00edndices. Combina las ventajas de almacenamiento de mysql con hojas de c\u00e1lculo. Este m\u00e9todo puede producir inconsistencias a la hora de almacenar datos. Mysql como gestor de base de datos se asegura de ordenar las peticiones, si alguien abre la base de datos desde Excel, y se realizan modificaciones en la base de datos, el gestor se encarga de bloquearlas. Permite trabajo colaborativo con hojas de c\u00e1lculo u otro tipo de aplicaciones que soporten CSV. Modificando la tabla en tiempo real desde una hoja de calculo.<\/p>\n<p><strong>MEMORY<\/strong><\/p>\n<p style=\"text-align: justify;\">Crea tablas cuyo contenido son almacenados en memoria en vez de disco duro. Los datos permanecen hasta que se apague el ordenador. Al estar la informaci\u00f3n en la memoria, el rendimiento es muy superior a los basados en disco. Utilidad: bases de datos temporales, que desaparecen cuando el servidor se apague.<\/p>\n<p><strong>ARCHIVE<\/strong><\/p>\n<p style=\"text-align: justify;\">El motor de almacenamiento Archivo, comprime \u00a0y descomprime los datos de las tablas cuando se escribe y lee. Soporta insert y select, pero no delete, replace y update. Hace que sean tablas aptas \u00a0para lecturas y escrituras pero no actualizaciones y borrados. Nos permite trabajar con bases muy grandes, pero con poco espacio ocupado. Usa m\u00e1s recursos en el computacionales en el servidor. V\u00e1lido para casos donde se controla el servidor, y sus caracter\u00edsticas soporten este tipo de almacenamiento.<\/p>\n<p><strong>MyISAM<\/strong><\/p>\n<p style=\"text-align: justify;\">Era hasta hace poco el motor por defecto hasta la llegada de INNODB. Es apto para cualquier tipo de situaci\u00f3n. R\u00e1pido en la forma de trabajar e indexar. Permite archivos grandes. A su vez, posee limitaciones. El formato depende almacenamiento depende de la plataforma, el tama\u00f1o de la tabla es de 4GB, los \u00edndices son algo limitados.<\/p>\n<p>Caracter\u00edsticas de este formato:<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Funciona muy bien en lecturas y escrituras.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Los campos text y Blob pueden ser indexados, interesante para funciones de b\u00fasqueda.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Almacena 3 archivos por tabla, uno para el formato, otro para los datos y un tercer fichero para los \u00edndices.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 No soporta transacciones. No soporta ACID completamente, no soporta integridad referencial.<\/p>\n<p>Existe una variante m\u00e1s sencilla y prehist\u00f3rica llamada ISAM.<\/p>\n<p><strong>INNODB<\/strong><\/p>\n<p>Este motor es el establecido por defecto en las nuevas versiones. Posee muchas ventajas y pocas desventajas. Mayor seguridad para el usuario. Recuperaci\u00f3n de errores graves en el sistema.<\/p>\n<p>InnoDB\u00a0es un\u00a0mecanismo de almacenamiento\u00a0de datos de\u00a0c\u00f3digo abierto\u00a0para la\u00a0base de datos\u00a0MySQL, incluido como formato de tabla est\u00e1ndar en todas las distribuciones de\u00a0MySQL AB\u00a0a partir de las versiones 4.0.<\/p>\n<p>Tiene la capacidad de bloquear tablas a nivel de fila, soporta ACID. Dise\u00f1ado para un rendimiento extremo, gran velocidad. Soporta transacciones e integridad referencial. Soporta procedimientos almacenados.<\/p>\n<p>Permite bloquear registros.<\/p>\n<p>Soporta <strong>ACID<\/strong> (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en espa\u00f1ol), garantizando la integridad de nuestras tablas.<\/p>\n<p>Es probable que si nuestra aplicaci\u00f3n hace un uso elevado de INSERT y UPDATE notemos un aumento de rendimiento con respecto a MyISAM.<\/p>\n<p>Al igual que los ficheros de datos\u00a0MyISAM, los ficheros de datos y de registro (log) de\u00a0InnoDB\u00a0son compatibles a nivel binario en todas las plataformas quee tengan el mismo formato de n\u00fameros de coma flotante. Se puede mover una base de batos\u00a0InnoDB\u00a0simplemente copiando todos los ficheros relevantes.<\/p>\n<p><em>Desventaja<\/em>:<\/p>\n<p style=\"text-align: justify;\">InnoDB no dispone de la compresi\u00f3n de datos de la que disfruta MyISAM, de modo que tanto el espacio en disco como la cach\u00e9 en la memoria RAM pueden ser m\u00e1s grandes. Este problema se ha reducido en MySQL 5.0, reduci\u00e9ndolo en aproximadamente un 20%.<\/p>\n<p><strong>PERFORMANCE_SCHEMA<\/strong><\/p>\n<p style=\"text-align: justify;\">El esquema de rendimiento proporciona una manera de inspeccionar la ejecuci\u00f3n interna del servidor en tiempo de ejecuci\u00f3n.\u00a0Se lleva a cabo mediante el\u00a0 motor PERFORMANCE_SCHEMA\u00a0 y la performance_schema\u00a0base de datos.\u00a0El esquema de rendimiento se centra principalmente en almancear los datos de rendimiento.\u00a0Esto difiere de\u00a0<strong>INFORMATION_SCHEMA<\/strong>\u00a0, que sirve para la inspecci\u00f3n de <strong>metadatos<\/strong>.<\/p>\n<p style=\"text-align: justify;\">El esquema de rendimiento supervisa los eventos del servidor.\u00a0Un &#8221;\u00a0evento&#8221; es cualquier cosa que el servidor hace y ha sido instrumentado de manera que puedea ser almacenada.\u00a0En general, un evento podr\u00eda ser una llamada a la funci\u00f3n, un tiempo de espera para el sistema operativo, una etapa de una ejecuci\u00f3n de instrucciones SQL, tales como el an\u00e1lisis o clasificaci\u00f3n, o una declaraci\u00f3n completa o grupo de sentencias.\u00a0En la actualidad, la recopilaci\u00f3n de eventos proporciona acceso a la informaci\u00f3n sobre las llamadas de sincronizaci\u00f3n (como para los mutex) archivo y tabla de E \/ S, los bloqueos de tabla, y as\u00ed sucesivamente para el servidor y para varios motores de almacenamiento.<\/p>\n<p>\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-6748\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2014\/05\/motores-mysql.png\" alt=\"motores-mysql\" width=\"660\" height=\"720\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2014\/05\/motores-mysql.png 660w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2014\/05\/motores-mysql-275x300.png 275w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>MySQL\u00a0incorpora una caracter\u00edstica \u00fanica llamada &#8220;motores\u00a0de\u00a0almacenamiento&#8221;, que nos permite seleccionar el tipo de almacenamiento interno de cada tabla, en base al que mejor se adecue a una situaci\u00f3n particular. Dicha selecci\u00f3n, la hace el desarrollador a nivel de tabla, y no afecta a la manera en que el servidor interact\u00faa con el\u00a0cliente: los\u00a0comandos\u00a0SQL\u00a0ser\u00e1n los mismos sea cual sea el motor de almacenamiento escogido. El cliente no necesita saber c\u00f3mo se almacenan los datos. En este SGBDR (Sistema Gestor de Bases de Datos Relacionales) existen 9 motores de almacenamiento, adem\u00e1s de los desarrollados por terceras partes, incorporables al servidor. Los motores MyISAM e InnoDB son los m\u00e1s empleados. Tambi\u00e9n es sabido, que la mayor\u00eda no toma en cuenta el motor de almacenamiento al crear una tabla y acepta el que viene por defecto en la base de datos. Con el fin de tomar una decisi\u00f3n acerca de cu\u00e1l motor escoger, primero tenemos que pensar en las diferentes funcionalidades b\u00e1sicas en cada uno de los motores que nos permitan diferenciarlos entre ellos.<\/p>\n","protected":false},"author":1,"featured_media":4871,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[37,106],"class_list":["post-6743","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bases-de-datos","tag-mysql","tag-sgbd"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=6743"}],"version-history":[{"count":4,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6743\/revisions"}],"predecessor-version":[{"id":6749,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6743\/revisions\/6749"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/4871"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=6743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=6743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=6743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}