Mostrando entradas con la etiqueta aprender. Mostrar todas las entradas
Mostrando entradas con la etiqueta aprender. Mostrar todas las entradas

jueves, 3 de abril de 2014

Twitter y MySQL, una combinación que funciona

Si de verdad quieres aprender de cualquier tema, tienes que escuchar y leer a los mejores en ese campo. Si quieres aprender de escalabilidad y rendimiento de bases de datos de gran carga y tamaño, escuchar al arquitecto de bases de datos de un gigante en expansión continua parece una gran idea. Pues bien, Jeremy Cole, uno de los arquitectos de bases de datos de Twitter impartió una charla en el ámbito de la O’Reilly MySQL Conference titulada ‘Big and Small Data in @Twitter’. La tienes completa en el vídeo de arriba pero podemos sacar unas cuantas revelaciones de lo que comenta a lo largo de la media hora larga que dura la charla:
- Al principio en Twitter usaban sharding (particionado de datos horizontal agrupando por alguna característica lógica) temporal. Pronto se dieron cuenta de que se trataba de un error debido a: logística compleja, caro y problemas con la carga de balanceado.
- Entonces pasaron a utilizar FlockDB (para el mapeo de ids) y Glizzard, un framework propio sobre MySQL (usando como tecnología de almacenamiento InnoDB, no MyIsam) para el almacenamiento.
- Con Glizzard no hay datos corruptos y el rendimiento mejora sustancialmente… lo que redunda en unos administradores de bases de datos viviendo un poco mejor.
- ¿Por qué MySQL y no otra? Principalmente porque es estable: funciona bien la mayoría del tiempo y no se suele corromper.
- Además de MySQL / Glizzard: Vertica para analisis y grandes agregaciones, Cassandra para escrituras de alta velocidad y el cada vez más en boga Hadoop para consultas que afecten a una gran cantidad de filas.
Se podrá estar más o menos de acuerdo pero desde luego se trata de aspectos muy interesantes.

viernes, 29 de noviembre de 2013

Aprende a hacer estimaciones

Autor: Giovanni Asproni

Como programador debes ser capaz de proporcionar estimaciones a tus directivos, colegas, y usuarios de las tareas que necesitas realizar, así ellos tendrán una idea razonablemente precisa del tiempo, costo, tecnología y otros recursos necesarios para lograr sus objetivos.
Para poder estimar bien es obvia la importancia aprender algunas técnicas de estimación. En primer lugar, sin embargo, es fundamental aprender qué son las estimaciones, y para qué deberían ser usadas – por extraño que parezca, muchos desarrolladores y administradores no conocen realmente esto.
El siguiente diálogo entre un administrador de proyectos y un programador es nada atípico:
  • Administrador de Proyecto: ¿Puedes darme un estimado del tiempo necesario para desarrollar la característica xyz?
  • Programador: Un mes.
  • Administrador de Proyecto: ¡Eso es mucho tiempo! Sólo tenemos una semana.
  • Programador: Necesito al menos tres.
  • Administrador de Proyecto: Puedo darte dos cuando mucho.
  • Programador: ¡Es un trato!
El programador, al final, se le ocurre un “estimado” que concuerda con lo que es aceptable para el administrador. Pero ya que es una estimación del programador, el gerente lo hará responsable de ello. Para entender qué está mal en esta conversación necesitamos tres definiciones – estimado, fin y compromiso:
  • Un estimado es un cálculo aproximado o un juicio de valor, número, cantidad, o extensión de algo. Esta definición implica que un estimado es una medición factual basada en datos concretos y experiencia previa – la esperanza y los deseos deben ser ignorados cuando se calcula. La definición también implica que, al ser aproximada, una estimación no pueden ser precisa, por ejemplo: una tarea de desarrollo no puede ser estimada para durar 234.14 días.
  • Un fin es una declaración de un objetivo deseable del negocio, por ejemplo, “El sistema debe soportar al menos 400 usuarios concurrentes.”
  • Un compromiso es una promesa de ofrecer una funcionalidad especificada a una determinado nivel de calidad en una cierta fecha o evento. Un ejemplo podría ser “La funcionalidad de búsqueda estará disponible en la próxima versión del producto.”
Los estimados, fines y compromisos son independientes uno del otro, pero los blancos y cometidos deberían estar basados en estimados. Como Steve McConnell señala: “El propósito principal de la estimación de software no es predecir el futuro del proyecto; sino determinar si los fines del proyecto son lo suficientemente realistas para que el proyecto pueda ser controlado hasta lograrlo”. Por lo tanto, el propósito de una estimación es hacer una administración de proyecto adecuada y una planificación posible, permitiendo que los interesados en el proyecto hagan compromisos basados en fines realistas.
Lo que realmente estaba pidiendo el administrador en la conversación anterior al programador era hacer un compromiso basado en un fin no declarado que el administrador tenía en mente, no dar un estimado. La próxima vez que te pidan proporcionar un estimado asegúrate que todos los involucrados sepan de lo que están hablando, y tus proyectos tendrán una mejor oportunidad de éxito.