Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

MyIsam vs InnoDB (pero esta vez en serio)

Estas en el tema de MyIsam vs InnoDB (pero esta vez en serio) en el foro de Mysql en Foros del Web. Bueno no quiero revivir el mismo debate que ya se discutió miles de veces en este foro y millones en todo internet. Pero me gustaría ...
  #1 (permalink)  
Antiguo 30/06/2010, 17:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 5 meses
Puntos: 11
MyIsam vs InnoDB (pero esta vez en serio)

Bueno no quiero revivir el mismo debate que ya se discutió miles de veces en este foro y millones en todo internet.
Pero me gustaría si alguien con experiencia se anima, que podamos tener una guia definitiva en este tema, en lo posible en base a experiencias.

En internet podemos encontrar las ventajas y desventajas de cada sistema, pero algunos articulos tienen ya mas de 4 años y las cosas han cambiado.
Algunos dicen por ej. que las nuevas versiones de MySQL ya vienen con defecto en InnoDB en lugar de MyISAM (la que yo tengo todavia me pone MyISAM por defecto).

Creo que hace falta algo mucho más concreto y si es posible con numeros reales en este tema.
Por ejemplo decimos que InnoDB es mas rapida insertando que MyISAM, y que por lo tanto conviene usarla cuando hay muchos inserts y pocos selects. Pero "mucho" y "poco" son palabras tan arbitrarias que vuelven casi inútil al consejo.
Cuando realmente conviene tomar la decisión de usar InnoDB sobre MyISAM respecto alo que es performance?
Y de cuanta velocidad estamos hablando?
Lo mismo con los Selects de MyISAM vs InnoDB.

Tambien es cierto que si necesitamos un buen manejo de las FK nos conviene InnoDB, pero he visto que muchos sitios muy complejos (como foros) usan MyISAM, y es que si nuestro codigo maneja bien las FK puede que no haya ningun problema. De nuevo entonces se vuelve dificil la elección.

Creo que hay 2 temas fundamentales que nos definen sin opcion alternativa el tipo de BD:
Si necesitamos transacciones => InnoDB sin otra alternativa
Si necesitamos FULL TEXT => MyISAM sin otra al ternativa.

En ese caso la pregunta seria que pasa si necesitamos ambas???

Alguien se anima a aclarar definitivamente este eterno debate? tal vez con algunos ejemplos de BD reales, donde se decidio por un tipo especifico y que de haber elegido el otro hubiese resultado catastrófico, etc.
No se, por ejemplo Facebook que tipo de BD usa? Foros del Web? Google? (bueno google dudo que use MySQL ^_^ pero por ej. si quisieramos hacer algo como Google que convendría...)

La idea es pasar este debate a casos concretos, meter un poco más de numeros en vez de tantos "cualitativos".

Espero los más experimentados puedan hacernos sus aportes a ver si de una vez dejamos bien en claro esta infinito dilema.

Saludos !!!
  #2 (permalink)  
Antiguo 01/07/2010, 08:30
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 5 meses
Puntos: 11
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Bueno no hay mucho animo de cooperacion parece :P
Dejo yo algunas cositas que voy encontrando:

En una misma BD podemos definir tablas como InnoDB y otras como MyISAM, esto nos permitiria aprovechar las caracteristicas de ambas en principio (por ej. la integridad de InnoDB en ciertas tablas y los FULLTEXT de MyISAM en otras donde debamos buscar).

Digo en principio porque por lo general vamos a tener nuestro FULLTEXT en una tabla que tambien queremos integridad, asique de nuevo hay que decidir.

