获取多个用户的最后位置?

时间:2017-02-23 09:23:49

标签: cassandra

用户总是将他们的位置(长,纬度)发送给Cassandra,以便将他们的位置存储到时间序列表中。

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 :(得分:0)

您应该使用executeAsync查询每个用户,然后合并结果。

对于每个用户都使用此查询来获取他的最新位置:

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

并使用executeAsync执行此操作,然后合并结果

如果你创建了单独的表,你需要用userid对它进行分区,然后你需要使用userid进行查询,这比较慢,为了更快,你必须为这个表上的每个用户使用executeAsync进行单独的查询。

另外还有一个位置会更频繁地更新,所以每次更新cassandra都需要做更多关于压缩的工作,这会降低你的性能