L'azienda per cui lavoro crea applicazioni per la piattaforma Blackberry.Il modo migliore per progettare un sistema di analisi/analisi scalabile?
Abbiamo lavorato su un "sistema di analisi" proprietario che ci consente di incorporare il codice all'interno delle nostre applicazioni e che le applicazioni riportino alcune statistiche ai nostri server centrali ogni volta che vengono eseguite. Attualmente, il sistema funziona correttamente; tuttavia è solo in beta con 100-200 hit all'ora. Gli "hit" vengono inviati ai server senza problemi. Abbiamo costruito un'API molto solida per gestire l'accettazione e l'archiviazione degli hit (in un DB MySQL). Abbiamo testato il carico e dovremmo essere in grado di ospitare centinaia di migliaia di accessi all'ora senza problemi. Questo non è davvero un problema.
Il problema sta mostrando le statistiche. Abbiamo creato un pannello di visualizzazione simile a quello di Mint (haveamint.com), mostra gli hit su ogni ora, i giorni passati, i mesi, le settimane, gli anni ... ecc. La versione pugno eseguiva direttamente query che estraevano i dati dalla tabella degli hit e li interpretavano al volo. Questo non ha funzionato a lungo. La nostra soluzione attuale è che i successi sono "in coda" per l'elaborazione e abbiamo un cron ogni 5 minuti che prendono gli hit e li ordinano in "cache" per ogni ora, giorno, settimana, mese, anno ... ecc. Questo funziona incredibilmente ed è incredibilmente scalabile; tuttavia, funziona solo per 1 fuso orario. Poiché l'intera azienda ha accesso a questo, abbiamo a che fare con poche centinaia di utenti in vari fusi orari. Quello che definisco "Oggi" a San Jose è MOLTO diverso da quello che il mio collega di Londra definisce oggi. Poiché la soluzione corrente è memorizzata solo su 1 fuso orario, è un incubo per chiunque controlli i dati al di fuori del nostro fuso orario.
Il nostro piano attuale per risolvere questo problema è creare cache per ogni fuso orario (40 in totale); tuttavia, ciò significherebbe che stiamo moltiplicando la quantità di dati per 40 ... questo è terribile per me e dato che le cache possono essere molto grandi, moltiplicarle suona come una cattiva idea; Inoltre, quando andremo ad elaborare la coda, ci vorrà molto più tempo della CPU per metterli in 40 cache differenti.
Qualcun altro ha un'idea migliore di come risolvere questo problema?
(Ci scusiamo per un lungo question..it tale non è esattamente facile da spiegare. Grazie a tutti!)
Per quanto specifica sia la tua domanda, in realtà sto progettando qualcosa di molto simile e stavo per venire qui per l'input. +1 –
Sarebbe molto interessante vedere l'API di gestione degli errori/memorizzazione :) – Jacco