Tratando de buscar casos "reales", la información no se por qué parece estar siempre un poco escondida y nunca es 100% confiable, pero esto es lo que encontre:
Algunos usuarios importantes de MySQL:
http://es.wikipedia.org/wiki/MySQL#Usuarios_destacados
Cita:
* Amazon.com
* Cox Communications - La cuarta televisión por cable más importante de EEUU, tienen más de 3.600 tablas y aproximadamente dos millones de inserciones cada hora.
* Craigslist
* CNET Networks
* Digg - Sitio de noticias.
* flickr, usa MySQL para gestionar millones de fotos y usuarios.
* Google - Para el motor de búsqueda de la aplicación AdWords.
* Joomla!, con millones de usuarios.
* phpBB, Uno de los más famosos sitios de foros, con miles de instalaciones y con millones de usuarios.
* LiveJournal - Cerca de 300 millones de páginas servidas cada día.[4]
* NASA
* NetQOS, usa MySQL para la gestión de algunas de las redes más grandes del mundo como las de Chevron, American Express y Boeing.
* Nokia, usa un cluster MySQL para mantener información en tiempo real sobre usuarios de redes de móviles.
* Omniture
* Sabre, y su sistema de reserva de viajes Travelocity
* Slashdot - con cerca de 50 millones de páginas servidas cada día.
* Wikipedia, sirve más de 200 millones de consultas y 1,2 millones de actualizaciones cada día, con picos de 11.000 consultas por segundo.
* WordPress, con cientos de blogs alojados en él.
* Yahoo! - para muchas aplicaciones críticas.
Facebook al parecer usa MySQL (combinado con memcached)
http://blog.facebook.com/blog.php?post=7899307130
Aunque el post es del 2007 y no especifica si usa InnoDB o MyISAM

Twitter usaba MySQL y decidio hace poco dejarlo por algo mas potente:
http://bitelia.com/2010/03/twitter-c...ma-mysql-nosql
Al parecer ahora usan Cassandra que creo participa Google en el desarrollo, no tengo ni idea sobre el tema igual.


Volviendo al tema de InnoDB vs MyISAM, nos queda claro que hay basicamente 2 cuestiones: InnoDB nos ofrece integridad y transacciones. MyISAM nos ofrece FULLTEXT.
Como tener ambas prestaciones entonces???
Buscando un poco algunos proponen alternativas como:
1) Crear una tabla MyISAM e insertar ahi todos los textos que requieran FULLTEXT.
2) Crear una base de datos PARALELA hecha en MyISAM

Las dos soluciones a simple vista me parece que presentan mas problemas que soluciones.

Por ultimo tal vez haya que analizar la alternativa que nos brinda PostgreSQL, realmente no lo conozco pero permite mantener la integridad de la BD y a su vez tener FULLTEXT: http://www.postgresql.org/docs/8.3/s...extsearch.html

Aca hay una comparacion de las capacidades de muchos tipos de BD:
http://en.wikipedia.org/wiki/Compari...gement_systems
  #3 (permalink)  
Antiguo 01/07/2010, 08:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 5 meses
Puntos: 11
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Bueno leyendo un poco mas creo que si necesitamos un buen motor de busqueda y a su vez mantener la integridad de nuestra BD y poder usar transacciones, le mejor opciones InnoDB + algun motor de busqueda externo.

Estos motores de busqueda pueden ser:
http://sourceforge.net/projects/clucene/
http://xapian.org/
http://www.sphinxsearch.com/

De hecho muchos recomiendan utilizar estos motores externos aun con MyISAM ya que funcionan mucho mejor que las busquedas con FULLTEXT.

Una desventaja importante de MyISAM en base de datos muy recurridas, es que MyISAM bloquea TODA la tabla en la que esta trabajando, asique si varios usuarios desean escribir en la misma tabla van a tener que esperar. Con InnoDB esto no pasa porque InnoDB solo bloquea LA FILA que esta modificando, dejando libre el resto de la tabla.

Podríamos cerrar el debate eternamente diciendo que SIEMPRE conviene usar InnoDB y que en el caso de necesitar ademas un buscador conviene agregar uno externo? que opinan?

