Aplikacja będzie stale (mniej więcej co sekundę) zbierać lokalizację użytkowników i przechowywać ich.
Te dane są uporządkowane. W relacyjnej bazie danych byłby przechowywany jako:
| user | timestamp | latitude | longitude |
Istnieje jednak zbyt dużo danych. Będzie dziennie 60 × 60 × 24 = 86.400 zapisów na użytkownika. Nawet przy 1000 użytkowników oznacza to 86 400 000 rekordów dziennie.
I to nie tylko 86 400 000 rekordów dziennie. Ponieważ te rekordy będą przetwarzane, a ich przetworzone wersje również będą przechowywane. Pomnóż tę liczbę przez około 2.
Jak planuję korzystać z danych
Zasadniczo planuję tworzyć gruboziarniste wersje danych lokalizacji dla łatwiejszego zużycia. To jest:
- Sortuj odebrane znaczniki czasu wrt danych.
- Na tej liście w kolejności ustal, czy lokalizacja uległa znaczącej zmianie (sprawdzając, o ile zmieniła się szerokość i długość geograficzna)
- Reprezentują nieistotne zmiany lokalizacji jako pojedynczy wpis w danych wyjściowych (stąd wyjście jest grubszą ziarnistą wersją danych lokalizacji).
- Iteruj ten proces na wyjściu, wymagając jeszcze większej szerokości i długości geograficznej dla znacznej zmiany. W związku z tym produkcja, która ma być wytworzona z poprzedniej produkcji, będzie jeszcze bardziej gruboziarnista.
- Powtarzaj cały proces tyle, ile potrzeba.
- Zagreguj zakres rozdzielczości i wyślij je do użytkowników. Ponadto przechowuj wszystkie rozdzielczości danych do późniejszego wykorzystania.
Czego powinienem użyć do przechowywania tych danych? Czy powinienem używać relacyjnej bazy danych czy rozwiązania NoSQL? Jakie inne rzeczy należy wziąć pod uwagę przy projektowaniu tej aplikacji?