La empresa para la que trabajo crea aplicaciones para la plataforma Blackberry.¿La mejor manera de diseñar un sistema de éxitos/análisis escalable?
Hemos estado trabajando en un "sistema analítico" patentado que nos permite incorporar código dentro de nuestras aplicaciones y hacer que las aplicaciones reporten algunas estadísticas a nuestros servidores centrales cada vez que se ejecutan. Actualmente, el sistema funciona bien; sin embargo, solo está en beta con 100-200 visitas por hora. Los "hits" se envían a los servidores sin problemas. Hemos creado una API muy sólida para manejar la aceptación y el almacenamiento de los hits (en una base de datos MySQL). Hemos probado la carga y deberíamos poder acomodar cientos de miles de visitas por hora sin ningún problema. Eso no es realmente un problema.
El problema es mostrar las estadísticas. Hemos construido un panel de visualización similar al de Mint (haveamint.com), que muestra los resultados de cada hora, los últimos días, meses, semanas, años ... etc. La primera versión ejecutó consultas directas extrayendo datos de la tabla de éxitos e interpretándolos sobre la marcha. Eso no funcionó por mucho tiempo. Nuestra solución actual es que los hits están "en cola" para el procesamiento y tenemos un cron que viene cada 5 minutos tomando los hits y clasificándolos en "cachés" por cada hora, día, semana, mes, año ... etc. Esto funciona increíble y es increíblemente escalable; sin embargo, solo funciona para 1 zona horaria. Como toda la compañía tiene acceso a esto, estamos lidiando con unos pocos cientos de usuarios en varias zonas horarias. Lo que defino como "Hoy" en San José es MUCHO diferente de lo que mi colega en Londres define como Hoy. Dado que la solución actual solo se almacena en caché en 1 zona horaria, es una pesadilla para cualquiera que esté verificando los datos fuera de nuestra zona horaria.
Nuestro plan actual para solucionar esto es crear cachés para cada zona horaria (40 en total); sin embargo, eso significaría que estamos multiplicando la cantidad de datos por 40 ... eso es terrible para mí y dado que los cachés pueden ser muy grandes, multiplicarlos suena como una mala idea; Además, cuando vayamos a procesar la cola, va a llevar mucho más tiempo de CPU colocarlas en 40 cachés diferentes.
¿Alguien más tiene una mejor idea de cómo resolver este problema?
(En este momento durante mucho question..it tal no es exactamente fácil de explicar. Gracias a todos!)
Tan específico como su pregunta es, en realidad estoy diseñando algo muy similar e iba a venir aquí para la entrada. +1 –
Sería muy interesante ver tu API de manejo/almacenamiento de hits :) – Jacco