Cassandra 卡桑德拉阶的数学表达式

Cassandra 卡桑德拉阶的数学表达式,cassandra,cql,Cassandra,Cql,我有一个具有以下规格的柱族: CREATE COLUMNFAMILY places ( name text, category text, latitude double, longitude double, PRIMARY KEY (name, category)); 我需要的是,在纬度和经度的基础上,通过距离公式搜索位置和顺序,也就是说,我将提供一组纬度和经度,并根据这些点的最短距离对结果进行排序。这是我要运行的查询: SELECT name, distance(l

我有一个具有以下规格的柱族:

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做些什么,我愿意接受。

正如您所提到的,Cassandra中的排序是基于集群键的;也就是说,顺序是表定义的一部分。选择结果的排序必须遵循表格设计


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

首先,该查询是我的应用程序的主干,其次,我有超过1000万个位置,因此无法在内存中对所有这些记录进行排序。我需要以页面的形式显示位置。啊,一些细节!这组10米的位置是否大多是静态的,即定义明确且不变?如果是这样的话,那么我可以想象一个完全不同的数据模型,其中关键点涉及一个地方,可能是一个距离范围,例如0到50英里,分区中的数据列出了所有9.99米的其他地方,按距离排序。我只是即兴思考。没有保证。大部分情况下,Cassandra查询都非常简单。因此,我认为您的问题更多的是如何在Cassandra中组织数据,而不是如何编写排序距离查询。。。如果这个距离查询是应用程序的主干,考虑缓存内存中的10M位置。为了提高性能,如果您的应用程序经常需要对所有数据进行一些计算,那么您不希望访问任何datatabase。另一方面,如果你的应用有一些限制,数据库可能会有所帮助。e、 g.如果位置分布在全球各地,但您仅按国家查询位置,您可以按国家划分1000万个位置。您好,cassandra似乎不适合您的需要。也许另一个db可以帮助你,比如elasticsearch、mongodb或redis。这些数据库可以查询地理空间数据。