Acerca

fesja. geek. estudiante de teleco. bloguer. apasionado. sentido común. muchas ideas en mente. viajero.

Proyectos

Cátedra Telefónica-UPM e IEEEdb son algunos en los que participo actualmente.

Twitter

cargando...

« Convención sobre configuración

Facebook Beacon en 1858, historia de la Web 2.0 »

Cómo hacer contadores globales eficientes

6 Junio 2008

Escrito por fesja

Categorías

Webs

Etiquetas

, , ,

Feed de comentarios y
Trackback de esta entrada

Leyendo los hilos de discusión del grupo de Google App Engine me he encontrado con una manera muy curiosa de contar el número de usuarios, o entradas o cualquier tipo de objeto; de una aplicación que depende de una base de datos. Yo estaba acostumbrado a hacer un count(), pero claro, eso es lento. Asi que otra opción era guardar el número de objetos en la base de datos.

La gente de Google tiene una solución más ingeniosa. El problema de tener un sólo contador global es que se puede convertir en un cuello de botella porque muchos usuarios estarán navegando por tu web (es lo que deseamos, ¿no?). Asi que la solución que proponen es tener 20 contadores parciales (o 5 o 50) y cuando añadamos un nuevo objeto, sumarle +1 aleatoriamente a uno. Y luego sumamos todas las cuentas parciales cuando queramos hallar el número total. Y redondeando un poco más la solución, podemos cachear los resultados parciales y así nos ahorramos esas consultas.

La solución en Python está aquí a la espera de que Google añada los vídeos del evento de Google IO en su canal de YouTube.

Deja un comentario

Necesario

Necesario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Reglas: No escribas en mayúsculas, escribe con todas las letras, no insultes a nadie, no hagas spam, no soy una consulta técnica... en resumen, usa el sentido común :-)