Ich arbeite an einer Anwendung für "Echtzeit-Rendering von Big Data (Spatial Data)". Mit Hilfe von Spark Streaming + Spark SQL + WebSocket kann ich vordefinierte Abfragen im Dashboard rendern. Aber ich möchte Daten mit interaktiven Abfragen und Ad-hoc-Abfragen abrufen.Cassandra + Spark für Echtzeitanalyse
Zu diesem Zweck versuche ich es mit "Spark Streaming + Cassandra" zu implementieren. Diese Abfragen erforderten Aggregation und Filterung großer Datenmengen.
: Ich bin zu Cassandra und Spark, also bin ich verwirrt über unten approachs, die besser sein wird \ schneller:
- Spark-Streaming -> Filterung (Funke) -> Speichern unter Cassandra -> Interaktive Abfrage -> UI (Dashboard)
- Spark-Streaming -> Filterung (Funke) -> Cassandra speichern -> Spark-SQL -> Interaktive Abfrage -> UI (Dashboard)
Will Cassandra schnell genug sein Ergebnis zu geben, in Echtzeit ? Oder sollte ich eine RDD von Cassandra erstellen, um interaktive Abfragen darüber durchzuführen.
Einer der Abfrage ist:
"SELECT * FROM PERFORMANCE.GEONAMES A INNER JOIN
(SELECT max(GEONAMEID) AS MAPINFO_ID FROM PERFORMANCE.GEONAMES
where longitude between %LL_LONG% and %UR_LONG%
and latitude between %LL_LAT% and %UR_LAT%
and %WHERE_CLAUSE% GROUP BY LEFT(QUADKEY, %QUAD_TREE_LEVEL%) )
AS B ON A.GEONAMEID = B.MAPINFO_ID"
Alle Eingaben und Anregungen sind wir dankbar. Danke,
Dank @doanduyhai für den Vorschlag SASI sekundären Index, machte es wirklich einen großen Unterschied.
Die Leistung hängt sehr stark vom Design Ihrer Tabellen ab und davon, wie viele Zeilen Sie lesen müssen, um eine einzelne Anfrage zu beantworten. Wenn Sie den Pfad für das UI-Rendering optimieren, wäre es sinnvoll, die Daten in Cassandra in einer Form zu schreiben, die Ihnen die benötigten Informationen mit minimalen Lesevorgängen liefert. Ich glaube nicht, dass es eine allgemeine Antwort gibt, ohne auf die spezifischen Anforderungen der App einzugehen. – maasg