Akurat sama Cassandra to się do tego nie będzie nadawała w ogóle, bo Cassandra jest systemem do obsługi obciążeń transakcyjnych, a nie analitycznych. Nie ma sortowania, złączeń, grupowania itp.
Cassandra + Spark (albo Hadoop) będzie działać, ale dość powoli, bo o ile hurtowe skanowanie rowków wprawdzie można rozbić na wiele maszyn, to sama Cassandra nie jest w stanie ich dostarczać tak szybko jak system dedykowany do operacji hurtowych. Format danych jest zorientowany na rowki, a nie kolumny, a i sposób ich przetwarzania jest zoptymalizowany pod wyszukiwanie po kluczu a nie operacje hurtowe. Jeden węzeł Cassandry jest w stanie przetwarzać raptem typowo jakieś 20k-100k rowków / sekundę (zależnie od wielkości rowka, szybkości dysków, mocy procesora, YMMV), przy czym wydajność skaluje się liniowo z liczbą węzłów. Ta opcja jest dostępna zarówno w DSE, jak i jako FOSS. Tylko że w wersji FOSS, musisz ręcznie zainstalować sobie Sparka, Cassandrę i połączyć naszym konektorem, w DSE masz to out-of-the-box.
Jeżeli to nie musi być produkcyjne, ale chcesz zrobić to poprawnie i osiągnąć dobrą wydajność i pełne HA, to możesz się pokusić o DSE 5.0, które wyjdzie niedługo i pożenienie tego z Parquetem już we własnym zakresie. Trochę eksperymentalne, ale znacznie prostsze do postawienia niż Spark na Parquet na HDFS[1]. No i daje gwarancję, że jak jeden z trzech padnie, to działa dalej, czego nie można powiedzieć o HDFS[1] ani Mongo[2]. W razie czego służę pomocą na priv.
/// Dopisane później:
Teraz dopiero zobaczyłem, że masz mało danych, a skomplikowane analizy. W tej sytuacji Cassandra + Spark (lub DSE) jest idealnym rozwiązaniem. Spark zrównolegli najbardziej rozbudowane zapytania, do tego potrafi dobrze trzymać wszystko w pamięci. Cassandra zapewnia porządne HA.
[1] HDFS ma Single-Point-of-Failure w postaci NameNode'a. Konfiguracja HA wymaga kilku NameNode'ów oraz dodatkowo JournalNode'ów współdzielących wolumen NFS.
[2] Mongo ma architekturę master-slave, gdzie teoretycznie mastera można w dowolnym momencie zastąpić slavem, ale nie jest to proces ani niezawodny, ani łatwy do poprawnego skonfigurowania i nie wiadomo nawet, czy teoretycznie poprawny wiadomo, że teoretycznie niepoprawny:
https://aphyr.com/posts/284-call-me-maybe-mongodb
https://aphyr.com/posts/322-jepsen-mongodb-stale-reads