texto:   A-   A+
eliax

MemSQL, motor de base de datos compatible con MySQL, 30x más rápido
eliax id: 9520 josé elías en jun 26, 2012 a las 12:09 AM (00:09 horas)
Si son desarrolladores de software, y que dependen de bases de datos, esta noticia de hoy será no querrán pasarla por alto...

Sucede que un par de desarrolladores de base de datos, provenientes de Facebook, han creado un nuevo motor de base de datos al que llaman MemSQL, que según ellos es 30 veces más rápido que MySQL.

Y si no les creen, ahora mismo pueden ir a su página, descargar una versión de pruebas, y correr toda una serie de queries de SQL tanto contra MemSQL como contra MySQL en la misma máquina, y comprobarlo por ustedes mismos. En un video grabado por ellos (enlace al final de este artículo) pueden ver las pruebas en tiempo real, en donde MySQL obtiene en un cierto hardware unos 3,500 queries por segundo, mientras que MemSQL logra 80,000.

Pero, ¿cómo logra esto? Pues no es magia, sino que han empaquetado unos cuantos trucos ya conocidos (tanto dentro como fuera de ambientes de bases de datos), y los han integrados todos en un solo motor, en lo que creo es lo más emocionante que he visto en bases de datos en mucho tiempo...

El truco está primero en que MemSQL mantiene tu base de datos en memoria (de ahí su nombre), lo que le ofrece obviamente una gran ventaja sobre bases de datos que dependen de los lentos accesos a discos duros (noten que incluso un SSD es más lento que RAM), pero con la gran particularidad de que utilizan un esquema que antes de que se finalice una transacción le dan una señal al disco duro que de ahí viene una transacción, después ejecutan la transacción en memoria, y solo después que todo la transacción ha sido realizada es que el resultado es escrito a almacenamiento no volátil (es decir, al disco duro u otro tipo de almacenamiento estático).

Pero eso es solo parte del truco. La otra parte del truco es que MemSQL analiza las sentencias SQL, y las pre-compila a código optimizado de C++, el cual es en esencia convertido a código super optimizado de bajo nivel. Es decir, MemSQL transforma la naturaleza interpretativa de SQL a ejecución binaria, lo que una vez más acelera enormemente los accesos incluso por encima de otros sistemas basados en almacenamiento en memoria (o incluso del tipo NoSQL).

Otro truco es que han implementado la base de datos de manera tal que las lecturas no son bloqueadas por escrituras (aunque especifican que tienes control sobre eso), y además si tienes una aplicación en donde los datos son volátiles que incluso puedes desactivar guardar al disco y mantener todo puramente en memoria para aumentar la velocidad mucho más aun.

Y como si fuera poco (y esto creo es el verdadero golpe maestro que hace esto práctico para ser adoptado por todos), es que los desarrolladores de MemSQL lo hicieron 100% compatible con MySQL, y no solo en relación a la definición de los schemas, sino que incluso de las sentencias SQL y del protocolo de linea.

En otras palabras, si tienes un driver de MySQL, incluso uno de alguna aplicación vieja, simplemente instala a MemSQL, ponlo a correr en el mismo puerto (u otro, si lo deseas) que MySQL, y el driver funcionará igual, con la gran diferencia de que tu aplicación será entre 20 a 30 veces más rápida que antes en términos de accesos a la base de datos.

Esta noticia para mi es fenomenal, ya que una de las grandes limitantes de bases de datos tipo NoSQL es que son difíciles de entender por los que ya llevan años con SQL, así como requieren de toda una diferente forma de acceder a ellos, lo que las hace totalmente incompatibles con sistemas actuales.

Pero con MemSQL esas cosas se tornan cosas del paso, ya que aparte de uno poder obtener la velocidad de NoSQL en un entorno SQL, MemSQL de paso está diseñado inherentemente para escalar horizontalmente, lo que significa el uno poder agregar decenas o miles de servidores que entre todos funcionan como uno solo. Los creadores de MemSQL dicen que su motor está diseñado para manejar flujos de bases de datos en el orden de TeraBytes fácilmente.

