我正在写一个地图应用程序。 一旦我得到了地图的边界,我就要查询数据库中的点数。 结构:
CREATE TABLE map.items ( id timeuuid, type int, lat double, lng double, rank int )
我希望像这样查询:
select * from map.items where type=1 and (lat > 30 and lat < 35) and (lng > 100 and lng < 110) order by rank desc limit 10;
新手到cassandra,请帮助或提供参考。 谢谢!
答案 0 :(得分:1)
CQL只能在一个群集密钥上应用范围查询,因此您无法在CQL中直接执行此操作。
几种可能的方法:
将Cassandra与Apache Spark配对。将表读入RDD并应用过滤操作以仅保留与您要查找的范围匹配的行。然后按排名进行排序操作。然后使用collect()收集并输出前十个结果。
或者在纯Cassandra中,按纬度划分数据。例如,一个分区可能包含所有纬度的数据点&gt; = 30且&lt; 31,依此类推。然后,您的客户端将对所需的每个纬度分区(即30,31,32,33和34)进行多次查询,并对经度使用范围查询(使用经度作为聚类列)。返回结果时,保留排名最高的十行并丢弃其他行。