El coreano que rompió Internet

psy

O casi… De acuerdo, estoy exagerando un poquito. Pero el hecho es que PSY, el famoso cantante surcoreano autor de Gangnam Style, ha hecho que el gigante Google tenga que llevar a cabo una actualización masiva en sus bases de datos. ¿Por qué? Así lo explica el equipo de YouTube:

We never thought a video would be watched in numbers greater than a 32-bit integer (=2,147,483,647 views), but that was before we met PSY. “Gangnam Style” has been viewed so many times we have to upgrade!

Nunca pensamos que un vídeo sería visualizado un número de veces superior a un entero de 32 bits (2.147.483.647 visitas), pero eso fue antes de conocer a PSY. ¡Gangnam Style ha sido visto tantas veces que hemos tenido que actualizar!

Un contador como este no es más que un número, un número que se almacena en un campo de un set de datos asociado a un determinado vídeo en una base de datos. Que se almacena significa memoria, lo que a su vez significa que cada vídeo de YouTube, como cada entrada de este blog, tiene una porción de memoria finita reservada para guardar sus cositas (p. ej., número de visitas, número de “me gusta”, URL, usuario al que pertenece…). En algún momento, el equipo desarrollador de YouTube (probablemente esto venga de antes de su adquisición por Google) pensó que 32 bits eran más que suficientes para tener guardado el número de visitas de un único vídeo. Parece razonable, pero… siempre está la realidad para sorprenderte.

El caso es que supongo que la actualización de marras no habrá sido inmediata precisamente. Tengamos en cuenta que se trata de ampliar un campo que está presente en todos y cada uno de los vídeos de YouTube, cuya información estará replicada probablemente en centenares de bases de datos repartidas por todo el mundo; añádele copias de seguridad, etc., además del hecho de que no puedes modificar por las bravas la base de datos en producción (esto es, la que está en uso). En fin, una odisea de moderadas proporciones para un mísero contador.

La duda que me sigue quedando es por qué utilizaban un entero con signo (arriba no han sido precisos: 2^{31}=2.147.483.648, no 2^{32}, luego el bit que nos falta es el que indica el signo; con un entero sin signo habrían tenido el doble de visitas posibles) para almacenar visitas, cuando nunca vas a tener visitas negativas… Un desperdicio absoluto.