Die Anwendung sammelt kontinuierlich (ungefähr jede Sekunde) den Standort der Benutzer und speichert sie.
Diese Daten sind strukturiert. In einer relationalen Datenbank würde es gespeichert als:
| user | timestamp | latitude | longitude |
Es gibt jedoch zu viele Daten. Täglich werden 60 × 60 × 24 = 86.400 Datensätze pro Benutzer erstellt. Selbst bei 1000 Benutzern bedeutet dies 86.400.000 Datensätze täglich.
Und es sind nicht nur 86.400.000 Datensätze täglich. Weil diese Datensätze verarbeitet werden und die verarbeiteten Versionen davon ebenfalls gespeichert werden. Multiplizieren Sie diese Zahl also mit ungefähr 2.
Wie ich die Daten verwenden möchte
Im Wesentlichen plane ich, gröbere Versionen von Standortdaten zu erstellen, um den Verbrauch zu vereinfachen. Das ist:
- Sortieren Sie die empfangenen Daten nach Zeitstempeln.
- Stellen Sie anhand dieser Liste der Reihe nach fest, ob sich der Standort erheblich geändert hat (indem Sie überprüfen, um wie viel sich der Breiten- und Längengrad geändert hat).
- Stellen Sie die nicht signifikanten Standortänderungen als einen einzelnen Eintrag in der Ausgabe dar (daher ist die Ausgabe eine gröbere Version der Standortdaten).
- Iterieren Sie diesen Prozess auf der Ausgabe, indem Sie eine noch größere Änderung des Breiten- und Längengrads für eine signifikante Änderung erfordern. Daher ist die Ausgabe, die aus der vorherigen Ausgabe erzeugt werden soll, noch grobkörniger.
- Iterieren Sie den gesamten Prozess so oft wie nötig.
- Sammeln Sie eine Reihe von Auflösungen und senden Sie sie an Benutzer. Speichern Sie außerdem alle Auflösungen der Daten für den späteren Verbrauch.
Womit soll ich diese Daten speichern? Sollte ich eine relationale Datenbank oder eine NoSQL-Lösung verwenden? Welche anderen Dinge sollte ich beim Entwerfen dieser Anwendung beachten?