Database 卡桑德拉地理定位,索引还是不索引?

Database 卡桑德拉地理定位,索引还是不索引?,database,database-design,cassandra,Database,Database Design,Cassandra,我的目标是能够编写一个查询,这样我就可以找到一个表中位于某个lat和long半径之间的所有行 这样的查询: SELECT * FROM some_table WHERE lat > someVariableMinLat AND lat < someVariableMaxLat AND lng > someVariableMinLng AND lng < someVariableMaxLng; 从lat>someVariableMinLat和 latSo

我的目标是能够编写一个查询,这样我就可以找到一个表中位于某个lat和long半径之间的所有行

这样的查询:

SELECT * FROM some_table WHERE lat > someVariableMinLat AND 
    lat < someVariableMaxLat AND
    lng > someVariableMinLng AND lng < someVariableMaxLng;
从lat>someVariableMinLat和
latSomeVariableMinling和lng
沿着这些路线


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

假设已将latlng设置为二级索引,则您的查询需要运行
ALLOW FILTERING

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

Allow Filtering的作用是首先查询数据库,然后将部分条件应用于数据库。因此,如果性能是您关心的问题,那么它就远远没有效率

说到性能,需要注意的是,一个具有更多不同值的列并不是一个很好的二级索引。您可以了解有关此主题的更多信息

我该怎么做

我不确定你的要求。但你可以考虑使用。Geohash是经度和纬度的编码形式。它也可以变得相当精确。通过使用geohash字符串,您可以在geohash字符长度和精度之间进行折衷(字符串越长,精度越高)。也许您可以将geohash设置为索引列,这意味着geohash越长,该列的值就越独特。你甚至可以考虑将它设置为主键,以将性能提升到更高的水平。


或者,您可以设置两个主键。一个是保持较短的geohash,另一个是保持相同位置较长的hash,如果您需要不同级别的精度:)

我非常喜欢引入gehash的想法。但是你应该小心选择正确的散列。否则,您的数据将变得不平衡。我认为geohash将是一个很好的调用,它并不需要非常精确,基本上我希望用户能够在5英里、10英里等范围内看到消息。谢谢@Kamyar,感谢您的帖子!如果你有任何进一步的阅读我可以做的,请告诉我在正确的方向!