用户始终将其位置(经度,纬度)发送给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条记录属于同一用户怎么办?因此,不会获得其他用户的最后位置。
是否应该创建另一个仅保留每个用户一个位置的表?并不断更新其中每个用户的位置?
有什么建议吗?
您应该使用executeAsync查询每个用户,然后合并结果。
对于每个用户,请使用以下查询来获取他的最新位置:
SELECT * from myapp.locations WHERE organization_id=1 and date='2017-2-23' and user_id = ? LIMIT 1
并使用executeAsync执行此操作,然后合并结果
如果创建单独的表,则需要按用户ID对其进行分区,然后需要使用用户ID进行查询,这比较慢,为了更快,您还必须为此表上的每个用户使用executeAsync进行单独的查询。
另外还有另一件事是位置会更频繁地更新,因此每一次更新cassandra都需要做更多的压缩工作,这可能会降低性能
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句