L'application collectera en continu (environ toutes les secondes) l'emplacement des utilisateurs et les stockera.
Ces données sont structurées. Dans une base de données relationnelle, il serait stocké sous la forme:
| user | timestamp | latitude | longitude |
Cependant, il y a trop de données. Il y aura 60 × 60 × 24 = 86 400 enregistrements par utilisateur et par jour. Même avec 1 000 utilisateurs, cela signifie 86 400 000 enregistrements par jour.
Et ce ne sont pas seulement 86 400 000 enregistrements par jour. Parce que ces enregistrements seront traités et leurs versions traitées seront également stockées. Donc, multipliez ce nombre par environ 2.
Comment je prévois d'utiliser les données
Essentiellement, je prévois de créer des versions plus grossières des données de localisation pour une consommation plus facile. C'est:
- Triez les horodatages des données reçues.
- Iteating sur cette liste dans l'ordre, déterminez si l'emplacement a changé de manière significative (en vérifiant à quel point la latitude et la longitude ont changé)
- Représentez les changements de localisation non significatifs comme une seule entrée dans la sortie (par conséquent, la sortie est une version plus grossière des données de localisation).
- Répétez ce processus sur la sortie, en exigeant un changement de latitude et de longitude encore plus important pour un changement significatif. Par conséquent, la sortie à produire à partir de la sortie précédente sera encore plus grossière.
- Répétez l'ensemble du processus autant que nécessaire.
- Agréger une gamme de résolutions et les envoyer aux utilisateurs. Stockez également toutes les résolutions des données pour une consommation ultérieure.
Que dois-je utiliser pour stocker ces données? Dois-je utiliser une base de données relationnelle ou une solution NoSQL? Quelles autres choses dois-je considérer lors de la conception de cette application?