L'applicazione raccoglierà continuamente (circa ogni secondo) la posizione degli utenti e li memorizzerà.
Questi dati sono strutturati. In un database relazionale, verrebbe archiviato come:
| user | timestamp | latitude | longitude |
Tuttavia, ci sono troppi dati. Ogni giorno ci saranno 60 × 60 × 24 = 86.400 record per utente. Anche con 1000 utenti, ciò significa 86.400.000 record al giorno.
E non sono solo 86.400.000 di record al giorno. Perché questi record verranno elaborati e anche le versioni elaborate verranno archiviate. Quindi, moltiplica quel numero per circa 2.
Come intendo utilizzare i dati
In sostanza, ho in programma di realizzare versioni più grossolane dei dati sulla posizione per un consumo più semplice. Questo è:
- Ordinare i timestamp wrt dati ricevuti.
- Andando su questo elenco in ordine, determinare se la posizione è cambiata in modo significativo (verificando quanto sono cambiate la latitudine e la longitudine)
- Rappresenta le modifiche di posizione non significative come una singola voce nell'output (pertanto, l'output è una versione più grossolana dei dati di posizione).
- Iterate questo processo sull'output, richiedendo un cambiamento ancora maggiore di latitudine e longitudine per un cambiamento significativo. Quindi, l'output da produrre dall'output precedente sarà ancora più grossolano.
- Scorrere l'intero processo quanto basta.
- Aggrega una serie di risoluzioni e inviale agli utenti. Inoltre, memorizza tutte le risoluzioni dei dati per un consumo successivo.
Cosa devo usare per archiviare questi dati? Dovrei usare un database relazionale o una soluzione NoSQL? Quali altre cose dovrei considerare durante la progettazione di questa applicazione?