Sortea2 Blog

  • 10 razones para elegir InnoDB como motor de almacenamiento de MySQL

    Una de las preguntas más frecuentes al crear una tabla de MySQL es ¿qué elijo, MyISAM o InnoDB? Mucha gente decide de forma un poco aleatoria. Tanto MyISAM como InnoDB son motores de almacenamiento. El motor de almacenamiento es la capa de software que se coloca debajo del motor de consultas (la parte que se encarga de analizar y optimizar las consultas de SQL). Se encarga de hacer todo el trabajo «sucio» de localizar cada byte en el soporte físico, de asegurarse de que se cumplen las restricciones de integridad, de la concurrencia, etc.

    Esta es la parte más compleja del sistema gestor de bases de datos, se compone de cientos de miles de líneas de código altamente optimizado. Cada motor de almacenamiento soporta unas características diferentes.

    • MyISAM: motor de almacenamiento simplificado. Trabaja con los datos de una forma más «relajada», con el objetivo de simplificar su uso y tratar de mejorar el rendimiento. Normalmente las tablas ocuparán menos espacio en disco. Suelen ser más rápidas para consultas de datos. Su contrapartida es que no sigue las 12 reglas de Codd, no tiene control de claves foráneas, transacciones, su control de la concurrencia es muy limitado, etc..
    • InnoDB: motor más sofisticado que cumple con las reglas del modelo relacional bastante a rajatabla. Por ello, garantiza una mayor durabilidad en los datos. En sus inicios se criticaba que añadía muchas características pero era mucho más lento que MyISAM. Esto ya no es un problema y en determinadas circunstancias le supera en rendimiento (sobre todo en modificaciones concurrentes de datos y en consultas indexadas por clave primaria).

    Lo más importante es no mezclar tablas de distintos motores de almacenamiento. De lo contrario hacer un JOIN entre dos tablas de distinto tipo el rendimiento será pésimo. MySQL tratará de optimizarlo lo más posible, pero no podrá hacer milagros. Es posible que tenga sentido tener alguna tabla de un tipo distinto en determinadas circunstancias. Por ejemplo, podemos tener los datos vitales en tablas InnoDB y tener tablas con logs/registros en MyISAM porque no requieren de mucha complejidad.

    A continuación detallaremos diez razones por las cuales InnoDB puede ser la opción correcta frente a MyISAM:

    1.  Soporte de claves foráneas. InnoDB permite relacionar tablas de forma implícita en la base de datos. Esto hará que la propia base de datos se encargue de eliminar inconsistencias en los datos. Con MyISAM tendríamos que «asumir» las claves foráneas, pero podríamos obtener registros inválidos. Por ejemplo, no podemos asegurarnos de que si borramos un producto, primero tengamos que borrar las categorías asociadas al mismo. Con MyISAM podríamos borrar un producto y la tabla de producto_categoria quedaría con registros huérfanos.
    2. Control de concurrencia de alto nivel. En MyISAM cuando una transacción modifica un registro de una tabla, la tabla entera queda bloqueada mientras se realice la modificación. Cualquier otra transacción que se realice mientras tanto tendrá que esperar. Eso puede crear cuellos de botella. Es muy común ver listas de procesos con cientos de INSERTs que están esperando a otro que se ha quedado atascado. Ante eso poco más se puede hacer que reiniciar el servidor o matar los procesos. InnoDB en cambio, proporciona un sistema de bloqueos a nivel de fila, lo que significa que solamente la fila que está siendo modificada queda bloqueada. Otras transacciones tratando de modificar la misma tabla podrían funcionar siempre y cuando modifiquen a otros registros. Modificar una tabla de forma concurrente es altamente probable. Modificar un mismo registro simultáneamente es mucho menos común.
    3. Bajo índice de tablas corruptas. Esto es debido en parte al punto 2. Debido al mal control de concurrencia de MyISAM, es muy habitual encontrarse con tablas corruptas si una transacción falla. En InnoDB se cumple la norma de que cualquier transacción llevará a la base de datos de un estado válido a otro estado válido. Muy raramente encontraremos una tabla InnoDB corrupta. Aunque cabe mencionar que reparar una tabla MyISAM es trivial mientras que en InnoDB puede llegar a ser una pesadilla.
    4. Soporte de transacciones. InnoDB soporta las transacciones. Es posible enviar una serie de consultas que se ejecuten de forma unificada. Así podemos crear aplicaciones con alto índice de fiabilidad, porque podemos asegurarnos de que no dejamos una operación a medio hacer. Cabe destacar que por defecto, el parámetro «autocommit» está activado, así que si queremos utilizarlas tendremos que o bien especificarlo (ver cómo) o desactivar esa opción.
    5. Índices clusterizados. Los datos se almacenan físicamente por orden (alfabético o numérico según se aplique) del valor de la clave primaria. Consultas que filtren únicamente por la clave primaria serán extremadamente eficientes, porque con saber el valor que buscamos, InnoDB con un par de operaciones ya puede saber dónde se encuentra el dato.
    6. Mejores opciones de replicación. La replicación consiste en copiar los datos de MySQL en varios servidores para repartir el trabajo a la hora de realizar consultas de datos. Al usar la replicación es fundamental que todos los nodos (servidores con copia de la base de datos) tengan una copia consistente de los datos, de lo contrario cada nodo podría devolver resultados distintos. Esto sólo lo puede garantizar InnoDB mediante sus transacciones y su avanzado sistema de bloqueos.
    7. Más escalabilidad. Las tablas MyISAM frecuentemente quedan bloqueadas y/o corruptas. En una tabla que almacene 200 registros esto puede ser un problema menor, porque repararla llevaría dos segundos. En una tabla con 20 millones de registros y que ocupe 2GB de espacio en disco esto es inaceptable. Podríamos dejar la aplicación inutilizada durante horas. Si predecimos que nuestra tabla crecerá mucho en tamaño o en requisitos de acceso, deberíamos considerar a InnoDB como opción.
    8. Motor ACID compliant. Estas son las siglas de Atomicidad, Consistencia, Aislamiento y Durabilidad. La base de datos siempre va de un estado válido a otro estado válido.
    9. Tablas sin límite de tamaño. En MyISAM cada tabla se guarda en un archivo por separado. Si la tabla supera los 2GB es posible que el sistema de archivos del sistema operativo no sea capaz de utilizarlo. InnoDB se encarga de que las tablas no tengan límite de tamaño. Para ello es posible que necesite dividir los datos en ficheros más pequeños. MyISAM no cuenta con esas características y tiene que depender 100% del sistema de archivos.
    10. Índices hash adaptables. Si un índice cabe en la memoria RAM y una tabla es consultada frecuentemente, es posible que InnoDB cree automáticamente un índice hash en memoria. Lo que hace es replicar el índice que se guarda en disco en la memoria RAM, de tal manera que los accesos tengan una velocidad muy superior. Es un sistema muy complejo que puede aumentar el rendimiento de las consultas significativamente.
  • Hacer sorteos desde el móvil

    Si quieres realizar un sorteo desde tu móvil, con una conexión a Internet, basta con que uses la página web de Sortea2, todas las funcionalidades de sorteos avanzados, certificados, programados, están disponibles.

    En algunos casos sin embargo es interesante tener la opción de realizar un sorteo sin conexión a Internet. Es por ello que creamos hace ya bastante tiempo la aplicación de escritorio de Sortea2.

    Actualización 26/04/2018: Esta aplicación para Android para realizar sorteos desde el móvil ya no está disponible.

    Esta semana se ha presentado una tercera opción para realizar sorteos sencillos: Una aplicación para teléfonos móviles Android que permite realizar sorteos entre varios participantes, formar grupos para equipos, elegir un número aleatorio o lanzar un dado virtual.

    La aplicación es bastante ligera y tiene un diseño elegante. Una vez se ha realizado un sorteo, existe la opción de enviar por correo electrónico los resultados.

    Si tenéis un teléfono Android, desde Sortea2 os recomendamos que le deis una oportunidad a esta aplicación.

  • Éxito de la promoción de opinionescompra en Sortea2

    Hace unos días terminó la promoción que habíamos organizado para OpinionesCompra, página comparativa de ofertas en Amazon.es. Hemos querido dar un resumen de cómo terminó, para que sirva de pista a todo aquel que pretenda realizar un concurso con el mayor éxito posible.

    La idea inicial era conseguir tantos likes como fuera posible. Sin embargo las expectativas eran modestas, con llegar a 200 hubiera sido un resultado más que positivo. Al estar bastante bien gestionada y enlazada en medios de sorteos, se consiguió una enorme participación, 756 likes en total. Esto llegó a ser un problema, cuando descubrimos que Facebook no te permite contabilizar todas las personas que han hecho like a partir de 500.

    Este problema se resolvió solicitando que escribiera en el muro todo el que quisiera participar. Fue un cambio sobre la marcha para intentar favorecer a todo el que hubiera intentado participar. Estamos trabajando en una solución para facilitar la contabilización de este tipo de participantes, un problema que desconocíamos que muchos podíais tener.

    En resumen, se realizó el sorteo y para que quede bien claro que se ha entregado el premio, le hemos hecho una pequeña entrevista a la ganadora.

    Aquí tenéis los enlaces al resto de pasos de esta promoción, creo que son un resumen muy interesante, una pequeña guía para quien quiera realizar un sorteo de éxito:

    1º. Presentación de la promoción.
    2º. Un recordatorio a los pocos días de cómo nos estaban yendo las cosas.
    3º. Objetivo 1.000 likes.

  • Cómo conseguir 1000 «Me gusta» de Facebook

    Continuamos narrando la crónica de la promoción que hemos organizado para OpinionesCompra.
    Ver primera parte de la historia.
    Ver la segunda parte de la historia.

    Ahora vamos a centrarnos en la evolución de los «Me gusta» en Facebook. Antes de iniciar la promoción, la página de Facebook de OpinionesCompra apenas si había tenido visitas o «Me gusta», no llegaba a 5 el número de fans de la página.

    Tras la aparición en la portada de Sortea2, mediante una Promoción Premium (que ahora cuesta 19,99€), sorteando un bono de compra en Amazon de 75 euros, se consiguió un aumento a 78 fans, en apenas día y medio.

    Luego llegarían visitas de otros usuarios, no presentes en Facebook y el efecto viral propio de Facebook, que provoca que, tras ver algo que han hecho tus amigos, tú también acabes haciéndolo. Por este efecto viral se llegó a 342 likes en una semana.

    El sorteo de un bono de compra en Amazon, por 75€, para todo el mundo que quiera participar, aunque viva fuera de España, fue todo un éxito y superó nuestras expectativas iniciales, cifradas en llegar a los 150-200 «Me gusta».

    En una segunda fase, se decidió probar el alcance de los anuncios de Facebook, un sistema de publicidad a precios moderados con un alcance que ellos anuncian como bastante alto. Creando un anuncio sencillo pero con gancho, se ha conseguido un aumento gradual de los «Me gusta», esta vez con un crecimiento más bajo y a un coste bastante superior al de la promoción en Sortea2. Gestionando adecuadamente el presupuesto, hemos llegado a la cifra actual, de 541 «Me gusta».

    Hay un impacto limitado que se consigue con los anuncios de Facebook, aunque no obstante no deja de ser una buena forma de conseguir llegar nuestra promoción a un tipo de usuarios diferente al que ya conoce la página. Está claro que si el sorteo requiere de «Me gusta», el lugar más adecuado para promocionarlo no es otro sino el propio Facebook.

    Como el sorteo no se celebrará hasta primeros de mayo, es razonable establecer un objetivo más ambicioso, de llegar a los 1.000 me gusta. Para ello lo que haremos será volver a mostrar en portada la promoción, una vez haya pasado bastante tiempo. Es una utilidad que estamos planteando incluir también para todos aquellos que contraten una promoción premium que no sea de resultado inmediato. Una forma de recordar a los usuarios que se puede seguir participando.

    Todo esto mediante una forma legal y orgánica de conseguir personas realmente interesadas en nuestros productos. Hay páginas que ofrecen la compra de «Me gusta» a la carta. ¡Podrías tener hasta 100.000 me gusta!

    En esta página vemos los precios, por 1.000 euros se pueden conseguir 100.000 me gusta. Esto sin embargo es una pésima idea, que, en el mejor de los casos, se traducirá en que casi todos esos «Me gusta» vayan desapareciendo de forma gradual. Lo normal, y de lo que se queja todo el mundo es de que Facebook les acabó cerrando la página con tantos Me gusta.

    Como resumen, os seguiremos contando nuestra experiencia promocionando el sitio, de forma totalmente natural, entre personas interesadas en Amazon y sus productos.

  • Resultados de promociones publicadas con Sortea2 (II)

    Volvemos a hacer un balance del seguimiento de la promoción destacada que habíamos organizado para Opiniones Compra, página para conseguir las mejores ofertas en Amazon. En la anterior entrega os explicábamos cómo hemos organizado toda la promoción del sorteo de 75 euros para ellos, con motivo de la inauguración de su página en Facebook.

    El crecimiento de los likes ha sido excelente. Si bien el primer día se alcanzaron los 100 likes y luego la cantidad se quedó más o menos estabilizada, el efecto viral de Facebook y de la promoción han provocado que los siguientes días hayan sido aún más activos, llegándose a la cifra de 342 likes, un valor muy por encima de la estimación inicial esperada.

    ¿Cómo se han conseguido los likes? Casi exclusivamente mediante la promoción destacada en Sortea2. También hemos conseguido algunas visitas desde páginas «de la competencia» de Sortea2, a las que agradecemos su colaboración. Al final todos tenemos un mismo fin, conseguir que los usuarios se enteren de promociones que puedan interesarles.

    El siguiente paso será contratar publicidad en Facebook, mediante un bono de 30€. La idea es comparar la eficacia de este tipo de publicidad frente a una promoción premium en sortea2. Desde luego el precio de la publicación de una promoción premium, (20€ actualmente) es un 50% inferior. Estamos deseosos de poder contaros la comparativa.

    Gracias a todos los que habéis participado en el sorteo, y ¡Mucha suerte!