卡桑德拉阶的数学表达式

时间:2018-06-27 12:51:23

标签: cassandra cql

我有一个具有以下规格的列系列:

CREATE COLUMNFAMILY places (
  name text,    
  category text,
  latitude double,
  longitude double,
PRIMARY KEY (name, category));

我需要的是在纬度和经度的基础上按距离公式搜索位置和顺序,即我将提供一组纬度和经度,并得到与这些点之间最短距离的排序结果。这是我要运行的查询:

SELECT name, distance(latitude, longitude, 37.8074907, -122.4074504) as distance FROM places ORDER BY distance;

我写了一个名为distance的UDF,它可以计算两组纬度和经度之间的距离。现在,我知道Cassandra不允许使用非聚集键进行排序,但是我无法保存所有距离然后将它们聚类。

我是Cassandra的新手,因此,如果有任何方法可以以某种方式更改表的设计或使用CQL进行某些操作,则可以接受。

1 个答案:

答案 0 :(得分:1)

正如您提到的,Cassandra中的排序基于聚类键;也就是说,订单是表定义的一部分。您对SELECT结果的排序必须遵循表格设计。

最好的选择是将SELECT结果加载到内存中,然后按需对内存中的数据进行排序。 (如果没有有关何时以及执行此操作的频率的更多具体信息,就不可能给出更好的建议。)