Cassandra Geolocation,索引还是不索引?

问题描述 投票:2回答:1

我的目标是能够编写一个查询,以便我可以在一个特定半径的lat和long之间找到表中的所有行。

所以像这样的查询:

SELECT * FROM some_table WHERE lat > someVariableMinLat AND 
    lat < someVariableMaxLat AND
    lng > someVariableMinLng AND lng < someVariableMaxLng;

沿着这些路线。

现在,我的想法当然应该是一个索引,我只想确认一下,相关阅读或信息会很棒,谢谢!

database database-design cassandra
1个回答
3
投票

假设您已将lat和lng设置为辅助索引,则您的查询需要运行ALLOW FILTERING

既然你对相关的阅读和信息感兴趣,我很乐意与你分享我的小知识。让我先从允许过滤开始。您创建了一个相当复杂的查询,(1)在多个非主键列上使用<和>而不是=(2)。

允许过滤的作用是它首先查询数据库,然后将一些条件应用于它。因此,如果您关心性能,那么效率很高。

说到性能,重要的是要注意,往往具有更多不同值的列不是设置为辅助索引的良好候选者。您可以找到关于here这个主题的更多信息。

我该怎么办?

我不确定你的要求。但你可以考虑使用Geohash。 Geohash是经度和纬度的编码形式。它也可以非常精确。通过使用geohash字符串,您可以在字符的geohash长度和精度之间进行权衡游戏(字符串越长,它们就越精确)。也许您可以将geohash设置为索引列,这意味着geohash越长,列的值就越明显。您甚至可以考虑将其设置为将性能提升到更高级别的主键。

或者,您可以设置两个主键。一,保持短geohash,另一个保持相同位置的较长哈希,如果你想要不同的精度水平:)

© www.soinside.com 2019 - 2024. All rights reserved.