PD: usuarios que usan InnoDB:
Flickr
Habbo
Second Life
Google en algunas aplicaciones
Wikipedia?? :o
http://www.innodb.com/wp/products/innodb/users/

Última edición por enridp; 01/07/2010 a las 09:03
  #4 (permalink)  
Antiguo 02/07/2010, 18:03
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 5 meses
Puntos: 11
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Bueno viendo la euforia que despertó el post en todos los miembros, agrego otro dato.
Cuando hablamos de que MyISAM es mas lento cuando escribimos "mucho", con "mucho" nos estamos reifiriendo a hacer inserts o updates de mas de 10 por segundo.
  #5 (permalink)  
Antiguo 09/08/2010, 01:52
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Muchas gracias por toda esta información.

Sabes si supondría un inconveniente instalar Joomla con InnoDB en lugar de MYISAM? afectaría de alguna manera al funcionamiento del portal?
  #6 (permalink)  
Antiguo 09/08/2010, 05:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Cita:
Muchas gracias por toda esta información.

Sabes si supondría un inconveniente instalar Joomla con InnoDB en lugar de MYISAM? afectaría de alguna manera al funcionamiento del portal?
No. pero la instalación de motores de bases de datos y ,sus componentes (los motores de tablas, en este caso) no es algo que los servicios de hosting permitan hacer, porque afecta el funcionamiento de todo el host.
Lo que tienes que hacer es buscar hosting que tengan el MySQL con InnoDB ya instalado.
O sea: Tu no podrás instalar nada en el hosting si lo que haces es contratar uno.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/08/2010, 05:10
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No. pero la instalación de motores de bases de datos y ,sus componentes (los motores de tablas, en este caso) no es algo que los servicios de hosting permitan hacer, porque afecta el funcionamiento de todo el host.
Lo que tienes que hacer es buscar hosting que tengan el MySQL con InnoDB ya instalado.
O sea: Tu no podrás instalar nada en el hosting si lo que haces es contratar uno.

ok, Muchas gracias. El host ya tiene el MySQL con InnoDB instalado.

A lo que me refería es que las tablas de Joomla vienen por defecto en MyISAM y yo necesito generar a parte unas nuevas tablas que soporte transacciones, por lo que necesito trabajar con InnoDB. Por lo que había pensado instalar las tablas por defecto de Joomla directamente en InnoDB. De echo ya lo hize y de momento no he notado diferencia en el funcionamiento del Joomla pero quizas hay algo que se me escapa.
  #8 (permalink)  
Antiguo 10/08/2010, 06:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Porque Joomla por defecto las crea como MyISAM. La existencia del motor de tablas InnoDB no implica, en MySQL, que se lo use si el script de creación de la tabla dice ENGINE = MyISAM.
Lo que importa allí es lo que el script de creación tiene escrito.
La diferencia la notarías si se produjese alguna violación de integridad referencial, o a la hora de usar transacciones, si es que esa tarea la programas tu.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/08/2010, 10:20
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 5 meses
Puntos: 11
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Hola Telinside
como dice gnzsoloyo Joomla te va a generar todo en MyISAM porque asi viene el instalador.
Supongo podrias tomarte el trabajo o de modificar los fuentes o de ir al PHPMyAdmin una vez instalado el Joomla y cambiar todos los MyISAM a InnoDB pero no tendrías ninguna clave foranea asique es lo mismo.
Lo que si puedes hacer es crear tus nuevas tablas en InnoDB y usar las claves foraneas en tus tablas (mientras no las mezcles con tablas MyISAM).

Por otro lado aprovecho a responderme solo:
SIEMPRE!!! usar innodDB
MyISAM solo sirve si la tabla es muy chiquita no necesitamos claves foraneas ni esperamos que el sitio crezca etc, entonces pordemos aprovechar el Full Text por ejemplo para busquedas de texto.
Pero cuando nuestro sitio tiene una BD mas grande, es muy importante diseñarla bien, y mantener la integridad, esto se logra solo con InnoDB y el Full Text en una tabla grande ya se vuelve inutil porque es muy lento, asique conviene usar buscadores externos como Sphinx (que funcionan perfectamente con InnoDB).
  #10 (permalink)  
