Chciałbym prosić przede wszystkim o weryfikację moich założeń i doboru narzędzi:

user image

Opis aplikacji
Aplikacja ma pobierać dane z social media i dokonywać ich analizy.

Założenia

  • Aplikacja webowa (Django) - dane o uzytkownikach aplikacji / konfiguracji przechowywane są w bazie postgresql

  • Celery posłuży do kolejkowania zadań odnośnie pobierania danych z social media

  • Workery odpalone przez Celery zapisują dany do bazy danych Apache Cassandra

  • Analiza danych odbywa się Apache Spark (powiedzmy jakieś proste zliczanie) (Django -> Spark -> Pobranie i mielenie danych -> zwrotka do Django)

  • Wątpliwości **
    Najwięcej obaw mam o to, czy dobrze zrozumiałem wykorzystanie Apache Spark. Chciałbym dokonywać pewnych obliczeń "na żywo" / "na żądanie użytkownika". Chciałbym uniknąć tworzenia predefiniowanych widoków, które byłby cyklicznie uzupełniane na podstawie nowych danych.

Pytania

  • Czy Apache Spark nadaje się do takiego wykorzystania? Jeśli nie to jakie inne narzędzie powinno zostać użyte?
  • Czy zadania analizy danych dla Apache Spark również powinny przechodzić przez kolejkę Celery? (inna kolejka, wyższy priorytet)
  • Jeśli cały schemat jest zły to chciałbym wiedzieć jak obsłużyć przypadek - mamy X miliardów rekordów typu {id, social_user_id, sex, country, like_timestamp}. Chciałbym w aplikacji webowej zobaczyć np. ilu jest ludzi z danego kraju, ile kobiet z kraju X lajkowało post w ostatnim miesiącu etc. Przy czym chciałbym żeby te dane były liczone "na żywo", w sensie w aplikacji ktoś naciska "pokaż" - pojawia się jakiś loader - w tym czasie serwer wykonuje obliczenia na aktualnych danych.