如何在 CQL/cassandra 中执行具有多个 greater/less 条件的查询?

How to perform a query with multiple greater/less than condition in CQL/cassandra?

我正在编写一个地图应用程序。 一旦我得到地图的边界,我就必须查询数据库中的点。 结构:

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新手,请帮忙或提供参考资料。 谢谢!

CQL 只能对一个聚类键应用范围查询,因此您不能直接在 CQL 中执行此操作。

几种可能的方法:

  1. 将 Cassandra 与 Apache Spark 配对。将 table 读入 RDD 并应用过滤操作以仅保留与您要查找的范围匹配的行。然后按rank做排序操作。然后使用collect()收集并输出前十个结果。

  2. 或者在纯 Cassandra 中,按纬度对数据进行分区。例如,一个分区可能包含所有纬度 >= 30 和 < 31 的数据点,依此类推。然后,您的客户端将对所需的每个纬度分区(即 30、31、32、33 和 34)进行多次查询,并对经度使用范围查询(使用经度作为聚类列)。返回结果时,保留排名最高的十行并丢弃其他行。