Pero (y acá viene lo que todos temían), ¿cuánto cuesta esto? Pues les tengo buenas y no tan buenas noticias...

Hay 3 versiones de MemSQL.

1. Una versión de uso ilimitado pero que solo acepta bases de datos de 10GB o menos (lo que será mucho más que suficiente para la mayoría de las empresas).

2. Una versión de prueba sin límite de datos, pero limitada a funcionar solo 30 días.

3. Una versión ilimitada en datos y tiempo. Sin embargo, desconozco por el momento el costo de licencias en este modelo (si alguien lo averigua, favor de compartir el dato en los comentarios).

La otra restricción es que por el momento MemSQL solo funciona en Linux de 64-bit. No hay versiones ni para Windows ni para OS X por el momento.

Así que no se ustedes, pero salvo las restricciones antes delineadas, creo que MemSQL es justo lo que necesitábamos en estos momentos para reiniciar la carrera de la innovación en el espacio de bases de datos, y no me sorprendería si la misma gente de MySQL (ahora de propiedad de Oracle), o de forks de MySQL adoptan estrategias similares al corto o mediano plazo.

De paso noten algo: Por el momento aparenta que este es el motor de base de datos más rápido del planeta...

página oficial de MemSQL

página oficial de MemSQL para desarrolladores

autor: josé elías