Antiguo 11/08/2010, 01:14
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Obviamente en el script de instalación reescribí todos los ENGINE = MyISAM por ENGINE = InnoDB por eso decía que ya lo había probado y no daba ningun problema, pero me ha quedado claro que si esos campos no trabajan con transacciones no debe dar problema.

Muchas gracias a los dos creo que me ha quedado todo claro!

Un Saludo
  #11 (permalink)  
Antiguo 26/09/2010, 14:41
 
Fecha de Ingreso: septiembre-2010
Ubicación: Córdoba, Córdoba, Argentina
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

esto es justo lo que estaba buscando...parcialmente...

hace desde principios de mes que estoy laburando en una web y a punto de terminarla me encuentro con el terrible problema de que MATCH...AGAINST solo funciona con las MyISAM, siendo que todo mi diseño esta basado en INNODB, mayormente por la integridad pero no tanto por la inserción de datos...

el tema que me ha tenido sin dormir este fin de semana es el siguiente...

tengo que laburar con una busqueda FULLTEXT con una tabla que creo que no superara 100.000 registros (pero dentro de un año recien lo estimo a ese numero). las insersiones en esa tabla no son intensivas, pero si las consultas a la misma...otro dato a tener en cuenta es que necesariamente debe ser respetada la integridad referencial a toda costa...un error ahi y quedaria perjudicado para toda la vida...

lo que se me ocurrio (a ver alguien con mas experiencia q m oriente un poco!) es hacer una tabla duplicada de la que nombre recien (la anterior es INNODB sin excepciones) y la duplicada contendría los campos de busqueda FULLTEXT que necesito mas un puntero a la tabla principal...obviamente el duplicado es MyISAM...

retomo la cuestion, esta tabla tendrá no más de 100.000 registros para dentro de un año y las inserciones no son intensivas...conviene lo que estoy planteando? osea tabla original + duplicado donde buscar con MATCH..AGAINST que tenga referencia a la tabla original?o directamente dejo la original como INNODB y trato de usar un motor externo?

en caso de usar un motor de busquedas externo, tengan en cuenta que no tengo acceso fisico al servidor, sino que es un servidor de un hosting premium, pero aun asi recuerden que está un poco limitado...que me recomiendan? habrá alguien sino que haya hecho un workaround al MATCH...AGAINST con PHP y que sea rápidamente implementable en la solucion web en la que trabajo?

desde ya muchisimas gracias por todo! =)
  #12 (permalink)  
Antiguo 27/09/2010, 07:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

A mi personalmente me gusta la propuesta. Si la tabla tiene pocas transaccones yo pondría un trigger que me replicara la tabla innodb donde controlo todas las restriccioneshacia la tabla myisam que se encargaría de las busquedas aprovechando todo el potencial de busquedas fulltext.

Pueden haber otras opiniones.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 27/09/2010, 13:42
 
Fecha de Ingreso: septiembre-2010
Ubicación: Córdoba, Córdoba, Argentina
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: MyIsam vs InnoDB (pero esta vez en serio)

Cita:
Iniciado por huesos52 Ver Mensaje
A mi personalmente me gusta la propuesta. Si la tabla tiene pocas transaccones yo pondría un trigger que me replicara la tabla innodb donde controlo todas las restriccioneshacia la tabla myisam que se encargaría de las busquedas aprovechando todo el potencial de busquedas fulltext.

Pueden haber otras opiniones.

saludos
muchisimas gracias por la respuesta! ahora mismo estoy trabajando en ello! cuando termine y vea que resultados da lo comunico asi sirve de ayuda a otros...

saludos!

Etiquetas: innodb, serio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 6 personas




La zona horaria es GMT -6. Ahora son las 08:06.