O aplicativo coletará continuamente (aproximadamente a cada segundo) a localização dos usuários e os armazenará.
Esses dados estão estruturados. Em um banco de dados relacional, ele seria armazenado como:
| user | timestamp | latitude | longitude |
No entanto, há muitos dados. Haverá 60 × 60 × 24 = 86.400 registros por usuário, diariamente. Mesmo com 1.000 usuários, isso significa 86.400.000 registros diários.
E não são apenas 86.400.000 registros diários. Como esses registros serão processados e as versões processadas deles também serão armazenadas. Portanto, multiplique esse número por aproximadamente 2.
Como pretendo usar os dados
Basicamente, pretendo criar versões mais granulares dos dados de localização para facilitar o consumo. Isso é:
- Classifique os registros de data e hora de gravação de dados recebidos.
- Examinando esta lista em ordem, determine se o local mudou significativamente (verificando quanto a latitude e a longitude mudaram)
- Represente as alterações de localização não significativas como uma única entrada na saída (portanto, a saída é uma versão mais granular dos dados de localização).
- Itere esse processo na saída, exigindo uma alteração ainda maior de latitude e longitude para uma alteração significativa. Portanto, a produção a ser produzida a partir da produção anterior será ainda mais granulada.
- Repita todo o processo conforme necessário.
- Agregue uma variedade de resoluções e envie-as aos usuários. Além disso, armazene todas as resoluções dos dados para consumo posterior.
O que devo usar para armazenar esses dados? Devo usar um banco de dados relacional ou uma solução NoSQL? Que outras coisas devo considerar ao criar este aplicativo?