Comentarios

  • ¡Qué genial!, a penas tenga tiempo me divertiré un fin de semana haciendo pruebas. Gracias por el dato.

  • Wao, interesantísimo. La latencia debe de ser prácticamente imperceptible.

  • A retomar los apuntes de base de datos de la escuela.

  • Gracias por la noticia Elías, extremadamente útil

  • En cuanto pueda lo voy a probar. Sin embargo veo un pequeño inconveniente: no dicen el precio. No vaya a ser que baje una versión para desarrollo, haga las pruebas y cuando decida implementarlo mi empresa diga que prefiere gastar en comprar más hardware para mejorar la velocidad, y no en software.

    A demás, ahora que esta gente ha subido el listón, es muy posible que los de mysql se pongan las pilas para implementar las mismas mejoras.

  • Algo de esto estaba esperando hace ya tiempo. Yo utilizo MySQL desde hace ya varios años en mis aplicaciones. Ya me pongo a instalar un Linux de 64 bits y hacer las pruebas.
    Gracias José por la información.

  • Una de las caracteristicas que me gustaria ver en un motor de base de datos es una API de persistencia nativa en lenguajes de programacion para consultas como en los NoSQL, dejando el parser de SQL para compatibilidad. La razon por la que esto es necesario es que muchos programadores han recurrido a utilizar un adaptador que se conoce como ORM(Object Relational Mapping). Esto por la diferencia que existe entre el modelo de objetos y el modelo relacional y tambien permitir que las consultas simples se realicen en el lenguaje de programacion de la aplicacion. Sin embargo,esta capa reduce la eficiencia debido a que transforma tus metodos a una consulta SQL y este SQL se transforma otra vez en una funcion para insertar o leer datos en la estructura interna utilizada por la base de datos (usualmente un arbol B-). Entonces es mas eficiente hacer un enlace directo sin pasar por un parser SQL de un ORM.

  • Muy interesante la forma de mejorar algo ya conocido, prueba que a veces no requieres inventar el agua tibia.

  • Y como se hace para mantener una base de datos de 1 terabyte en memoria? eso no lo entendi completamente

  • Que buena noticia, y no puedo evitar sonreír cuando dice que solo será para Linux 64bits..
    VIVA LINUX.. :D

    • Sería una pelotudes 2.0 tratar de hacer andar esto en Windows. :-)

  • Eliax, puedes explicarnos lo que el autor de este articulo quiere decir: http://dom.as/2012/06/26/memsql-rage/ y me parece importante, porque incluso el CTO de MemSql le responde y reconoce algunos puntos debiles.

  • Eliax que dices de una comunidad estilo taringa! inventada aqui en RD?

  • tengo problemas con el rendimiento de mysql en updates increlemntales que tocan muchas filas :( ayuda?

  • El motor de la base de datos Progress también lo maneja en memoria, pero no se cual de los dos o MemSQL o Progress quien seria mas robusto y eficaz, yo creo que Progress porque maneja las transacciones también en memoria, la novedad ahí seria lo que es compatible con mySQL, pero todo lo demás lo hace Progress(Aunque no es muy conocido) también desde hace tiempo pero quisiera entender porque la sorpresa sobre esta nueva base datos en el mercado ya que aun no lo comprendo, si alguien me lo puede explicar mucho mejor.

    • Por que como dice elias, usaron todos los trucos de mongodb, couchdb, redis y memcache pero ahora en una estructura sql para la vieja escuela que le da problemas entender las base de datos basadas en documentos. Pero esto aun no le falta la ventaja de ser schema less como las base de datos basadas en documentos. El problema para los sqleros con las bases de datos basadas en documentos es que no hay joins, no hay normalizacion y los detalles son un campo o valor del documento, un cambio de paradigma muy grande.

      Si no sabes que son esas tecnologia googlealas son muy interesantes, junto con Big table y map reduce. Tambien lee sobre async IO para ver por que los queries no se bloquean. Node.js tiene un IO asincrono y vertx de java tambien.

  • Me gustaria ver realmente como funciona internamente memsql. Todas las bases de datos tienen un optimizador de queries que se puede modificar dependiendo el tipo de performance que necesites, me gustaria saber varias cosas de memsql. Recuerdo el problema de PET SHOP, donde primero oracle dijo que era mas 2 a 4 veces mas rapido que cualquier otro application server, despues BEA dijo que era 50% mas rapido que oracle y despues salio bill gates diciendo que microsoft era mucho mejor que todos. Yo puedo inventar una base de datos y decir que es 1000 veces mas rapido. Los resultados deben de ser reproducibles con mismo hardware, configuracion, etc. Otra cosa que no habla memsql es si cumple con las propiedades ACID, atomiticy, consistency, isolation, durability. Otra cosa, como utilizan el buffer mannager? si es distribuido, como puedes escapar de la velocidad de la luz? muchas preguntas, que solo les digo no crean en todo lo que dicen las empresas, por que cada una va a decir que es 10 veces mejor que otras.

    • Sí, soporta ACID.

    • Asumo que hace el truco de mongodb, no escribe en el dico duro de una vez sino que hace las operaciones en memoria y cuando es nesecario escribir en el disco hace todo lo que tiene que ver con eso en un solo golpe con un callback. Claro es pura especulacion mia, ademas de que siendo asi no seria ACID y elia dice que lo es.

  • siento que me quedo atras":(

  • En primer lugar, intenté probarlo y según ellos no soportan "permisos granulares". Esto significa que cualquier usuario tiene acceso total a todas las bases de datos. Esto es un problema de seguridad importante, sobre todo si el servidor de base de datos no está dedicado para una base.

    Luego intenté cargarle una base de datos de mysql y tuve problemas por datatypes de mysql que no están soportados por memsql.

    También investigué un poco y encontré este artículo que me pareció bastante preciso sobre por qué no habría que exitarse tanto por lo que promete la gente de memsql.

    http://www.ronggeng.net/mysql-is-bazillion-times-faster-than-memsql/

    Todavía no lo descartaría, pero creo que hay que ser un poco más medido con la palabras en vez de comprar todo tan rápido.

    • +1

      Gracias juanedi por tus impresiones. Fuera bueno ver otras a ver las experiencias de otros.

  • Elias ¿ puedes poner node.js en tu lista de tendencias a la derecha?
    Merece que lo tomes en cuenta.

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
2 + 1 = requerido (control anti-SPAM)
 

"Mi mente va a estallar, esto es EXTRAORDINARIO!!!!!!!!!!"

por "Patricio" en jul 23, 2010


en camino a la singularidad...

©2005-2014 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax