2017-02-23 3 views
0

ユーザーはカサンドラに常に自分の位置(長距離、緯度)を送信して、自分の位置を時系列テーブルに保存します。複数のユーザーの最後の場所を取得しますか?

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); 

複数のユーザーの最後の場所を取得する際のアドバイスはありますか?

私はそのようなものとしてLIMITを使用するように:

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; 

何最後の6つのレコードが同じユーザーに属している場合はどうなりますか?したがって、他のユーザーの最後の場所を取得しません。

各ユーザーの場所を1つだけ保持する別のテーブルを作成しますか?その中の各ユーザーの場所を更新し続けますか?

こちらのアドバイスは何ですか?

+0

あなたはどのプログラミング言語を使用していますか? Java? –

+0

Erlangに基づくエリクサー – simo

+0

Elixirで実行するexecuteAsyncはありますか? –

答えて

0

executeAsyncを使用して各ユーザーを照会し、結果をマージする必要があります。すべてのユーザーのために

彼の最新の位置を取得するために、このクエリを使用します。

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

をして、この使用executeAsyncを実行し、その後、あなたは別のテーブルを作る場合、あなたはそれを分割する必要があり、結果

をマージあなたはこのテーブルの各ユーザのためにexecuteAsyncを使って別々のクエリを作成しなければならないので、ユーザIDでクエリを作成する必要があります。

はまた別のものの場所がより頻繁に更新されますので、すべての更新カサンドラは、締固めに多くの作業を行う必要があります、あなたのパフォーマンスを遅くすることができますがあり

+0

これは、場所を更新した別のテーブルを持つよりも優れていると思いますか? – simo

+0

答えがありがとう、私はそれが完了したときにエリクシールコードを表示します:) – simo

+0

しかし、頻繁に更新する必要がある場合はどうですか? – simo

関連する問題