索引地理定位,索引还是不索引?

时间:2018-03-02 01:29:33

标签: database database-design cassandra

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

这样的查询:

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

沿着这些方向。

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

1 个答案:

答案 0 :(得分:3)

您的查询需要componentDidMount才能运行,假设您已将 lat lng 设置为辅助索引。

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

允许过滤的作用是首先查询数据库,然后在其上应用部分部分条件。因此,如果您关注性能,那么效率远远不够。

说到性能,需要注意的是,往往具有更多不同值的列不适合设置为辅助索引。您可以找到有关此主题的更多信息here

我该怎么做?

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

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