2017-02-23 5 views
0

Benutzer senden ihren Standort (long, lat) immer an Cassandra, um ihren Standort in einer Zeitreihentabelle zu speichern.Letzten Standort für mehrere Benutzer abrufen?

CREATE TABLE locations (
    organization_id int, 
    user_id int, 
    date text, 
    unix_time bigint, 
    lat double, 
    long double, 
    PRIMARY KEY ((organization_id, user_id, date), unix_time) 
) WITH CLUSTERING ORDER BY (unix_time DESC); 

Was ist der Rat, wenn es darum geht, den letzten Standort mehrerer Benutzer abzurufen?

Wie ich LIMIT als so etwas wie das verwenden werden:

SELECT * from myapp.locations WHERE organization_id=1 and user_id in (15,16, 17, 18, 19, 20) and date='2017-2-23' LIMIT 6; 

Was passiert, wenn letzten 6 Datensätze zu demselben Benutzer gehört? Somit werden die letzten Speicherorte anderer Benutzer nicht abgerufen.

Soll eine weitere Tabelle erstellt werden, die nur einen Speicherort für jeden Benutzer enthält? und aktualisieren Sie den Standort jedes Benutzers darin?

Was ist der Rat hier?

+0

Welche Programmiersprache verwenden Sie? Java? –

+0

Elixir, basierend auf Erlang – simo

+0

Gibt es executeAsync, um Abfrage in Elixir auszuführen? –

Antwort

0

Sie sollten für jeden Benutzer mit executeAsync abfragen und dann das Ergebnis zusammenführen.

Für jeden Benutzer diese Abfrage verwenden, um seinen neuesten Standort:

SELECT * from myapp.locations WHERE organization_id=1 and date='2017-2-23' and user_id = ? LIMIT 1 

und führt diese ExecuteAsync verwenden, und dann verschmelzen das Ergebnis

Wenn Sie separate Tabelle zu machen, müssen Sie es partitionieren von Benutzer-ID, dann müssen Sie in Abfrage mit Benutzer-IDs machen, die langsamer ist, für schneller müssen Sie separate Abfrage mit executeAsync für jeden Benutzer in dieser Tabelle auch vornehmen.

Auch gibt es eine andere Sache Lage häufiger aktualisieren, also jedes Update cassandra müssen mehr Arbeit auf Verdichtung tun, können Sie Ihre Leistung verlangsamen

+0

Also, glaubst du, das ist besser als eine andere Tabelle, die Standorte aktualisiert haben? – simo

+0

danke für die Antwort, ich werde Ihnen Elixier-Code zeigen, wenn es fertig ist :) – simo

+0

Aber, was ist mit Fällen, die wir häufige Updates tun müssen? – simo

Verwandte Themen