Bases de Datos

6,246 views

Recientemente estuve buscando varias opciones sencillas para consultar tablas de otro servidor y acceder a su informacion en otro, habia varias opciones, las logicas eran Replicacion de Datos, pero implicaba tener configurados esquemas de Master/Slave y dado que solo queria algunas tablas y no toda la base de datos la descarte, la otra era Row Replication pero esa opcion solo esta disponible en las versiones de 5.1 que aun no estan liberadas al 100% (Se encuentra en RC pero soy muy paranoico), otra opcion era crear conexiones de en distincas instancias pero eso ensuciaria demasiado el codigo y no permitiria darle un buen mantenimiento cuando se necesitara, total bien es dicho primero lee las instrucciones, me dispuse a darle una leida a la documentacion en linea de MySQL en su sitio para desarrolladores que es http://dev.mysql.com ahi me encontre la seccion de Storage Engine del Capitulo 14 http://dev.mysql.com/doc/refman/5.0/es/storage-engines.html

En este capitulo del Manual del MySQL explican los distintos tipos de engines que se pueden usar en las tablas de MySQL, tipicamente solo se usan el MyISAM y el InnoDB pero hay mas opciones que rara vez se exploran, veamos

  • MyISAM es el motor por excelencia en MySQL, reconocido por su velocidad de acceso y por su capacidad para manejar la informacion , no soporta Transacciones
  • MERGE Se puede emplear para unir dos tablas en una sola de este tipo, siempre y cuando ambas tablas tengan el mismo esquema
  • MEMORY como su nombre lo dice son tablas que se crean en Memoria, se les suele utilizar para poner informacion que se pueda acceder rapidamente ya que como es sabido el acceso a la RAM es mas rapido que al disco
  • BDBHeredada de la vieja guardia pero no por ello es poco util es un tipo de datos que permite transacciones, indexacion e integridad referencial
  • EXAMPLE Realmente este engine no sirve mas que para crear tablas, pero no puedes escribir en estas, se usa como lo dice de ejemplo para que se pueda ver como quedan los esquemas o crear un engine nuevo a partir de el
  • BLACKHOLE es el equivalente al /dev/null de Unix, todo lo que mandes a una tabla de este tipo se va a la nada (mmm realmente no se para que) se dice que se puede usar para que registres logs de actividades, pero aun no he descubierto como
  • CSV Este me llamo la atencion pero depende para que lo uses, este tipo de engine te crea una tabla y un archivo en formato CSV(Comma Separated Value) que es facilmente leido por Excel, Calc y otras hojas de calculo, no soporta indices, transacciones ni soñarlo y su acceso es secuencial
  • InnoDBMotor recomendado para soporte a transacciones, indices, integridad referencial y demas lindezas del mundo de bases de datos, es muy bueno pero como todo en esta vida no es la perfeccion ya que se sacrifica velocidad por integridad
  • NDB Es el tipo de tablas usado en los sistemas de Cluster de MySQL, su uso es exclusivo para este esquema
  • FEDERATED Este es basicamente un Mapeo de una tabla de otro servidor en tu servidor local, puedes hacer INSERT,UPDATE,SELECT y DELETE, no puedes usar ALTER ni DROP, toda la informacion que manipules se reflejara en la tabla del servidor Remoto, muy util para no tener tablas extras en tu aplicacion y consolidar en un servidor todos los datos, desventajas te quedas sin conexion ,te quedas sin acceso a la tabla

Como veran el manejo del engine FEDERATED cumplia con mi necesidad, con la premisa de que tenia que estar siempre en linea , de no ser asi este asunto no hiba a funcionar, me parecio aceptable asi que estoy haciendo pruebas, les dejo unos ejemplos para los que les interesen

En el servidor remoto o el que va guardar los datos creen una tabla asi, suponiendo que la base de datos se llama test y la tabla se llamara datos

CREATE TABLE  `test`.`datos` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nombre` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;

Ahora en el servidor donde se hara el engine FEDERATED que accedera remotamente a esos datos hagan algo asi:

CREATE TABLE  `test`.`datos` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nombre` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=FEDERATED
CONNECTION='mysql://usera_db:pass_db@hostname:3306/test/datos';

Ya listas las tablas en los dos servidores empiezen a crear registros en ambos lados y veran como lo que se agrega en el servidor remoto se refleja en el servidor que accede y viceversa, lo que se agrega en el servidor con la tabla FEDERATED se refleja en el remoto.

Como ven las aplicaciones a este tipo de datos pueden ser muy practicas, si se dispone de un esquema de alta disponibilidad en conexiones, debo aclarar que no todo en esta vida es perfecto hay algunos puntos referentes a la seguridad que la gente de MySQL siempre hace mencion, al crear la tabla FEDERATED, se graba en el esquema en texto plano el user y el pass de la base de datos remota, esto es considerado por los expertos en seguridad como un grave punto de vulnerabilidad, asi que tomenlo en cuenta

Saludos

Dante



 

4 Comments to “Motores de almacenamiento de MySQL y tipos de tablas”


  1. han — 13 September, 2010 @ 1:56 am

    Vale la pena siempre tomarse unos pocos segundos para agradecer, Muchas Gracias por la información, me ha servido..

  2. Leonardo — 4 January, 2011 @ 4:05 am

    Muchas gracias por la información, algo así estaba buscando

  3. Chris07 — 28 September, 2011 @ 2:57 pm

    =)Muy bueno.

  4. dodge — 31 August, 2012 @ 12:29 pm

    Hοla
    Me agradó la manеra en que aborda sοbre el tema.

    Volveré vіsіtanԁo еsta página



Write a comment

Name