Escalar las escrituras hasta 734 millones de registros por día usando particionado de MySQL por días
No deja de ser una técnica bastante habitual y que hemos implementado anteriormente en algunos proyectos propios.
Pero siempre es interesante encontrarse con artículos como el de High Scalability titulado “Strategy: Scale Writes to 734 Million Records Per Day Using Time Partitioning“, donde se comenta la mejora que obtuvo Philip Tellis en Yahoo pasando de 2100 inserciones por segundo puntuales (7 millones por día) a 8500 inserciones por segundo sostenidas (734 millones por día).
Como se suele realizar de forma nativa en muchos sistemas de monitorización y logging, en este caso el concepto se aplica a tablas en bases de datos. Cada tabla es particionada por tiempo, de tla forma que definió 12 particiones por día -> 2 horas de datos por partició, consiguiendo que por ejemplo en situaciones de escrituras concurrentes de gran ancho de banda como en el caso del memorial de Michale Jackson se puedan ir utilizando N discos duros.
Os recomendamos asimismo echar una ojeada a Maximal write througput in MySQL, de los asistentes del Blog de Rendimiento de MySQL.
Como sabes en Gaea somos expertos en estos temas. Hablamos ?
Redis: Una alternativa rápida a Memcached
Últimamente en los sistemas con grandes demandas de escalabilidad y disponibilidad el must y/o último gran boom son sin duda los sistemas en la nube basados en memoria.
En este caso vamos a hablar de Redis, que es una base de datos basada en clave/valor al estilo memcached, pero en la que sus datos son también guardados en disco, pudiendo usarla como reemplazo para MySQL y similares.
Está escrita en C y una de sus principales peculiaridades es su increíble velocidad, que en algunas pruebas le han llevado a marcar cifras como 110,000 operaciones SET y 81,000 GETs por segundo en un ordenador básico con Linux. De ahí que es conocido por muchos desarrolladores como el Ferrari o el Lamborghini de las bases de datos.
Sus puntos más fuertes son: open source; persistencia asíncrona manteniendo todo en memoria, soporte para estructuras de alto nivel (es psoible almacenar arrays o conjuntos directamente) y operaciones atómicas.
Una aplicación de prueba llamada Retwis muestra como usar Redis para preparar un clon escalable de Twitter al menos en la parte de envío de mensajes. Hay bastante buena información a bajo nivel sobre como Redis es usado en una aplicación real.
El proyecto podeis encontrarlo alojado en Google Code y soporta los siguientes lenguajes:Ruby, Python, PHP y Erlang.
En nuestro caso estamos bastante más acostumbrados al uso de Memcached (sistema de caché de objetos distribuidos en memoria) pero creemos que la posibilidad de usar Redis como soporte persistente hace que existan una cierta gama de implantaciones donde su uso sea idóneo.
Qué os parece a vosotros ? Puede cuadraros en algún desarrollo un sistema como Redis ?








