Ho un sito Web che consente agli utenti di essere "tracciati" e tracciare il loro tempo / lavoro. Ciò comporta che gli utenti siano in grado di aggiornare il proprio account con il mio sito al massimo ogni minuto, ma in genere gli utenti lo fanno solo poche volte al giorno. Tuttavia, non c'è nulla che impedisca ad altre persone di aggiornare il tuo account.
Ogni aggiornamento crea un datapoint, un'istantanea se lo desideri, lo stato del loro account e la quantità di lavoro che hanno svolto.
Gli utenti possono visualizzare la quantità di lavoro che hanno svolto il giorno passato o la settimana scorsa. Questo viene fatto cambiando l'intervallo dei punti dati che vuoi vedere.
La mia domanda ora è: c'è la possibilità molto probabile di avere utenti 300k +. Ci sono anche alcuni account utente che le persone seguono più da vicino di altri, ad esempio un amministratore delegato o un manager, e quindi questi account verranno aggiornati più spesso. Ciò comporta che ci sono possibili 100k + punti dati per un utente singolo , nel giro di un anno o giù di lì.
Attualmente stavo pensando di archiviarli solo tramite la seguente mappatura:
unixtime -> account snapshot
Sembra che sia più facile archiviare come un grande array JSON per un utente, ad esempio (con altri dettagli che vorrei memorizzare):
jsonArray = {
"alice": {
"totalHours": 31.6,
"updates": {
1515653260 : { work: 95%, hours: 8 },
1515691399 : { work: 93%, hours: 10 },
1515695125 : { work: 91%, hours: 7.6 },
1515698694 : { work: 56%, hours: 6 },
}
}
"bob": {
"totalHours": 7.32,
"updates": {
1515654356 : { work: 95%, hours: 1 },
1515690342 : { work: 93%, hours: 6.32 },
}
}
}
Questa è una soluzione efficace? Non riesco a immaginare una stringa json
occupando così tanto spazio che MySQL non sarebbe in grado di mantenerla ma non mi sono mai occupato di cose che probabilmente cresceranno così grandi.
Ci sono altre strutture dati che potrei usare, o che sarebbero più efficienti nell'acquisizione / archiviazione dei dati?