La aplicación recopilará continuamente (aproximadamente cada segundo) la ubicación de los usuarios y los almacenará.
Estos datos están estructurados. En una base de datos relacional, se almacenaría como:
| user | timestamp | latitude | longitude |
Sin embargo, hay demasiados datos. Habrá 60 × 60 × 24 = 86,400 registros por usuario, diariamente. Incluso con 1000 usuarios, esto significa 86,400,000 registros diarios.
Y no son solo 86,400,000 registros diarios. Porque estos registros se procesarán y las versiones procesadas de ellos también se almacenarán. Entonces, multiplique ese número con aproximadamente 2.
Cómo planeo usar los datos
Esencialmente, planeo hacer versiones más gruesas de los datos de ubicación para un consumo más fácil. Es decir:
- Ordenar los datos recibidos wrt marcas de tiempo.
- Iteando en esta lista en orden, determine si la ubicación ha cambiado significativamente (verificando cuánto cambiaron la latitud y la longitud)
- Representa los cambios de ubicación no significativos como una sola entrada en la salida (por lo tanto, la salida es una versión más gruesa de los datos de ubicación).
- Itere este proceso en la salida, requiriendo un cambio de latitud y longitud aún mayor para un cambio significativo. Por lo tanto, la salida que se producirá a partir de la salida anterior será aún más gruesa.
- Itere todo el proceso tanto como sea necesario.
- Agregue una variedad de resoluciones y envíelas a los usuarios. Además, almacene todas las resoluciones de los datos para su posterior consumo.
¿Qué debo usar para almacenar estos datos? ¿Debo usar una base de datos relacional o una solución NoSQL? ¿Qué otras cosas debo considerar al diseñar esta aplicación?