用户总是将他们的位置(长,纬度)发送给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条记录属于同一个用户怎么办?因此,赢得了其他用户的最后位置..
是否应创建另一个只保留每个用户一个位置的表?并不断更新每个用户的位置?
这里的建议是什么?
答案 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都需要做更多关于压缩的工作,这会降低你的性能